python游戏
圣手书生肖让
这个作者很懒,什么都没留下…
展开
-
日食的形成,python3D编程:材质
前面的课程中,太阳只是以光源的身份出现,现在我们希望太阳走上前台,让我们能够看到。不过,这就有了一个问题:月亮是靠反射光源的光才让我们看到,但太阳不是这样,它本身就发光。为了进行这种设置,我们引入3D开发中的下一个概念:材质。材质材质也是模型表面的一种特性,它和纹理不同,纹理只是图片,材质则定义的是质感,比如反光率、发光情况,等等。材质+纹理+光源,三者共同决定了三维模型看起来的样子。材质包括五种属性:环境光漫反射率(Ambient)方向光(环境光之外的其它三种光)漫反射率(Diffuse)原创 2020-12-05 11:09:15 · 426 阅读 · 1 评论 -
月有阴晴圆缺,python3D编程初阶(2):运动与光辉
继续前文,讲述python3D编程中的运动控制。正好借此来研究一下月相的变化。月相变化的本质上是因为月亮绕地球的转动,导致地球(观察者)、月亮、太阳三者之间位置关系的变化。我们可以把这一运动进行简化为地球和月亮不动,太阳光的方向360度旋转变化。平行光的方向前文讲述了panda3D中的4种光源,其中平行光的特点是没有位置,只有方向。或者更准确地说,是光源的位置被忽略,真正起作用的是方向。这样,我们可以假设太阳是绕着原点运动,而光的方向始终由太阳指向原点。这也是符合真正的天文状态的。self.li原创 2020-12-04 11:55:47 · 487 阅读 · 0 评论 -
明月当空照,python3D编程初阶:坐标、模型、纹理与光
Panda3D是由迪士尼参与维护的一个3d游戏引擎,本意是面向商业用户的,所以它的性能是很不错的,使用也很方便。Panda3D支持通过c++或python的开发。安装Panda3D的最好办法就是直接去官方网站(panda3d.org)下载对应的安装包。3D开发并不难,只是有一些基本概念必须掌握,我们将一边学习3D开发,一般复习天文知识。今天先介绍这几个概念:坐标、模型、纹理与光。坐标二维系统中也有坐标,2根轴;3D下当然就是三维坐标,3根轴。panda3D中的坐标原则是屏幕的水平方向是X轴,垂直方原创 2020-12-03 13:06:15 · 1045 阅读 · 1 评论 -
python游戏引擎ppb介绍(7)补充与总结
其实作为一个2D游戏引擎,可以不必使用相机概念,但ppb引入的相机确实把一些相关功能整合在了一个直观的概念下,有一定的价值。目前游戏的操作都是基于鼠标,但是键盘事件也是互动操作中必不可少的一环,让我们看看键盘事件是怎样处理的。补充这两个内容容,对ppb的基本结构3个核心概念做一个总结。相机(camera)相机有三个直接的用处屏幕的放大和缩小 屏幕的移动 精灵可见性的检测放大与缩小只需设置一个参数(scene.main_camera.width)即可调整屏幕的比例:e原创 2020-11-09 10:14:07 · 338 阅读 · 0 评论 -
python游戏引擎ppb介绍(6)声音、文字与自定义事件
ppb播放声音的机制很简明,但相对而言显示文字的操作略显繁琐,可能这个引擎的设计者的本意关注的是更形象化的视觉效果。虽说一图胜千言,但总也有时候,文字是必不可少的。修改文字,我们使用自定义事件机制。这也是ppb引擎中一个比较有特色的实现。声音的播放我们希望在两个地方加入声音效果,一是导弹发射的瞬间,我们加入“嗖”的音效;另一个是靶子爆炸的瞬间,我们加入爆炸音效。音效文件本身无法在网页中提供,请朋友去爱给音效自行下载,或者留言向一声索取。发射导弹的代码是Blob类中的鼠标事件(on_but原创 2020-11-08 08:28:22 · 219 阅读 · 0 评论 -
python游戏引擎ppb介绍(5)爆炸:精灵的碰撞与删除
导弹击中靶子,这里涉及到精灵的碰撞检测;之后,靶子和这枚导弹都应当消失,这是精灵的删除。另外,我们希望看到一个靶子爆炸的效果。爆炸效果是另外一个动画精灵,它在自己的动画完成后自动删除。碰撞逻辑与之后的动作碰撞检测的逻辑放在靶子中:从场景中找到所有导弹对象 判断导弹对象与自己的距离(图片中点距离) 如果距离小于自己尺寸的1/2,则说明碰撞了检测到碰撞后做三件事:删除自己 删除导弹 在自己原来的位置上放一个爆炸精灵class Target(ppb.Sprite): ...原创 2020-11-07 08:35:06 · 498 阅读 · 0 评论 -
python游戏引擎ppb介绍(4)开炮:精灵的创建与移动
发射导弹,其实就是创建一个不断移动的新的精灵。本节课讲精灵的创建和它的自动平移,介绍层的概念,并开始使用资源路径。发射子弹Projectile是导弹的意思。我们建立第三个精灵类:Projectile。Projectile.png它的图片看起来是比较抽象的。与前两个精灵相同,我们只需建立一个同名的类就可以默认关联这个图片,但这次我们想显式地指定图片。这是因为我们不希望所有的图片都和源代码放在一起。我们在代码目录中建立一个子目录resources,并且把所有的图片都移动到这个目录原创 2020-11-06 08:06:57 · 306 阅读 · 0 评论 -
python游戏引擎ppb介绍(3)精灵属性与鼠标事件
精灵除了可以通过多帧形成一种动画效果之外,还必须可以在屏幕上运动,两种典型的运动方式是转动和平移,通过控制精灵的属性就可以实现。精灵的运动应该能够由用户来互动操作,这一机制是通过响应事件来实现的。精灵的属性上节课提到,每个精灵载入时默认的大小是1个单位,这个单位默认是窗口宽度的1/25,如果我们想某个精灵大一些,我们可以通过设置它的size属性来实现。比如我们把下面的软体动物大小设置为3,上面的靶子大小设置为2。class Blob(ppb.Sprite): image =...原创 2020-11-05 09:52:54 · 276 阅读 · 0 评论 -
python游戏引擎ppb介绍(2)精灵、场景与坐标
精灵(sprite)就是在屏幕上显示的一切事物,场景(scene)可以简单理解为屏幕,屏幕上的具体位置通过坐标来表示。静态精灵ppb中的精灵定义很有特色,非常简单。它可以直接对应一个外部的png文件。如果我们有这样一个图片,名字叫Target.png:我们只需定义一个同名的类,无须任何实际的代码,即可成为一个静态精灵:class Target(ppb.Sprite): pass注意精灵的默认大小是1,这个1,不是一个像素,而是一个坐标单位,详见下面场景与坐标...原创 2020-11-04 10:30:44 · 633 阅读 · 1 评论 -
python游戏引擎ppb介绍(1)安装与启动
用Python进行游戏开发,有很多可选引擎,我们首先介绍一个最简单的:PPB。ppb是一个相当小众的python游戏引擎,它的全名是PursuedPyBear,翻译成中文,含义大概可以理解为“被熊追”。从它的官方文档看,目前所有开发者都是女性,这也是一个有趣的地方。这个引擎的使用非常简单,当然功能也有限,用来做一些小规模的互动效果是可以的。ppb的基本概念不复杂,了解了它的概念体系,对于我们学习认识功能更强的引擎也是有帮助的。本系列教材预计分为6讲,将以开发这个下面这个简单的射击游戏为案例,原创 2020-11-03 13:39:36 · 1077 阅读 · 0 评论