9 ms·
Stage is a minimalistic 2D, cross-platform HTML5 game engine
- elif 7y agoI'm curious why the decision to redraw the entire tree when a node has been touched, rather than just that node or that branch?
- acephal 7y agoThat's a typical quality of game engines, they just blast the whole screen away. If their design is similar to CreateJS' they likely walk the tree and reduce it to a flat array of Canvas instructions. I imagine reconcilling with a cache structure is expensive for whatever reason.
- jmull 7y agoIt takes a bunch of effort to keep track of which nodes need to be redrawn (and in which areas of the screen). If you end up needing to redraw most (or all) of the screen anyway, that effort is wasted. The overhead of it can even end up slowing things down. Just assuming everything needs to be redraw from the start saves the effort, and is optimal in the case where everything does need to be redrawn. For games in particular, this is usually a good assumption. If you're wrong, you end up slowing down less complex cases but they can usually afford it. When you're right, you're optimal for the most demanding cases. You're usually trying to hit a frame rate and care a lot more about hard cases falling below the target than how far above target easy cases are. And there are many common cases in games where you do need to redraw everything anyway. E.g., once you start scrolling or any other kind of full-screen effect. (In the old, pre-PGU days you often actually would scroll the image in a buffer and only redraw newly the exposed area through the scene graph, but there's really not an advantage to that these days and doesn't help you with any other kind of full screen effect.)
- Rotten194 7y agoGames typically need to redraw the entire screen anyways. Imagine a sidescroller where even a 1px movement requires the entire background and every object on top to be redrawn, or in 3D even a tiny camera move shifts the position of every triangle on the screen. Even very simple games without a lot of movement often have animations, where you then have to worry about transparency so you may have to redraw the region under the animated element anyways even of it doesn't move, etc. You could do a diff hoping for the happy occasion of a mostly-static frame, but a) that gives a performance penalty to the majority of frames that would need a total or near-total redraw anyways, and b) would lead to either unstable FPS or pointlessly hitting the FPS cap. There are exceptions to this, for example a visual novel or a turn-based strategy game, but those are often satisfied to just eat the performance penalty for the ability to use standard tooling, or can use engines or standard UI toolkits like React that can do a temporal diff. For example, I've written several text-based games [1] that just use the DOM because using canvas or WebGL wasn't necessary. I've written other games that use a hybrid approach of absolutely-positioning temporally diffed DOM over a frame-by-frame redrawn canvas, to get the best of both worlds [2]. And I've also written games in e.g. Unity where it's easier and performant enough to use ImGui and redraw it every frame. Ultimately it cones down to what's practical and what's performant enough. [1] https://vgel.itch.io/themengi https://vgel.itch.io/themengi , https://vgel.itch.io/the-sacred-text https://vgel.itch.io/the-sacred-text [2] https://vgel.me/hoverator https://vgel.me/hoverator
- aliswe 7y agoBut 2D sidescrollers have traditionally just "paned" the already drawn/rendered (buffer?) and only redraws the new bits. In some cases this caused artifacts to stick to the screen. Specifically thos was not unheard of regarding games made with KnP, TGF and MMF. I guess this was before HWA, though.
- victorNicollet 7y agoThere used to be a time when the game would render to a buffer slightly larger than the screen, then blit the right portion of that buffer to the screen. This meant that scrolling just consisted in blitting from a different offset. Composing the background image, then, would only require changing the bits behind animated sprites (so you would usually intersect the old and new position of each sprite with the background tile grid to find which tiles to draw again). All of this changed with the advent of 3d hardware acceleration, but I remember doing it up until 2005 to get significant performance gains (on bad hardware).
- elif 7y agoI guess my understanding of an HTML canvas is that it takes less work to "translate these 1000 objects 5 pixels left" than "draw these 1000 objects" e.g. mozilla's tips for canvas performance state: "Avoid unnecessary canvas state changes." And: "Render screen differences only, not the whole new state." https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Optimizing_canvas https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/...
- nikodunk 7y agoThe performance in my mobile device feels super native. http://piqnt.com/4/four/ http://piqnt.com/4/four/
- travbrack 7y agoiPhone 11 and I'm getting what looks like 15-30 fps
- shujito 7y agoiPhone SE, smooth as butter
- jmull 7y agoI have an XS max and it’s smooth. I guess yours must be triggering some suboptimal rendering path for some reason.
- snazz 7y agoDo you have low battery mode turned on? It’s running fine here on a much older iPad.
- speedgoose 7y agoTime to replace the battery?
- travbrack 7y agoOops, I was on low battery. Carry on. Nothing to see here.
- jmull 7y agoActually, thanks for coming back to post this. I appreciate it because I'm interested in this kind of thing (not necessarily just games, but graphical custom interfaces in general) and getting confirmation on why it was slow (on powerful hardware) is good to know.
- 7y ago
- gibolt 7y agoThe game with the little balls coming across from the sides is super simple, and super creative with its limitations.
- anchpop 7y agoAfter playing it for 15 minutes my desk appears to move in the opposite direction of the balls, I wonder what causes that?
- hanoz 7y agoThe Waterfall Illusion / Motion Aftereffect.
- megablast 7y agoI have no idea what game you are talking about?
- crummy 7y agohttp://piqnt.com/o/ http://piqnt.com/o/ I think
- 627467 7y agoI'm loving that this runs on a (end of lifed) blackberry passport browser. Not many 'cool' interactive webstuff works on older devices nowadays...
- ArtWomb 7y agoGood Job! Asteroids runs smooth ;)
- tartoran 7y agoGood job. Looking forward to playing with this.
- downtide 7y agoWhy would the plane demo devour 50% of my CPU? Intel P8400.
- p1necone 7y agoThat is a 7 year old laptop cpu. (Also if the demo is single threaded and not frame rate capped it probably eats as much of a single core as it can, and that's a dual core cpu so 50% checks out)
- plopz 7y agoLooks like a simpler version of Pixi.js without webgl support. I would imagine its probably nicer to use for small games when you don't need webgl performance.
- kossae 7y agoAll around great work! Just a heads up if the author is around: I may have found a bug in the Break Out example. Seems to have frozen when two balls collided just the right way: https://www.dropbox.com/s/12z2au9rkkw7hlm/Screenshot%202020-02-11%2017.55.37.png?dl=0 https://www.dropbox.com/s/12z2au9rkkw7hlm/Screenshot%202020-...
- crazypython 7y agoGame engine? This looks like just a sprite management library. Useful, but nowhere close to what's needed to make a multiplayer HTML5 shooter.
- newnewpdro 7y agoAgreed, this is basically just a glorified draw list, nowhere near a "game engine". Is there even a spatial index for accelerating collision detection?
- fit2rule 7y agoThe same author did Planck.js, so I imagine these are designed as modules to work together. (Dunno yet, just discovered and reading..) http://piqnt.com/planck.js/ http://piqnt.com/planck.js/
- pjmlp 7y agoIn the days where writing 500 lines of C code just to draw an untextured triangle are advertised as the future, something like this does look like an engine to me, even if relatively simple.
- shakiba 7y agoThat's right, it's only rendering and layout library.
- minxomat 7y agoThe matching physics engine, Planck, can be found on the same website btw: http://piqnt.com/planck.js/ http://piqnt.com/planck.js/
- nottorp 7y agoWhy did they have to say "cross platform"? Isn't HTML supposed to be cross platform anyway? What do they even mean by 'platform'? Disclaimer: I really don't know anything about doing games in html/js. The question is honest. Disclaimer 2: I do remember "write once, run anywhere". It was only mostly right back then.
- ZenPsycho 7y agomobile and desktop devices, because although html is supposed to already be cross platform, in theory, when it comes to games you have to make some assumptions about whether a user is using a mouse or a touch screen or a keyboard, specific screen sizes, testing on obscure browsers running linux and old versions of gecko and things start to break
- mrfusion 7y agoWhere would you get some free assets for making a game on this? I want to do a side scroller with some plants and mountains the background.
- NKosmatos 7y agoThis is great, I'll have to port my small board game from Python into this so as to be able to run it cross platform. It's a little bit frustrating working with the tkinter Python GUI and not being able to "export" the game to other platforms.
- fit2rule 7y agoReminds me very much of MOAI. Any chance you're working on adding Box2D? EDIT: n/m, I just saw Planck.js by the same author.. cool beans, will use ..
- SteveSmith16384 7y agoWhat's the advantage of this over, say LibGDX where you can create HTML5, Desktop, Android and iOS game all in one project?
- theknarf 7y agoYou won't need to write C++
- SteveSmith16384 7y agoLibGDX is Java.
- luord 7y agoThis is really good, a colleague of mine has always been interested in creating a simple game, but he hasn't got the time for the big engines and all that other stuff. Something like this might be just what he needs.