目前我无法让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
答案 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