我正在嘗試在ActionScript 3中編寫一個roguelike遊戲。在這種遊戲類型中,角色和項目以複雜和不可預知的方式進行交互,例如遊戲中發生的長鏈可能發生在單圈的空間中,每一圈都是從最後一圈開始發生,而且經常發生在前一圈之前已經正確完成。當我發現在這樣混亂的情況下,我需要立即提示玩家輸入並立即採取行動,在其他事情繼續發生之前,似乎會出現一個問題。ActionScript 3:在複雜的操作鏈中等待用戶輸入
如果用戶界面運行在一個單獨的線程上,使得玩家可以輸入輸入,並且我可以在不必從當前正在執行的整個函數堆中返回的情況下接收它,那麼理智的方法就是直接調用無論嵌套的功能調用,我碰巧在裏面)一個函數,等待玩家輸入,然後作用於它。但在AS3中,這是不可能的;在返回之前等待輸入的函數只會導致程序掛起。
爲了迴應這種問題,人們說正確的解決方案是將我的操作分解成幾塊,以便我可以等待用戶輸入,然後恢復我正在做的事情。這很可愛,適合於那些通常提供這些建議的微不足道的例子,但在這種情況下,不可預知的和經常隨機發生的事件可能導致一次連鎖數十個複雜的事件,其中任何一個都可能突然需要用戶在任何時候都可以輸入,「恢復我在做的事情」的想法似乎是一項艱鉅的任務。
我沒有別的選擇,只能將遊戲中發生的所有事情都作爲一個數據結構來存儲,這個數據結構描述了事件的所有細節,包括它到目前爲止的進展情況,以便我可以突然退出我正在做什麼等待玩家的輸入,然後重新構建事物的前一個狀態,無論它可能有多精細?與簡單地從任何地方調用「get_input」函數然後繼續我的快樂方式相比,這項任務的繁瑣程度似乎足以阻止我或任何人使用AS3。我錯過了什麼?有沒有辦法解決這個問題,這不會讓我瘋狂,或者我應該把這個看作AS3是這個工作的錯誤工具?
我沒有一個很好的直接回答的方法來做到這一個同步呼叫,但你可能會從AS3相當新的東西中受益的是工人,這實質上是我見過的最多在單獨的Thread上做事情的條款,儘管我從閱讀了解實現後知道它不像Java線程那樣靈活,但爲了簡化操作,有一些更嚴格的限制。 – shaunhusain
我可以看到的另一個選擇是讓遊戲邏輯基於計時器執行,並簡單地停止該計時器並適當地重新啓動計時器,但這可能會導致這些進程的整個問題出現問題,因此它們只會暫停一半根據計時器是否正在運行,允許完全執行一些功能或不調用它。 – shaunhusain