2012-04-03 4 views
0

В течение некоторого времени я программирую J2ME. Я хочу создать «супер» игру 2D сейчас. На первом тейк наиболее важные данные:Java - загрузка объекта определенного класса

  • игра съемки, где вы идете с солдатом и огонь на врагов
  • каждый солдат раз объект из Soldier класса (наследуется после Sprite)
  • каждый солдат способен генерировать пуля - объекты Bullet класса (наследует после Sprite, тоже)

И я получил здесь проблемы. Это так: пуля попадает в солдата. Как я могу передать объект солдата объекту пули (или наоборот), чтобы уменьшить HP солдата.

Следующая данные на взгляд:

  • Soldier класса получили статическое поле HP
  • Bullet класса получили статическое поле hit содержит данные о силе пули

Я условное утверждение, что проверить сталкивается ли игрок с trpas - TiledLayer. Это не проблема. Проблема заключается в проверке столкновения с пулями. collidesWith() Метод проверки сталкивается с одним объектом объекта Sprite, TiledLayer, Layer. И объектов пули будет много. Есть ли такая опция для проверки столкновения с определенным типом, а не с определенным объектом определенного типа (не проверять столкновение с bullet1, bullet2, bullet3 как очередь, и со всем, что такое тип Bullet)?

Мои вопросы.

1. Как я могу передать данные Пули Солдату, если возникло столкновение? 2. Как я могу обнаружить столкновение с типом Bullet, а не с объектом этого типа x номер пули?

ответ

0

Класс Object имеет метод getClass(), который возвращает имя класса, для которого данный объект является экземпляром. Это не лучшая практика программирования, но она работает. Если вам нужно «перевести» Bullet данные на номер Soldier, добавьте метод столкновения, который принимает пулю/солдат: soldierCollisionEvent(Bullet b), или даже collision(Soldier s, Bullet b). Кроме того, вы можете использовать object-oriented programming, чтобы позволить объектам обмениваться данными и событиями, не беспокоясь (слишком много) о типах классов.

0

У вас нет отражения в J2ME, поэтому нет Bullet.class или чего-либо подобного.

Даже если бы это было так, это все равно не помогло, так как вам все равно придется (каким-то образом) проверить все пули.

Однако вы можете попробовать сделать несколько более интеллектуальных вещей, например, отслеживать несколько пуль, которые, как вы знаете, ближе к Soldier. Если вам кажется, что вы можете даже попробовать передовые алгоритмы/структуры данных для разделения пространства (k-d trees, или BVH), которые очень хорошо документированы для 3D-графики и намного проще при использовании в 2D.

Удачи вам!

Редактировать: вам не нужно всех причудливых вещей, если у вас всего несколько пуль (скажем, 10). Это только усложнит ситуацию, просто проверка столкновений для каждой пули должна быть прекрасной.

Смежные вопросы