在pygame中使用self.rect.centerx随机移动角色

时间:2017-04-02 17:33:13

标签: python pygame

目前我无法让chracater随着if语句的每次迭代移动。角色每秒应移动100个像素,但在循环开始时只移动一次。当我包含语句self.rect.centerx =(WIDTH * 3/4)时,角色根本不会从他的位置移动。当我不包括self.rect.centerx =(WIDTH * 3/4)时,字符跳转到屏幕的另一侧。我无法移动我的rect语句,或者我会得到一个错误,说rect不是TRUMP类的属性。请指教。

class TRUMP(pg.sprite.Sprite):
    def __init__(self, game):
    pg.sprite.Sprite.__init__(self)
    self.game = game
    self.current_frame2 = 0
    self.last_update2 = 0
    self.load_images()
    self.update()
    self.image = self.TRUMP_fingers_l

    self.rect = self.image.get_rect()
    self.rect.center = (WIDTH *3/4), (589)
    self.rect.centerx = (WIDTH*3/4)
    self.rect.centery = 589
    self.pos = vec((WIDTH/2), (HEIGHT/2))
    self.vel = vec(0, 0)
    self.acc = vec(0, 0)

    self.screen = pg.display.set_mode((WIDTH, HEIGHT))
    self.clock = pg.time.Clock()

 def update(self):
    now = pg.time.get_ticks()
    if now - self.last_update2 > 1000:
    self.last_update2 = now
    self.current_frame2 = (self.current_frame2 + 1) % len(self.TRUMP_walk_cycle)
    self.image = self.TRUMP_walk_cycle[self.current_frame2]
    self.rect = self.image.get_rect()
    self.rect.centerx = (WIDTH*3/4)
    self.rect.centerx -= 100
    print(self.rect.centerx)
    self.rect.centery = 589

1 个答案:

答案 0 :(得分:1)

您正在0,0(self.rect = self.image.get_rect())创建一个新的rect,然后使用完全相同的值来更改每次更新的位置。你可以做的是使用前面的rect位置,初始化新的rect然后增加位置。像这样:

def update(self):
    now = pygame.time.get_ticks()
    if now - self.last_update > 250:
        self.last_update = now
        self.current_frame = (self.current_frame + 1) % len(self.TRUMP_walk_cycle)
        self.image = self.TRUMP_walk_cycle[self.current_frame]
        self.rect = self.image.get_rect(center=self.rect.center)
        self.rect.centerx -= 30

如果您的图片大小相同,您甚至不必创建新的矩形。你可以使用旧的:

def update(self):
    now = pygame.time.get_ticks()
    if now - self.last_update > 250:
        self.last_update = now
        self.current_frame = (self.current_frame + 1) % len(self.TRUMP_walk_cycle)
        self.image = self.TRUMP_walk_cycle[self.current_frame]
        self.rect.centerx -= 30