(译)LearnOpenGL实际案例Breakout(五):小球
来源:互联网 发布:我只是数据全文下载 编辑:程序博客网 时间:2024/06/06 06:55
英文原文
现在我们有一个砖块的关卡和一个可移动的玩家挡板。和经典Breakout唯一缺失的是小球。目标是让小球碰撞所有的砖块直到每一个可破坏的砖块被破坏,但是这有一个条件是小球不能触碰屏幕的底部边缘。
撇开一般的游戏组件对象,一个小球有一个半径和一个标识出小球是卡在挡板上还是可以自由移动的额外的bool值。当游戏开始,小球最初被卡在玩家挡板上直到玩家按下任意键开始游戏。
因为小球是有一些额外特性的游戏基础物体,让场景常见一个BallObject类作为GameObject的子集:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
BallObject的构造函数初始化它子集的值,也初始化它底层的GameObject。这个BallObject类有一个Move方法来让小球基于它的速度来移动以及检查它是否到达场景的任意一条边以及是否反弹小球的速度:
- 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
- 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
除了反弹小球的速度之外我们还想要沿着边移动小球。小球仅仅在它没有被卡住的时候移动。
你能在这找到小球对象的代码:
BallObject: header, code
首先让我们添加小球到游戏中。和玩家挡板相似,我们创建一个BallObject并且定义两个我们用来初始化小球的常量。作为小球的贴图,我们将会在LearnOpenGL Breakout游戏中使用一个来让场景变得完美:小球贴图。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
我们必须在每一帧通过在game代码的Update方法中调用它的Move方法更新小球的位置:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
更多的,因为小球被初始化为固定在挡板上,我们必须让玩家能够从它的固定位置移除。我们选中空格键来从挡板释放小球。这意味着我们必须改变ProcessInput方法:
- 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
- 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
在这里,如果用户按下空格条,小球的附着参数变为false。当小球被固定住的时候我们仍然沿着挡板的位置更新ProcessInput方法来移动小球的位置。
最后,很显然我们需要渲染小球:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
最终小球跟着挡板并且当我们按下空格条的时候自由漫步。小球仍然恰当的在左,右和顶部边缘反弹,但是它还没有碰撞任何一个砖块。
原文此处有个视频,但是我不会再CSDN博客插入mp4视频,有会的请告诉一声,谢谢。
转载请注明出处:http://blog.csdn.net/ylbs110/article/details/52722652
我们想要创建一个或多个方法来检查小球对象是否碰撞到关卡中的任何一个砖块,并且销毁这个砖块。这在下一节教程中称为碰撞检测方法。
- (译)LearnOpenGL实际案例Breakout(五):小球
- (译)LearnOpenGL实际案例Breakout(五):小球
- (译)LearnOpenGL实际案例Breakout(四):关卡
- (译)LearnOpenGL实际案例Breakout(六):碰撞检测
- (译)LearnOpenGL实际案例Breakout(七):碰撞反馈
- (译)LearnOpenGL实际案例Breakout(八):粒子
- (译)LearnOpenGL实际案例Breakout(九):后期处理
- (译)LearnOpenGL实际案例Breakout(十):能量块
- (译)LearnOpenGL实际案例Breakout(十一):音频
- (译)LearnOpenGL实际案例Breakout(四):关卡
- Chapter 3(3):The Breakout Game
- Box2D Breakout游戏(cocos2d-x2.1)
- LearnOpenGL 阶段性总结 (截至入门-摄影机)
- (译)如何使用cocos2d和box2d来制作一个Breakout游戏:第二部分(完)
- (译)如何使用cocos2d和box2d来制作一个Breakout游戏:第一部分
- (译)如何使用cocos2d和box2d来制作一个Breakout游戏:第一部分
- oracle 左外连接、右外连接(实际案例)
- Backtrader量化平台教程(四)SSA策略实际案例
- [git]merge和rebase的区别
- 浅谈对象oop的属性和方法以及区别
- 设计模式之策略模式
- [debug]调试Release版本应用程序
- C#针对ArcSDE的操作2(矢量数据、栅格数据导入到数据集)
- (译)LearnOpenGL实际案例Breakout(五):小球
- 考试篇(5.2) NSE4 题库 05. SSL VPN ❀ 飞塔 (Fortinet) 网络安全专家
- CentOS 7忘记root密码解决办法
- STM32F40x 内部温度获取
- linux之僵尸进程、孤儿进程
- ssh配置多台机器免密登录
- ABAP 金额大写转换
- pycharm及idea系列序列号
- SORT 排序算法记录