Feedback after building first game

I took some notes while building my first game. I’m sharing these in the hopes that they are helpful to the team. Just because this is a list of critical feedback doesn’t mean I’m not thrilled about the platform. If this isn’t helpful (or isn’t the right forum for sharing these observations), please let me know!

Code:

Arrays > remove value at returns the removed value (the block is an oval; not a puzzle piece). This makes the block not useful for situations where you just want to remove an item without reading its value. Working around this is awkward.

Getting the tile location for a sprite is more involved than I’d like. After placing sprite on random tile of type, I needed to update the tile so I didn’t place another sprite there later. A block for getting the tile location for a sprite would be nice. Maybe after functions support return values, this won’t be as bad.

Scene > Camera gives us camera top and camera left but only lets us center camera at x/y. So if you want to move the camera 10px to the left, you have read the top / left; adjust by the offset; and then compute the new desired center of the screen.

It also takes a bit more math than I’d like to compute whether a sprite is onscreen or not. A block for this would be nice, but functions with return values will probably help here too.

The sprite lifespan trick is so handy! I also probably never would have thought of it if I hadn’t seen it demonstrated. I wonder if a first-class block feature could be built to support this scenario? Or maybe the technique could be showcased in one of the tutorials.

Arrays > set sprite list to array of sprites of kind… is, in my experience, most often used for the inner array of sprites of kind… piece. Could that be added as a separate top-level block? It looks like there’s precedent for a similar block with Scene > Tiles > array of all _ locations.

Nice to have but probably not desirable for the target audience: I find myself really wanting a separate type of block for constants. The variable list already gets long enough without support for local variables. If constants could be a distinct type that didn’t get listed in that list, I think I’d be happier. Even better, if constants could be declared + initialized outside of on start; maybe just as top-level blocks on the design surface, that could clean up start up logic as well. Constants could even pair really nicely with the sprite data extension, where you could declare constants for the data keys, and not have to worry about mistyping them… I could go on, but I know this one’s pretty far out there.

Blocks editor:

A box select mode for selecting multiple blocks to move would be incredible. Is there any way to select multiple blocks to move?

Nice to have: it might be nice if you could actually draw persistent boxes on the editor surface and put blocks within those boxes for better organization. (The boxes would have their own Format code context, and at the top level Format code would only format the top level blocks and boxes, not box contents.)

A find feature in the design surface that highlighted matching blocks by dimming the unmatched ones. (Similar to the existing Search feature but without filtering.)

Sprite editor:

Rectangle selection tool rectangle disappears if, while making a selection, the cursor moves off the edge of the sprite.

Copy + paste / duplicate support would be amazing.

Flip / rotate 90° support would be amazing; especially if they can be applied to a selection.

3 Likes

This is all great feedback, thank you so much! Definitely agree with a lot of it - much of it matches stuff we’ve talked about fixing when there’s time / we think of the proper solution, and many of the features are things we plan / want to do but just couldn’t fit in before the last release.

I’ll review it all more thoroughly in a bit, but just finished the live stream for today and I need to eat something. Thanks again, and if you think of anything more we’d love to hear it (even if it feels like a small gripe / not worth mentioning, its great to know that something felt wrong)!

1 Like

Like Joey said, huge thanks for putting this list of feedback together. Everything you listed is a pain point I’ve run into as well.

A few of these we plan to solve for now with extensions. For example, the sprite tile location and camera centering might be solved by the pxt-tilemaps extension that’s in beta now: extension, sample

I’ve been putting together a list of useful sprite math blocks for an extension and I’ve also been thinking about a dedicated extension for doing timers and intervals so we don’t need to rely on lifespan for these things.

Your suggestions around constants is pretty interesting. I agree variable lists tend to get very large and it’s a problem we’re still thinking about. Explaining the difference between variables and constants might be too much complexity for beginning users, but perhaps with the right design it could be done.

Arrays->remove value is a great example of expression blocks that you sometimes want instead as statements. This problem crops up in a few places and I tend to just use “set _ to ()”, but it’s not ideal. I thought about creating a blank statement block that accepts one argument of any type… but that’s a bit weird. I don’t know a good solution to this yet. We don’t want expression blocks to be able to fit where statements normally do because this would be a common mistake beginners can make.

There isn’t a way to move multiple blocks. All of us that have worked on large block programs feel your pain. We’ve been exploring options here. Having “clusters” of blocks that move together is a one idea, as is having seperate tabs/files or better auto-formatting and/or block sorting. A workspace block find feature is a great idea. One feature coming up is a way to collapse and expand blocks, this should help organization a bit.

Everything you mentioned about the sprite editor we’re hoping to get done for the next release.

Thanks again for putting this together. I’ve definitely got a few new ideas from your post, so I really appreciate that :slight_smile:

3 Likes