I'll probably keep this updated as I go.
- Stop rounding my positions! This is really important for "smooth" movement.
You can round them when you put them on the screen (although atom.transform tells me that's not even necessary), but let me keep my numbers accurate!
In order to actually move smoothly, the step_size, step_x, and step_y variables (and maybe even bounds) need to not be rounded.
For example, along a vector pointing in any angle, your coordinates need to be accumulating all the decimals that come out of the trig used in calculating your velocity.
When dealing with basic 2D physics, you don't think in pixels. You think in units that can always be divided and scaled by any amount.
I've been soft-coding workarounds for this, but it's pretty silly.
It's such a basic feature that should have been in from the very beginning.
No one's ever given me any reasons why the integer constraint was set.
All pre-native pixel movement engines had this.
- To put tile movement aside even more, a new pair of position variables for absolute pixel position.
Every time location is changed, these variables are recalculated.
Every time these variables are changed, location is recalculated.
A Translate() proc would be great too, but that can be easily soft-coded by setting step_size and calling Move().
Just as necessary as the bottom-left corner of an atom is its center. But that's easily found.
If some vector datum could be recognized by the "new" keyword to place an object at a specific absolute pixel position, that'd also really help with putting tile-based movement to the side.
- Basic native physics of some kind. Like, Box2D, or something. Now that atom.transform simplifies all the visual parts, the rest is the huge internal parts. Axis-aligned bounding-boxes are so old-school.
How could I possibly make an Angry Birds clone without this.
Highly unlikely, but there aren't any feature requests out there for it, so there's that.
The list is open for additions.