我正在Pycharm中运行Python 3.8.2和Pygame 2.0.0.dev6
我阅读了一些关于类似问题的其他线程,但不明白为什么在这个实例中会出现这个错误。这篇文章的目的有两个:1是我想了解这个错误(我对编程非常陌生),2是我想知道是否有更好的方法来完成我试图做的事情
我试图让敌人在x方向来回摇摆,他们的变化要么是由一定时间的流逝触发的,要么(还没有添加)与其他敌人的一定数量的碰撞触发的
该错误似乎是由movement
方法中的第二条if语句触发的,如下所示:
class EnemyShip(ShipGeneral):
MOVEMENT_TIME = 180
SHIP_TYPE_DIC = {
'pawn': Images().pawn_ship_img,
'boss': Images().boss_ship_img
}
def __init__(self, x, y, enemy_type=None):
super().__init__(x, y, enemy_type)
self.ship_img = self.SHIP_TYPE_DIC[enemy_type]
self.mask = pygame.mask.from_surface(self.ship_img)
self.health = 100
self.movement_time_counter = 0 # Defaut set to zero
def movement_timer(self):
if self.movement_time_counter >= self.MOVEMENT_TIME:
self.movement_time_counter = 0
elif self.movement_time_counter > 0:
self.movement_time_counter +=1
def movement(self): # TODO fix enemy movement to prevent overlapping and allow for advances
y_vel = 10
x_vel = 2
boundaries = Settings()
if self.y <= 100:
self.y += y_vel
if self.movement_time_counter == 0: # should be true and run first in the while loop
x_direction = random.choice(['R', 'L'])
self.movement_time_counter += 1
if x_direction == 'R' and self.x + self.ship_img.get_width() + x_vel < boundaries.screen_width:
self.x += x_vel
if x_direction == 'L' and self.x > 0:
self.x -= x_vel
我在这里调用了游戏主while循环中的类和函数:
enemies = []
running = True
while running:
clock.tick(FPS)
gf.check_events() # checks for user quit event
if len(enemies) == 0: # updates level and spawns new enemies after each wave
level += 1
fleet_size += 5
for enemy in range(fleet_size):
enemy = EnemyShip(
random.randrange(20, 800 - 20),
random.randrange(-1000, -100, 10),
enemy_type=random.choice(['pawn', 'pawn', 'pawn', 'pawn', 'boss'])
)
enemies.append(enemy)
for enemy in enemies: # enables each enemy to move
enemy.movement()
enemy.move_missile(7, playership)
enemy.movement_timer()
if enemy.health <=0:
enemies.remove(enemy)
如果运行此命令,则会出现以下错误:
File >"/Users/aaronbastian/Documents/PythonCode/Part_II_Projects/alien_invasion/ships.py", line 114, in movement if x_direction == 'R' and self.x + self.ship_img.get_width() + x_vel < boundaries.screen_width: UnboundLocalError: local variable 'x_direction' referenced before assignment
我不理解这个错误,因为我认为self.movement_time_counter == 0
应该计算为True,从而在运行以下if语句之前分配x_direction
如果有人能向我解释我的错误,我将不胜感激!另外,如果这是一篇多余的帖子,我很抱歉,我只是无法理解其他类似的帖子
编译期间会引发此错误,因为您尚未在任何位置初始化变量。只需在___init___()中使用一些默认值初始化变量。 例如:
相关问题 更多 >
编程相关推荐