It's a very minor issue but may be important for some carts. In the web version of PICO-8 using menuitems in the pause menu causes _update
and _draw
to be called.
Version: 0.2.4c4 web applet
How to replicate
Make a cart that has an _update
function defined that will cause a visible change on screen. Define a menuitem with a callback that returns true
so that the menu stays open after the menu item is used. Run the cart, pause it and use the menuitem.
Expected behavior
The callback runs and the state of the program is only changed in the way the callback changed it. (This is waht happens in the full desktop app version 0.2.4)
Actual behavior
A frame progresses before the callback is resolved. The calling order seems to be: _update
, _draw
, callback.
Examples:
Simple example:
Example in a real cart:
This also shows how the frame updates before the callback: changing the SNAKE setting doesn't affect the incorrect frame update and only takes effect the next frame.
I don't see any reason for such reaction. This is clearly undesired behavior! The user has paused the cart and takes their time to change the settings. That is the worst time to call _update
! If the callback is supposed to update the program state it can just do so in its body, and if it needs to update the screen it can just call flip
! And if the callback is literally supposed to just call _update
and _draw
it can easily do so with code, in a manner controlled by the programmer. Calling the frame callbacks BEFORE the menuitem callback is the worst way to achieve this behavior and I can't see a clean way to circumvent it.
Wow, that was a rant!
[Please log in to post a comment]