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