我正在將一箇舊的遊戲從C移植到Javascript。我遇到了顯示代碼的問題,我希望主要的遊戲代碼調用顯示方法,而不必擔心如何顯示這些狀態消息。我可以中斷JavaScript代碼,然後繼續按鍵嗎?
在原始代碼中,如果消息太長,程序會等待播放器用空格鍵切換消息,然後繼續。這在javascript中不起作用,因爲在我等待事件時,所有其他程序代碼都會繼續。我曾想過使用回調函數,以便在玩家擊中指定密鑰時可以執行更多代碼,但是我無法看到如何在整個代碼中散佈大量致電display.update(msg)
的代碼。
我可以採用不同的方式構建事物,以便基於事件的異步模型起作用,還是有其他解決方案可以實現更傳統的事件循環?
我有道理嗎?
例子:
// this is what the original code does, but obviously doesn't work in Javascript
display = {
update : function(msg) {
// if msg is too long
// wait for user input
// ok, we've got input, continue
}
};
// this is more javascript-y...
display = {
update : function(msg, when_finished) {
// show part of the message
$(document).addEvent('keydown', function(e) {
// display the rest of the message
when_finished();
});
}
};
// but makes for amazingly nasty game code
do_something(param, function() {
// in case do_something calls display I have to
// provide a callback for everything afterwards
// this happens next, but what if do_the_next_thing needs to call display?
// I have to wait again
do_the_next_thing(param, function() {
// now I have to do this again, ad infinitum
}
}
雖然如果我正確思考,但問題仍然是相同的。我需要在整個地方檢查那個標誌,如果我返回,我會失去我在程序執行過程中的位置。我仍然需要從調用顯示方法的地方繼續執行程序。 – 2010-06-12 16:28:25
如果您在顯示消息後有工作要做,請延遲顯示消息,直到處理循環結束。在循環之前設置標誌並且在下次處理方法觸發時(您正在使用間隔,對嗎?)在其他任何事情之前檢查標誌。 – lincolnk 2010-06-12 18:43:30