pygame 笔记-6 碰撞检测】的更多相关文章

这一节学习碰撞检测,先看原理图: 2个矩形如果发生碰撞(即:图形有重叠区域),按上图的判断条件就能检测出来,如果是圆形,则稍微变通一下,用半径检测.如果是其它不规则图形,大多数游戏中,并不要求精确检测,可以在外层套一个矩形,大致用上图的原理检测. 可以封装一个函数: def collision_check(a, b): temp1 = (b.x <= a.x + a.width <= b.x + b.width) temp2 = (b.y <= a.y + a.height <=…
多年前写过一篇 Flash/Flex学习笔记(25):摩擦力与屏幕环绕,可惜的当时上传的flash,服务器后来无人维护,现在flash链接都失效了.本篇用pygame重新实现了一个: 原理是类似,但要注意的是:pygame中旋转的角度采用逆时针系统 ,即:逆时针方向旋转,角度为正,反之为负.所以在外理角度时,y轴方向的速度要取反. 素材图(2张): 飞船熄火 飞船点火 需求:按向上键点火,飞船启动,一直加速:无按键时,飞船熄火,速度慢慢降下来(设置摩擦系数):左右键控制转向:飞出屏幕时,从另一侧…
h5或flash中,可以直接对矢量对象,比如line, rectange旋转,但是pygame中,仅支持对image旋转,本以为这个是很简单的事情,但是发现还是有很多小猫腻的,记录一下: 先看一个错误的版本: import pygame import sys pygame.init() SIZE = WIDTH, HEIGHT = 200, 400 BLACK = 0, 0, 0 angle = 1 screen = pygame.display.set_mode(SIZE) leaf = py…
通常游戏中的角色都有所谓的生命值,而且头顶上会有一个血条显示.生命值无非就是一个属性而已,很容易在Player.py类中增加,头顶上的血条其实就是绘制二个矩形,叠加在一起. 以上节的Player.py为例: import pygame # 主角 class Player(object): def __init__(self, x, y, width, height, img_base_path): self.x = x self.y = y self.width = width self.hei…
上一节,已经用OOP方法,把几个类抽象出来了,但是都集中在一个.py文件中,代码显得很冗长,这一节复用模块化的思想,把这个大文件拆分成几个小文件: 先把主角Player单独放到一个文件player.py里: import pygame # 主角 class Player(object): def __init__(self, x, y, width, height, img_base_path): self.x = x self.y = y self.width = width self.hei…
游戏哪能没有音效?这节我们研究下如何加背景音乐,其实也很简单: # 加载背景音乐 pygame.mixer.music.load(music_base_path + "music.mp3") # 设置音量 pygame.mixer.music.set_volume(0.1) # 循环播放 pygame.mixer.music.play(-1, 0) play的第1个参数,设置成-1表示循环播放. 另一个问题,发射子弹和子弹击中,也需要声音,这个必须用另一种方法,否则的话,会把背景音乐给…
继续之前的内容,随着游戏的内容越来越复杂,有必要把代码优化一下,可以参考OOP的做法,把人物类抽象出来,弄成一个单独的类,这们便于代码维护,同时我们给小人儿,加个发射子弹的功能,代码如下:(看上去略长,但是绝大多数,都是上节的代码) import pygame import os pygame.init() WIN_WIDTH, WIN_HEIGHT = 500, 500 win = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT)) # 画布窗口的…
上二节,已经知道如何控制基本的运动了,但是只有一个很单调的方块,不太美观,本节学习如何加载背景图,以及角色的动画. 素材准备:(原自github) 角色动画的原理:动画都是一帧帧渲染的,比如向左走的动画,实际是类似上图中的L1.png~L9png 连续切换,由于肉眼视觉暂留的作用,所以看上去象连续的动画. 好了,直接上代码:(关键地方已经加了注释) import pygame import os pygame.init() WIN_WIDTH, WIN_HEIGHT = 640, 480 FRA…
在上一节的基础上,结合高中物理中的匀加速直线运动位移公式 ,就能做出类似超级玛丽的弹跳效果. import pygame pygame.init() win = pygame.display.set_mode((200, 400)) # 画布窗口的大小 pygame.display.set_caption("first game") # 窗口标题 x, y = 85, 300 # 方块的起点 width, height = 30, 30 # 方块的宽,高 speed = 5 # 速度…
背景:家里的娃慢慢长大了,准备教一些儿童入门的编程知识,研究了一阵麻省理工的scratch 2 虽然不错,但是功能有限,很多高级点的东西玩不出来.所以就有了这一系列,先提前自学一下,顺便拿来练手python ~_^ pygame虽然不是做大型游戏的最好选择,但是入门却是不错,python也易于学习,官网的文档也算齐全. 先来一个最基本的代码: import pygame pygame.init() win = pygame.display.set_mode((320, 240)) # 画布窗口的…