GameDesign 板


LINE

为了验证上面讲的那堆有限机到底能不能达到我要的效果,我随即开始写 简单的前置程式来测试。 我希望宣告一个物件,这个物件要内含上述的几种State。 而每个State有两个函式: Init() & runState()。 每当SEEKER从状态A进入状态B, 我就让状态A初始化。如此可以确保一些参数 回覆到一开始的状态。 既然每个State有一个必备的Init(),我们可以宣告一个State的原形 再让各个State继承之。 这样做最大的好处在於,我们可以用一个原形阵列去存取所有的State。 假如我想初始化SLEEP state, 我可以写 sleep.init(); 想初始化FIRE state, 写 fire.init(); 但是现在有一个问题在於PLAYER可以随时随地让SEEKER进入"GOT"状态 这意味着无论何时都有可能要初使化"某个"状态 如果缺少了继承的机制, 那麽写出来的code可能会变成这样: switch (oldState){ case SLEEP: sleep.init(); break; case FIRE: fire.init(); break; . . . } 明明可以很间单的事情却因为对程式不够了解的关系变成这样, 这实在是很不漂亮的一件事情 继承之後,我们只要宣告一个原形阵列,再把每个STATE的ptr塞进来就好 像这样: class proto{ virtual void init(); virtual void runState(); }; class sleep: public proto{ void init(); void runState(); }; class fire: public proto{ void init(); void runState(); }; ////////////// proto *store[2]; store[0] = new fire(); store[1] = new sleep(); /////////////////////////////////////////////////////// 这个问题,等到了之後要实作武器库的时候会再次碰到。 没有继承概念的程式码,如何去应对总计17种不同的武器的选取? 实在难以想像。 总而言之,言而总之,最後关於Seeker的状态机,写出来的结果变成这样: seeker.loop(){ seeker.allState[this.state].runstate(); } 简化过的程式码变成这样。这个seeker.loop() 就是放在主程式的部分, 每秒执行30次的那个,每一次执行,确认目前的状态,然後执行此状态的运算 其中如果有符合更改状态的条件(如上篇文章的图表所示),则透过更改this.state 来达成跳离STATE & 初始化的动作。 至於每个State的runState function,这边就略过了。 大体就是把上篇文章的条件机制加以程式化而已。 毕竟讲解Code是件无聊的事情。我还是主要讲想法以及实作方式就好。 (续) 文章转自暨大霞蔚山城 ★ HenryBBS (henry.twbbs.org) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.22.18.97







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP