Hints and Tips
-
-
@pico8-jihem I tested your debug console right now. Very handy!
Feature request: how about d-pad up/down to browse up/down? D-pad down would basically be the same as the A button.
-
@Nisse5 It's good, but once you get into utilizing actual loops in a function, including nested ones, and you want to have the function return from within those, you'll have to make a break case after each one.
-
I've wrapped up a first version of my template program, which could be used as the start of a game! It displays graphics, gets user input, and plays music plus sound effects. It even "filters" the input with a simple polling implementation, which is nice when you don't want menu cursors going ninety miles per hour. You can see it via my friend code, feel free for anyone to add me:
SW-1537-8645-5886
One caveat about the polling: If I call "setTimer" only when a button is pressed, like should happen, I get a very weird error. So in the template, I'm setting the timer every frame: not quite right, but it doesn't crash.
In my other shared project, the polling code works perfectly, and I copy and pasted it from there. Weird! I'll do a separate post about this in the future if I dig more, and it doesn't look like a bug in my own code.
-
@Discostew The string slice tricks you posted came in handy!
-
On the Programs screen, you can toggle between the example programs and your own programs from the keyboard using CTRL-R and CTRL-L. Handy to avoid having to reach for a controller.
-
I don't think you actually need the CTRL key. Just "r" or "l" on the keyboard works for me.
-
One thing to take into account when working with any language that runs under an interpreter is that every character in code counts towards CPU usage. For instance, a variable name that is 16 characters long is going to take longer to parse in the interpreter prior to processing its contents than a variable name that's only 4 characters long. I do believe that comments are ignored, so they shouldn't interfere with the parsing scheme, thus won't affect CPU usage.Just be sure to comment on what things do if you do decide to shorten variable names. Don't want to forget what something does because the name becomes less readable.I was quick in my assumption that this was the case, but it is not. Variable name length doesn't have an impact on speed.
-
In relation to my post above, be sure to use the keyword
local
when defining variables in functions that also have a global counterpart. I just ran through an interesting collision of this when I threwc = controls(0)
out of the main loop (soc
could be global), and it screwed up my entire MML program during playback. That was because for shortening code in various functions I made, where I'd usec
to define a channel that was to be processed. It was odd though because technically, I was done using controls by the time it came to execute my MML_update() function, and once I was done using thec
variable in my functions, I write-back to the channel structure, so ifc
was rewritten, it shouldn't have affected anything. But it did. -
this local keyword doesn't exist. what you are experiencing there is not by design but a fault in the parser.
-
@MikeDX Huh, well in either case, it did something to prevent it from screwing up, even if unintentional. But if it has been fixed in the update, then I'll need to clean my code to remove it.
-
@Discostew Not sure this is really true. Depends on the interpreter's implementation. If it parses to bytecode before execution, this might be a non-issue; variable names are probably not kept and likely simply become pointers under the hood. If it's a syntax-directed interpreter, you may be right.
-
I usually strip out identifiers at the lexical analysis phase, so they're gone before parsing begins. The token stream produced retains the begin and end indexes into the original source code file for each token, which allows for things like printing error messages that reference the line and column where something blew up, recovering the name of a function, etc.
Anyway there are so many ways to do it that I think we should resolve to measure the performance of FUZE on shared benchmark programs before making any assumptions about its performance characteristics: otherwise we're operating on pure speculation/superstition.
-
@Zero-Division Dunno why I didn't do a simple test until now, but my assumption was wrong in thinking that shorter variable names produced faster results. I must have done some small but significant change with my code at the same time that resulted in faster processing.
-
On nitendo swotch this would be R1 (right top button) (user section) or L1 (preset Pgms)
-
@Discostew I suspected as much. We really need a way to get the text of a program off of the switch to share online that's less onerous than screenshots. Then we can really start to science the performance characteristics of FUZE with benchmarks.
-
This post is deleted! -
This post is deleted! -
@Discostew I was totally unaware of this, thanks!
EDIT: I posted before I read that the "local" thing might be a fluke. Either way, very interesting!
-
Moved discussion on the performance of varaibles within loops to it's own topic as need to keep the pinned Hints and Tips as clean as possible and free from general discussion:
https://fuzearena.com/forum/topic/522/for-loops-discussion