Страница: 1 |
Вопрос: Столкновение с объектами (VB 6.0) | Добавлено: 18.01.13 14:17 |
Автор вопроса: ![]() |
Доброго дня, форумчане!
Сейчас занимаюсь разработкой движка для игры (2d-шутер с видом сверху). И, естественно, необходимо реализовать столкновения игрока с объектами (непроходимые стены, к примеру). То, до чего додумался: На форме - лейбл Player, лейбл Object(0), лейбл Player размещён под Object(0) Private Sub Form_Load() Me.ScaleMode = 3 End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyW And CollisionUp <> True Then player.Top = player.Top - 1 End If End Sub Private Function CollisionUp() As Boolean Dim i As Integer For i = 0 To object.UBound If player.Left + player.Width > object(i).Left And player.Left < object(i).Left + object(i).Width And player.Top = object(i).Top + object(i).Height Then CollisionUp = True End If Next i End Function Как видно, это только для движения вверх. Всё работает, конечно, но если делать проверку для всех четырёх направлений, да и ещё если элементов Object больше 30, то всё это неминуемо тормозит (ведь при каждом нажатии кнопки, идёт проверка столкновения игрока со ВСЕМИ объектами на карте). Какие варианты реализации коллизий можно ещё придумать? Поделитесь идеями, пожалуйста |
Ответы | Всего ответов: 3 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 18.01.13 18:09 |
Не стоит писать игры с графикой на лейблах)) Проверка позиций вряд ли отнимает много ресурсов. Хотя опять же наверняка было бы всё быстрее, если бы объекты описывались в cls классе. Тогда не надо было бы обращаться к свойствам лейблов столько раз. Ну и рисовать самостоятельно всё, желательно только изменяющуюся часть изображения.
Это так.. мысли. Никогда игр не писал. Ну если только чуть-чуть, и то стыдно) |
Номер ответа: 2 Автор ответа: ![]() ![]() Вопросов: 1 Ответов: 1 |
Профиль | Цитата | #2 | Добавлено: 18.01.13 19:00 |
Код этот для примера, в двигле же лейблы я не использую![]() Как показала практика - ресурсы кушает предостаточно. Если учесть, что минимальный размер карты - 10000х10000 пикселей, то объектов на ней будет ну очень много. Про классы не понял. Что значит "объекты описывались в cls классе"? |
Номер ответа: 3 Автор ответа: ![]() ![]() ICQ: 345685652 Вопросов: 96 Ответов: 1212 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 18.01.13 22:52 |
ООП.
Создаешь класс, в нем прописываешь все свойста. А в игре создаешь массив из этих объектов: dim gameobjects() as new ClassName а обращаешься к ним как: gameobjects(0).X=0 gameobjects(0).Y=20 и т.д. А графику можно рисовать, к примеру, вот этой штукой, которую написал Mikle http://bit.pirit.info/forum/viewtopic.php?t=12553 p.s. Тупая проверка 100 объектов со 100 объектов это всего лишь 10000 операций на ось. Это просто копейки для процов. даже 10и летней давности. А ведь еще можно оптимизации разные сделать. |
Страница: 1 |
|