Can I interrupt javascript code and then continue on a keystroke?

Posted by Brian Ramsay on Stack Overflow See other posts from Stack Overflow or by Brian Ramsay
Published on 2010-06-12T16:18:05Z Indexed on 2010/06/12 16:22 UTC
Read the original article Hit count: 311

Filed under:
|

I am porting an old game from C to Javascript. I have run into an issue with display code where I would like to have the main game code call display methods without having to worry about how those status messages are displayed.

In the original code, if the message is too long, the program just waits for the player to toggle through the messages with the spacebar and then continues. This doesn't work in javascript, because while I wait for an event, all of the other program code continues. I had thought to use a callback so that further code can execute when the player hits the designated key, but I can't see how that will be viable with a lot of calls to display.update(msg) scattered throughout the code.

Can I architect things differently so the event-based, asynchronous model works, or is there some other solution that would allow me to implement a more traditional event loop?

Am I making sense?

Example:

// 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
    }
}

© Stack Overflow or respective owner

Related posts about JavaScript

Related posts about events