首页 > 解决方案 > 在函数中使用附加到 pygame.sprite 类的属性时遇到问题

问题描述

所以我通过使用'pygame.sprite'并制作了一个处理所有绘图的函数来修改了一些代码。如果您看到下面的代码,我正在尝试制作一个目标射击游戏,玩家向光标发射子弹并尝试击中目标。'movement()' 函数的意思是做它在锡上所说的,通过将'self.rect.x' 值增加 0.5 使目标在每次屏幕刷新时移动。我在另一个函数(refresh_window()')中调用了该函数。'refresh_window()'函数只处理所有绘图。但是,当我运行游戏时,目标不会移动。我没有收到任何错误或任何东西,我猜到了是因为 'movement()' 中的 self.rect.x 不是全局的,但是当我尝试将其设为全局时,我收到一条错误消息:

File "main.py", line 60
    global item.rect.x
               ^
SyntaxError: invalid syntax

无论如何,我很难看到代码的问题,所以如果你能看到问题,请指出来,我们将不胜感激。干杯。

class Target(pygame.sprite.Sprite):
    def __init__(self, width, height, offset, threshold):
        pygame.sprite.Sprite.__init__(self, target_sprites)
        self.image = pygame.Surface([width, height])
        self.image = target_img
        self.rect = self.image.get_rect()
        self.rect.center = (self.rect.x + 50, self.rect.y + offset)


target_sprites = pygame.sprite.Group()

target_1 = Target(100, 100, 100, 0)
target_2 = Target(100, 100, 300, 1000)
target_3 = Target(100, 100, 200, 2000)

#Function to make targets move each time screen refreshes.
def movement():
  global item.rect.x
  for item in target_sprites:
    item.rect.x += 0.5
    return


#Creating a function which will deal with redrawing all sprites and updating the screen.
def refresh_window():
  window.blit(bgr, (0,0))

  player_sprites.draw(window)
  target_sprites.draw(window)
  movement()
  pygame.display.update()

标签: pythonfunctionooppygamesprite

解决方案


global item.rect.x根本没有任何意义。删除这一行并阅读该global声明


Target对象不会移动,因为您没有将它们添加到target_sprites. 您错过了将pygame.sprite.Sprite对象添加到pygame.sprite.Group()

target_sprites = pygame.sprite.Group()

target_1 = Target(100, 100, 100, 0)
target_2 = Target(100, 100, 300, 1000)
target_3 = Target(100, 100, 200, 2000)

target_sprites.add([target_1 , target_2, target_3])

或者将精灵传递给 grpup 的构造函数

target_1 = Target(100, 100, 100, 0)
target_2 = Target(100, 100, 300, 1000)
target_3 = Target(100, 100, 200, 2000)
target_sprites = pygame.sprite.Group([target_1 , target_2, target_3])

推荐阅读