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

素材准备:(原自github)

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

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

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

源码下载: https://github.com/yjmyzz/pygame_tutorial

pygame 笔记-3 角色动画及背景的使用的更多相关文章

  1. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...

  2. iOS学习笔记-自定义过渡动画

    代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...

  3. 《C++游戏开发》笔记十一 平滑动画:不再颤抖的小雪花

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9430645 作者:七十一雾央 新浪微博:http:/ ...

  4. Js_动画显示背景图片

    jAni是一个可以动画显示背景图片的jQuery插件.这个插件基本上是GIF动画的一个替代品,但是他有他的好处.所有浏览器都支持GIF形式的动画格式,而且也不需要额外的javaScript代码和标记. ...

  5. 《深入浅出WPF》笔记——绘画与动画

    <深入浅出WPF>笔记——绘画与动画   本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend:这方面也不是我的优势,幸好我有博客园,能记录一 ...

  6. 【Salvation】——怪物角色动画&主角碰撞死亡动画

    写在前面:这个动画功能同样也是使用JavaScript编写脚本,在Unity3D游戏引擎的环境中实现,在怪物的角色动画中,很多与人物相同,这里不再重复. 一.设计敌人 拖一个精英sprite到层次面板 ...

  7. Unity3D笔记 模型和角色动画的输出设置

  8. pygame 笔记-10 摩擦力与屏幕环绕

    多年前写过一篇 Flash/Flex学习笔记(25):摩擦力与屏幕环绕,可惜的当时上传的flash,服务器后来无人维护,现在flash链接都失效了.本篇用pygame重新实现了一个: 原理是类似,但要 ...

  9. pygame 笔记-7 生命值/血条处理

    通常游戏中的角色都有所谓的生命值,而且头顶上会有一个血条显示.生命值无非就是一个属性而已,很容易在Player.py类中增加,头顶上的血条其实就是绘制二个矩形,叠加在一起. 以上节的Player.py ...

随机推荐

  1. Derive representation formula from Green’s identity

    This article introduces how to derive the representation formula used in BEM from Green's identity. ...

  2. 强大的xargs

    xargs 命令是最重要的 Linux 命令行技巧之一.你可以使用这个命令将命令的输出作为参数传递给另一个命令.例如,搜索 png 文件然后对其进行压缩或者其它操作: find. -name *.pn ...

  3. CentOS7.5安装nodejs 转

    CentOS7.5安装nodejs CentOS安装NodeJS 在CentOS下安装NodeJS有以下几种方法.使用的CentOS版本为7.2.CentOS其他版本的NodeJS安装大同小异,也可以 ...

  4. Javascript转义字符串中的特殊字符处理

    Web应用系统中,客户端发送请求到服务器,请求中的字符串参数,在被序列化成json过程中有些特殊字符会被空格代, 导致传递到服务器端再解析的时候,原本的输入参数就会被改变. 目前遇到的特殊字符有加号( ...

  5. @+id/和android:id有什么区别?

    Any View object may have an integer ID associated with it, to uniquely identify the View within the ...

  6. Flink--输入数据集Data Sources

    flink在批处理中常见的source flink在批处理中常见的source主要有两大类. 1.基于本地集合的source(Collection-based-source) 2.基于文件的sourc ...

  7. Codeforces 1140F Extending Set of Points 线段树 + 按秩合并并查集 (看题解)

    Extending Set of Points 我们能发现, 如果把x轴y轴看成点, 那么答案就是在各个连通块里面的x轴的个数乘以y轴的个数之和. 然后就变成了一个并查集的问题, 但是这个题目里面有撤 ...

  8. Codeforces 1000G Two-Paths 树形动态规划 LCA

    原文链接https://www.cnblogs.com/zhouzhendong/p/9246484.html 题目传送门 - Codeforces 1000G Two-Paths 题意 给定一棵有 ...

  9. java的IO流的一些测试

    public class Demo02 { public static void main(String[] args) { //获取当前毫秒值,用于测试 long l = System.curren ...

  10. win10系统桌面快捷键图标异常解决方法

    win10系统桌面快捷键图标异常解决方法 前言: 有一次我的一个图标变成白色,找到:https://jingyan.baidu.com/article/948f5924148e67d80ef5f947 ...