我试图用pygame编写游戏代码,但是当我尝试制作一个步行动画时,它只显示了一个精灵。
def go_left(time):
ness_current = 1
global ness
global is_walking_left
ness_list = [ness_walking,ness_standing]
current_time = pygame.time.get_ticks()
go_left.walking_steps = 1
now = 0
cooldown = 1000
flag = 0
ness = ness_list[ness_current]
print current_time - game_loop.animation_timer
if (current_time - game_loop.animation_timer) > 200:
print 'Changing'
if ness_current == 0:
print 'Changing to sprite 1'
now = pygame.time.get_ticks()
ness_current = 1
current_time = now
elif ness_current == 1:
print 'Changing to sprite 0'
if (current_time - game_loop.animation_timer) > 200:
ness_current = 0
current_time = now
else:
'Changing to sprite 0 because of sprite reset'
ness_current = 0
current_time = now
def stop_it():
global ness
ness = pygame.image.load('nessthekid.png').convert()
ness.set_colorkey(WHITE)
car_list = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
player_list = pygame.sprite.Group()
当我尝试使用它时,它只显示一个精灵而不是另一个精灵。我希望它每隔1或2秒进行一次切换,使其看起来像走路一样。感谢帮助。
答案 0 :(得分:0)
首先,我强烈建议使用类,以避免使用全局变量。
其次,当您将当前时间设置回现在(0)时,您将使其成为current_time - game_loop.animation_timer将始终为负数。这将使语句不再运行。
目前,我建议您从代码中删除“if(current_time - game_loop.animation_timer)> 200:”。
这是一个让你入门的例子(显然你必须改变它以使它适合你)
class Ness:
def __init__(self):
self.all_images = [ness_walking,ness_standing]
self.current = 0
self.image = self.all_images[self.current]
def walk_left(self):
# Every 200 clicks
if pygame.time.get_ticks() % 200 == 0:
if self.current == 0:
self.current = 1
else:
self.current = 0
self.image = self.all_images[self.current]
答案 1 :(得分:0)
正如@Red Twoon所说,在课堂上分开的东西是一个非常好的做法。你应该做的另一件事是不要直接依赖get_ticks,而是使用某种时间独立的运动/动画。 您可以在游戏循环中使用增量时间来实现此目的。
while(True):
delta = #Get the delta time.
handle_events();
update(delta);
draw(delta);
#Animation stuff.
time_to_animate_frame = 200;
time_since_last_update = 0;
...
time_since_last_update += delta;
if(time_since_last_update > time_to_animate_frame):
time_since_last_update - time_to_animate_frame;
#Do the animation.....