在使用 Python Arcade 库开发一个简单的街机游戏时,我遇到了这个困难:
我需要在另一个类的函数中调用一个类对象的方法,但是python看不到。你如何“打开”火箭的 follow_player() 方法?
class MyGame(arcade.View):
def __init__(self):
self.rocket.list = arcade.SpriteList()
self.rocket = None
# Создание ракет
for i in range(ROCKET_COUNT):
# Создаем экземпляр ракеты
rocket = Rocket("assets/Rocket2.png", SPRITE_SCALING_ROCKET)
# Позиция ракеты
rocket.center_x = self.player_sprite.center_x +
random.choice([random.randint(-1500, -500),
random.randint(500, 1500)])
rocket.center_y = self.player_sprite.center_y +
random.choice([random.randint(-1500, -500),
random.randint(500, 1500)])
rocket.angle = 180
# Добавляем ракеты в список для ракет
self.rocket_list.append(rocket)
def on_update(self, delta_time):
for rocket in self.rocket_list:
self.rocket.follow_player(self.player_sprite)
class Rocket(arcade.Sprite):
""" Класс ракеты """
def follow_player(self, player_sprite):
""" Функция перемещения ракеты к игроку (аргумент функции) """
# траектория ракеты, обусловленная изменениями координат
self.center_x += self.change_x
self.center_y += self.change_y
start_x = self.center_x
start_y = self.center_y
# Получение места назначения для ракеты #destination
dest_x = player_sprite.center_x
dest_y = player_sprite.center_y
# Расчет: как доставить ракету в пункт назначения (к игроку)
# Расчет угла(по которому будет двигаться ракета) в радианах между
# начальными точками и конечными точками.
x_diff = dest_x - start_x
y_diff = dest_y - start_y
# расчет угла
n = 2.25 # 2.25
angle = math.atan2(y_diff + n, x_diff + n)
# С учетом угла вычислим наше изменение х и изменение у.
self.change_x = math.cos(angle) * ROCKET_SPEED - n
self.change_y = math.sin(angle) * ROCKET_SPEED - n
angle_rad = math.radians(self.angle)
self.angle += self.change_angle
self.center_x += -ROCKET_SPEED * math.sin(angle_rad) # * random.randint(1, 3)
self.center_y += ROCKET_SPEED * math.cos(angle_rad) # * random.randint(1, 3)
你在循环体中有一个错误,这里:
在循环体中,您访问的是类属性
self.rocket,而不是变量rocket。像这样更正确:关于修复后将出现的警告:
从库文档中的例子来看,需要描述游戏环境并在
setup. 例如:在这种情况下,不会出现警告。