前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pygame 笔记-3 角色动画及背景的使用

pygame 笔记-3 角色动画及背景的使用

作者头像
菩提树下的杨过
发布2018-12-25 15:46:31
1.2K0
发布2018-12-25 15:46:31
举报

上二节,已经知道如何控制基本的运动了,但是只有一个很单调的方块,不太美观,本节学习如何加载背景图,以及角色的动画。

素材准备:(原自github)

角色动画的原理:动画都是一帧帧渲染的,比如向左走的动画,实际是类似上图中的L1.png~L9png 连续切换,由于肉眼视觉暂留的作用,所以看上去象连续的动画。

好了,直接上代码:(关键地方已经加了注释)

代码语言:javascript
复制
import pygame
import os

pygame.init()

WIN_WIDTH, WIN_HEIGHT = 640, 480
FRAME_PER_SECONDS = 27  # 每秒最大帧数

win = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.display.set_caption("first game")

img_base_path = os.getcwd() + '/img/'

# 向右走的图片数组
walkRight = [pygame.image.load(img_base_path + 'actor/R1.png'),
             pygame.image.load(img_base_path + 'actor/R2.png'),
             pygame.image.load(img_base_path + 'actor/R3.png'),
             pygame.image.load(img_base_path + 'actor/R4.png'),
             pygame.image.load(img_base_path + 'actor/R5.png'),
             pygame.image.load(img_base_path + 'actor/R6.png'),
             pygame.image.load(img_base_path + 'actor/R7.png'),
             pygame.image.load(img_base_path + 'actor/R8.png'),
             pygame.image.load(img_base_path + 'actor/R9.png')]

# 向左走的图片数组
walkLeft = [pygame.image.load(img_base_path + 'actor/L1.png'),
            pygame.image.load(img_base_path + 'actor/L2.png'),
            pygame.image.load(img_base_path + 'actor/L3.png'),
            pygame.image.load(img_base_path + 'actor/L4.png'),
            pygame.image.load(img_base_path + 'actor/L5.png'),
            pygame.image.load(img_base_path + 'actor/L6.png'),
            pygame.image.load(img_base_path + 'actor/L7.png'),
            pygame.image.load(img_base_path + 'actor/L8.png'),
            pygame.image.load(img_base_path + 'actor/L9.png')]

# 背景
bg = pygame.image.load(img_base_path + 'bg.jpg')

# 站立时的图片
char = pygame.image.load(img_base_path + 'standing.png')

x, y = 50, 350  # 起点
width, height = 64, 64  # 宽,高
speed = 5  # 速度

run = True
isJump, left, right = False, False, False
t = 10

walkCount = 0

clock = pygame.time.Clock()


def redrawGameWindow():
    global walkCount
    win.blit(bg, (0, 0))

    if walkCount >= FRAME_PER_SECONDS:
        walkCount = 0

    if left:
        # 切换向左走的图片
        win.blit(walkLeft[walkCount % 9], (x, y))
        walkCount += 1
    elif right:
        # 切换向右走的图片
        win.blit(walkRight[walkCount % 9], (x, y))
        walkCount += 1
    else:
        win.blit(char, (x, y))

    pygame.display.update()


while run:
    clock.tick(FRAME_PER_SECONDS)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT] and x > 0:
        x -= speed
        left = True
        right = False
    elif keys[pygame.K_RIGHT] and x < win.get_size()[0] - width:
        x += speed
        left = False
        right = True
    else:
        left = False
        right = False
        walkCount = 0

    if not isJump:
        if keys[pygame.K_SPACE]:
            isJump = True
            right = False
            left = False
            walkCount = 0
    else:
        if t >= -10:
            a = 1
            if t < 0:
                a = -1
            y -= 0.5 * a * (t ** 2)

            t -= 1
        else:
            isJump = False
            t = 10

    redrawGameWindow()

pygame.quit()

怎么样,现在看上去,有点象那么回事儿了吧~_^

参考:

https://www.youtube.com/watch?v=UdsNBIzsmlI

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-12-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档