#python #class #object
Вопрос:
Я пишу небольшую игру на python, в которой игрок перемещается и стреляет в других существ. Я определил три класса следующим образом:
class Player(Entity):
def update(self):
self.direction = Vec3(self.forward * (held_keys['w'] - held_keys['s'])
self.right * (held_keys['a'] - held_keys['d'])).normalized()
self.position = self.direction * 3 * time.dt
def on_click():
Bullet(Entity(model='cube', origin=self.position, color=color.orange, collider='box'), mouse.position)
class Bullet(Entity, dir):
def update(self):
self.position = dir * 6 * time.dt
if self.intersects() # see if the bullet intersects any object of class Enemy
class Enemy(Entity):
def update(self):
self.direction = player.position - self.position # have enemy travel in dir of player
self.position = self.direction * 1.5 * time.dt
Однако у меня возникли проблемы с распределением информации между классами. Например, в классе Bullet
я хочу проверить , пересекается ли маркер с какой-либо Enemy
сущностью, но поскольку я не инициализировал никаких врагов, как мне программно выразить любую сущность класса Enemy
вместо инициализированного объекта класса Enemy
?
Кроме того, в классе Enemy
я хочу изменить направление Enemy
объекта в зависимости от текущего положения Игрока. Однако возможно ли это без подачи инициализированной Player
сущности (скажем p1
) в Enemy
следующее:
class Enemy(Entity, p1):
def update(self):
self.direction = p1.position - self.position # have enemy travel in dir of player
self.position = self.direction * 1.5 * time.dt
Этот метод может работать для класса Enemy
, потому что должен быть только один Player
, но как он будет работать для класса Bullet
, где много врагов?
Комментарии:
1. Этот вопрос не очень хорошо подходит для переполнения стека, поскольку он больше касается проектных решений, чем кодирования. Одним из способов сделать это было бы определить другой объект, например,
Arena
который отслеживает все объекты и обрабатывает их взаимодействия. В моем мире для пуль не имело бы смысла отслеживать все остальные объекты. Возможно, имело бы смысл, чтобы игроки могли транслировать свои позиции врагам, но это во многом связано с тем, как определена и должна работать ваша модель.