《游戏编程模式》一7.6 进入状态和退出状态的行为
2023-09-11 14:17:37 时间
本节书摘来异步社区《游戏编程模式》一书中的第7章,第7.6节,作者: 【美】Robert Nystrom (尼斯卓姆) 译者: 赵卫兵 , 许新星 , 姜召阳 , 陈侃 , 屈光辉 , 郑炯彬 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。
7.6 进入状态和退出状态的行为状态模式的目标就是将每个状态相关的所有的数据和行为封装到相关类里面。万里长征,我们仅仅迈出去了一步,我们还有更多路要走。
当主角更改状态的时候,我们也会切换它的贴图。现在,这段代码包含在它要切换的状态的上一个状态里面。当她从躲避状态切换到站立状态时,躲避状态将会修改它的图像:
HeroineState* DuckingState::handleInput( Heroine heroine, Input input) if (input == RELEASE_DOWN) heroine.setGraphics(IMAGE_STAND); return new StandingState(); // Other code...
我们希望的是,每一个状态控制自己的图像。我们可以通过给每一个状态添加一个entey行为。
class StandingState : public HeroineState public: virtual void enter(Heroine heroine) heroine.setGraphics(IMAGE_STAND); // Other code...
回到Heroine类,我们修改代码来处理状态切换的情况:
void Heroine::handleInput(Input input) HeroineState* state = state_- handleInput( *this, input); if (state != NULL) delete state_; state_ = state; // Call the enter action on the new state. state_- enter(*this);
这样也可以让我们简化躲避状态的代码:
HeroineState* DuckingState::handleInput( Heroine heroine, Input input) if (input == RELEASE_DOWN) return new StandingState(); // Other code...
它所做的就是切换到站立状态,然后站立状态会自己设置图像。现在,我们的状态已经封装好了。entry动作的一个最大的好处就是它不用关心上一个状态是什么,它只需要根据自己的状态来处理图像和行为就可以了。
大部分的真实状态图里面,我们有多个状态对应同一个状态。比如,我们的女主角会在她俯冲或者跳跃之后站立在地面上。这意味着,我们可能会在每一个状态发生变化的时候重复写很多代码。但是,entry动作帮我们很好地解决了这个问题。
当然,我们也可以扩展这个功能来支持退出状态的行为。我们可以定义一个exit函数来定义一些在状态改变前的处理。
程序员思维模式-主调试循环 仅通过测试进行验证基本上是在仪器上驾驶飞机,而不是能够向外看挡风玻璃。视觉飞行和肌肉记忆飞行与仪器相结合,既高效又安全。你不太可能误撞山。 当你已经编码了十多年时,可能很难重新捕捉初学者的思想,并向新手解释如何像程序员一样思考。我记得在大学里,当我编码的时间相对较短时,有一件事在我的脑海中结晶了编写代码背后的思维过程——你可以称之为程序员哲学。我正在帮助一个朋友完成计算机
程序员思维模式 - 主调试循环 仅通过测试进行验证基本上是在仪器上驾驶飞机,而不是能够向外看挡风玻璃。视觉飞行和肌肉记忆飞行与仪器相结合,既高效又安全。你不太可能误撞山。 当你已经编码了十多年时,可能很难重新捕捉[初学者的思想](https://en.wikipedia.org/wiki/Shoshin),并向新手解释如何像程序员一样思考。我记得在大学里,当我编码的时间相对较短时,有一件事在我的脑海中结晶了编写代码背后的思维过程 你可以称之为程序员哲学。我正在帮助一个朋友完成计算机科学101任务。他们对编码完全陌生。 他们从头到尾在纸上写了一个完整的解决方案 也许是100行代码。然后,他们将其全部输入到文本编辑器
【Unity3D 灵巧小知识点】 ☀️ | Unity中 使用代码 激活/取消激活 某个游戏对象的方法 Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、r美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- (NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)
- 【ANDROID游戏开发十五】关于ANDROID 游戏开发中 ONTOUCHEVENT() 触屏事件的性能优化笔记!
- 【IOS-COCOS2D游戏开发之六】对触屏事件追加讲解,解决无法触发CCTOUCHMOVED事件[重要!]
- 【IOS-COCOS2D游戏开发之八】开启高清(960*640)模式问题与解答、图片适配以及设置IPHONE横竖屏
- 【IOS-COCOS2D-X 游戏开发之七】整合COCOS2DX的ANDROID项目到XCODE项目中,XCODE编写&编译代码,ANDROID导入打包运行即可!
- 【UNREAL ENGINE 游戏开发】开篇之为什么现在就要抱紧UE的大腿!(另附学习资料/交流群)
- 【hihocoder 1474】拆字游戏
- 华为OD机试 - 数字加减游戏(Java & JS & Python)
- ZZNUOJ_用C语言编写程序实现1519:去师院的旅程:规律游戏(附完整源码)
- python游戏创新大赛
- Photon + Unity3D 线上游戏开发 学习笔记(一)
- Leetcode 1535. 找出数组游戏的赢家(尽力了)
- 游戏制作之路(6)创建角色行走的地面
- Python: 渐进猜数字游戏 <7> 数字比较 与 猜数字游戏V0.1版