用Pygame和Python做游戏-从入门到精通(8)
用Python和Pygame写游戏-从入门到精通(8)
是时候让我们的游戏活泼起来了。电脑游戏和桌面游戏的一个巨大差别,想来就是这个“动”。伟大的哲学家们告诉我们,“运动是绝对的,静止时相对的”,同样的在游戏中,只有活动起来,游戏才会拥有生命,否则和看连环画有什么差别呢?
这几章讲述的东西需要一些线性代数的知识,好吧有些夸张,如果你不明白,完全没关系,高中物理的知识就绝对足够了(或者说嫌多了)!
现实生活中的物体,运动起来总是按照某种规律的(去问问牛顿就知道了),而游戏中,有些动作就可以非常的不靠谱,比如吃豆人,大嘴巴永远以恒定的速度前进,可以瞬间转身或停止,要知道,这可是逆天的行为……现在的游戏中,制作者总是尽量的把运动做的和现实贴近(尤其是赛车游戏等),一辆车的运动,可能是上百种力同时作用的结果。不过幸好,我们只要知道一些基础的东西,很多运动和力的计算,都有现成的代码供我们使用。
理解帧率
这是一个被说烂了的词,FPS(Frame Per Second)是游戏和硬件间较量的永恒话题,我也不想多插话了,相信玩游戏的朋友都知道。
只是记住几个常用的量:一般的电视画面是24FPS;30FPS基本可以给玩家提供流程的体验了;LCD的话,60FPS是常用的刷新率,所以你的游戏的帧率再高也就没什么意义了;而绝大多数地球人都无法分辨70FPS以上的画面了!
直线运动
我们先来看一下初中一开始就学习的直线运动,我们让一开始的程序中出现的那条鱼自己动起来~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
background_image_filename = 'sushiplate.jpg' sprite_image_filename = 'fugu.png' import pygame from pygame.locals import * from sys import exit pygame.init() screen = pygame.display.set_mode((640, 480), 0, 32) background = pygame.image.load(background_image_filename).convert() sprite = pygame.image.load(sprite_image_filename) # sprite的起始x坐标 x = 0. while True: for event in pygame.event.get(): if event.type == QUIT: exit() screen.blit(background, (0,0)) screen.blit(sprite, (x, 100)) x+= 10. #如果你的机器性能太好以至于看不清,可以把这个数字改小一些 # 如果移动出屏幕了,就搬到开始位置继续 if x > 640.: x = 0. pygame.display.update() |