Я портирую старую игру с C на 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
}
}