首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pygame组更新方法不起作用

pygame组更新方法不起作用
EN

Stack Overflow用户
提问于 2018-04-25 21:23:00
回答 1查看 571关注 0票数 1

我正在创建一个类似于太空入侵者的游戏,但是精灵团队更新方法不起作用。

pygame.sprite.Group.update方法不是一个接一个地更新列表中的对象,而是使列表中存储的所有对象都采用第一个对象的值。

设计外星人的类:

代码语言:javascript
复制
class Alien(Sprite):
    def __init__(self,screen,ai):
        super().__init__()
        self.image = pygame.image.load("C:\\Users\\ozzy\\Desktop\\project alien invasion\\alien.bmp")
        self.screen = screen
        self.rect = self.image.get_rect()
        self.ai = ai
        self.rect.x = self.rect.width
        self.rect.y = self.rect.height
        self.x = float(self.rect.x)

把舰队移到右边

代码语言:javascript
复制
def update(self):
    self.x += 3
    self.rect.x = self.x

创建舰队

代码语言:javascript
复制
def create_fleet(screen,ai,aliens,ship):    

    alien = Alien(screen,ai)
    alien_width = alien.rect.width
    alien_height = alien.rect.height
    number_alien_x = get_number_x(ai,alien_width)
    number_alien_y = get_number_y(ai,alien_height,ship)
    for alien_coloum in range(number_alien_y):
       for alien_row in range(number_alien_x):
          create_aliens(screen,ai,alien_width,aliens,alien_row,alien_coloum)                            

获取可以显示在显示器上的行数

代码语言:javascript
复制
def get_number_y(ai,alien_height,ship):

    available_space_y = (ai.height - ship.rect.height -(3 * alien_height))
    number_of_rows = int(available_space_y / (2 * alien_height))
    return number_of_rows

获取可在屏幕上显示的列数

代码语言:javascript
复制
def get_number_x(ai,alien_width):

    available_space_x = ai.width - 2 * alien_width
    number_of_aliens = int(available_space_x /(2 * alien_width))
    return number_of_aliens

将舰队存储在组中

代码语言:javascript
复制
def create_aliens(screen,ai,alien_width,aliens,alien_row,alien_coloum):

    alien = Alien(screen,ai)
    alien_x = alien_width + 2 * alien_width * alien_row
    alien.rect.x = alien_x
    alien.rect.y = alien.rect.height + 2 * alien.rect.height * alien_coloum
    aliens.add(alien)

在组上调用update方法

代码语言:javascript
复制
def update_aliens(aliens):


    for a in aliens.sprites():
       print(a.rect.x)
    aliens.update()
    #the update method cause the x co ordintes to be same first object
    for a in aliens.sprites():
       print(a.rect.x)


#main method
aliens = Group()
create_fleet(screen,ai,aliens,ship)
while True:
   update_aliens(aliens)

在调用update方法之前,组中的外星人有不同的x坐标,但在update方法之后,它们都有相同的x坐标。

有人能解释一下哪里出了问题吗?这个函数会产生某种副作用吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-04 16:06:36

update()方法中定义self.x,而不是__init__()方法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50023533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档