Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Столкновение с объектами (VB 6.0) Добавлено: 18.01.13 14:17  

Автор вопроса:  Max
Доброго дня, форумчане!
 Сейчас занимаюсь разработкой движка для игры (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
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 18.01.13 18:09
Не стоит писать игры с графикой на лейблах)) Проверка позиций вряд ли отнимает много ресурсов. Хотя опять же наверняка было бы всё быстрее, если бы объекты описывались в cls классе. Тогда не надо было бы обращаться к свойствам лейблов столько раз. Ну и рисовать самостоятельно всё, желательно только изменяющуюся часть изображения.
Это так.. мысли. Никогда игр не писал. Ну если только чуть-чуть, и то стыдно)

Ответить

Номер ответа: 2
Автор ответа:
 Max



Вопросов: 1
Ответов: 1
 Профиль | | #2 Добавлено: 18.01.13 19:00
Код этот для примера, в двигле же лейблы я не использую=)
Как показала практика - ресурсы кушает предостаточно. Если учесть, что минимальный размер карты - 10000х10000 пикселей, то объектов на ней будет ну очень много.
Про классы не понял. Что значит "объекты описывались в cls классе"?

Ответить

Номер ответа: 3
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам