我有带动画的文件(* .png)。每个文件 - 框架。所以10个文件--10帧。全动画重复4次。所以我需要渲染图像20次。
DiceAnim1=pygame.image.load('Gfx/Dices/dice0042.png').convert_alpha()
DiceAnim2=pygame.image.load('Gfx/Dices/dice0043.png').convert_alpha()
DiceAnim3=pygame.image.load('Gfx/Dices/dice0044.png').convert_alpha()
DiceAnim4=pygame.image.load('Gfx/Dices/dice0045.png').convert_alpha()
DiceAnim5=pygame.image.load('Gfx/Dices/dice0046.png').convert_alpha()
DiceAnim6=pygame.image.load('Gfx/Dices/dice0047.png').convert_alpha()
DiceAnim7=pygame.image.load('Gfx/Dices/dice0048.png').convert_alpha()
DiceAnim8=pygame.image.load('Gfx/Dices/dice0049.png').convert_alpha()
DiceAnim9=pygame.image.load('Gfx/Dices/dice0050.png').convert_alpha()
DiceAnim10=pygame.image.load('Gfx/Dices/dice0051.png').convert_alpha()
任何人都可以建议使用最小代码长度的函数。 在主程序循环中启动:
if event.type == pygame.MOUSEBUTTONDOWN:
if gameState==7:
if 165<pointer_coord[0]<424 and 249<pointer_coord[1]<607 :
gameState=9
rolling=1
这意味着用户点击区域(x = 165,y = 249,长度= 424-165,身高= 607-249),然后游戏进入状态9.状态9 - 创建用于播放动画。< / p>
if gameState==9:
RollingAnimation(166,253)
RollingAnimation(210,278)
RollingAnimation(166,303)
RollingAnimationControl()
此功能RollingAnimation是:
def RollingAnimation(tx,ty):
global diceTikTac
screen.blit(DiceAnimShadow,[tx,ty])
if diceTikTac==1: screen.blit(DiceAnim1,[tx,ty])
if diceTikTac==2: screen.blit(DiceAnim2,[tx,ty])
if diceTikTac==3: screen.blit(DiceAnim3,[tx,ty])
if diceTikTac==4: screen.blit(DiceAnim4,[tx,ty])
if diceTikTac==5: screen.blit(DiceAnim5,[tx,ty])
if diceTikTac==6: screen.blit(DiceAnim6,[tx,ty])
if diceTikTac==7: screen.blit(DiceAnim7,[tx,ty])
if diceTikTac==8: screen.blit(DiceAnim8,[tx,ty])
if diceTikTac==9: screen.blit(DiceAnim9,[tx,ty])
if diceTikTac==10: screen.blit(DiceAnim10,[tx,ty])
要控制动画,我使用控制功能RollingAnimationControl:
def RollingAnimationControl():
global radiobuttonPos,diceTikTac,round1,gameState
diceTikTac=diceTikTac+1
if diceTikTac==11:
round1=round1+1
diceTikTac=1
if round1>4: # how much need loops animation.
gameState=11
diceTikTac=1
rolling=0
round1=0
问题是:如何最小化此功能。你能想象如果动画使用带有帧的100个文件,它将如何看起来这个功能。
答案 0 :(得分:1)
一种方法是使用精灵表进行动画制作。
def load_anim(start=42, stop=52):
# loads array of many frames
files = [ "Gfx/Dices/dice00{}.png".format(i) for i in range(start, stop) ]
frames = []
for file in files:
surf = pygame.image.load(file).convert_alpha()
frames.append(surf)
return frames
我不确定你是如何制作动画的。如果是基于时间,还是什么?
if event.type == pygame.MOUSEBUTTONDOWN:
if gameState==7:
# I'm assuming this is the rect of a sprite.
# Otherwise you can still create the Rect
if dice_sprite.get_rect.collidepoint(event.pos)
gameState = 9
rolling = 1
答案 1 :(得分:1)
为了加载动画,你可以使用for循环来完成你需要加载的东西,因为它们很方便命名(很好的工作):
frames=[]
for i in range(42, 52):
frames.append(pygame.image.load('Gfx/Dices/dice00'+str(i)+'.png').convert_alpha())
既然框架都在一个列表中,那么就可以更容易地进行blit。
for frame in frame:
screen.blit(frame, ???)
通过这种方式,您可以轻松地加载动画,而无需任何长期或重复的