image - 从图像中构建动画。 Pygame(python3)

标签 image animation python-3.x frame pygame

我有带动画的文件 (*.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 - 是为播放动画而创建的。

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 个带帧的文件,这个函数会是什么样子吗?

最佳答案

为了加载动画,您可以使用 for 循环来遍历需要加载的内容,因为它们的命名很方便(做得很好):

frames=[]
for i in range(42, 52):
    frames.append(pygame.image.load('Gfx/Dices/dice00'+str(i)+'.png').convert_alpha())

现在帧都在一个列表中,这使得位图传输变得更加容易。

for frame in frame:
    screen.blit(frame, ???)

通过这种方式,您可以位图传输​​并加载动画,而无需任何冗长或重复的内容

关于image - 从图像中构建动画。 Pygame(python3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14296320/

相关文章:

python - 关于 3. 0's "hashlib"模块的问题

java - JFrame 使用 Alpha channel 绘制动画 gif 图像

ios - 如何从 iOS 照片(如相机胶卷)获取图像创建日期时间或上次修改日期时间?

javascript - 我有一个适用于我的侧边导航的动画,但需要点击两次才能触发动画

javascript - 更有效的缩放背景图像的方法

python - 从 python 中的字典列表中提取子字典的更有效方法是什么?

python - 如果密码正确,如何发现 'Access granted' 被打印了 3 次?

css - 如何在响应式网格中获取图像上的字幕?

android - 矢量与图像源(优缺点)?

Android动画减少口吃/断断续续/滞后