这几天我一直在做我的第一个游戏,我刚刚成功地得到了跳跃和奔跑的动画。你知道吗
在我继续之前,我正在尝试清理我的代码。我注意到大多数有经验的用户的代码几乎90%都是函数,所以我很自然地尝试去模仿(可能是愚蠢的,因为我不知道自己在做什么)。你知道吗
我偶然发现的一个问题是,在开放式代码中工作的间隔计时方法在分离为函数时不再工作。一方面,我喜欢组织不同的职能,这种感觉比以前更加复杂。你知道吗
下面是我关于移动和拉动精灵的干净函数。我不确定我是否发布了所有相关信息,因此请告知我是否可以提供其他信息:
## CREATES SPRITESHEET VARIABLE
def player(spritesheet,moveInput):
marine = []
for nbr in range(0,5,1):
marine.append(spritesheet.subsurface(64*(nbr),64,64,64))
for nbr in range(5,7,1):
marine.append(spritesheet.subsurface(64*(nbr-5),0,64,64))
for nbr in range(7,8,1):
marine.append(spritesheet.subsurface(64*(nbr-5),0,64,64))
return marine
## FIGURES OUT WHERE PLAYER WANTS TO MOVE
def playermove():
for event in pygame.event.get():
if event.type == pygame.QUIT:
mainloop = False # pygame window closed by user
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
mainloop = False # user pressed ESC
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
moveInput[0] = True;
if event.key == pygame.K_RIGHT:
moveInput[1] = True;
if event.key == pygame.K_UP:
moveInput[2] = True;
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
moveInput[0] = False;
if event.key == pygame.K_RIGHT:
moveInput[1] = False;
if event.key == pygame.K_UP:
moveInput[2] = False;
return moveInput
## RETURNS FRAME FROM SPRITE LIST
def aniframe(moveInput,cycletime):
interval = .25
frame = 0
if not moveInput[0] and not moveInput[1]:
if cycletime > interval:
frame = 5
frame += 1
cycletime = 0
if frame > 6:
frame = 5
if moveInput[0]:
if cycletime > interval:
frame += 1
cycletime = 0
if frame > 4:
frame = 0
if moveInput[1]:
if cycletime > interval:
frame += 1
cycletime = 0
if frame > 4:
frame = 0
return frame
playersprite = player(spritesheet,moveInput)
screen.blit(playersprite[aniframe(moveInput,cycletime)], (x,y))
我要把这归咎于cycletime。您正在aniframe()中修改它,但更改不会离开函数,因为数字是按值传递的,而不是按引用传递的。你也得把它还回去。例如,return frame,cycletime,然后在函数外,have frame,cycletime=aniframe(moveInput,cycletime)
相关问题 更多 >
编程相关推荐