Ashley's Forum Posts

  • Closing as not a bug: moving an object with mouse control conflicts with the 8 direction behavior. It is not designed to be used like that. Since there is no apparent reason to use the 8 direction behavior in this project, just remove it.

  • Why would you want to do this?

  • Also on reading "deWiTTERS Game Loop", I disagree with fairly significant parts of it: the article goes all the way through without even mentioning v-sync, which is pretty strange. The goal of good game engine should be to draw a new frame at every v-sync interval. Picking 25 and 50 as example framerates are just about the worst examples. Picking 60 still wouldn't be perfect, because it doesn't address the problem that v-sync intervals come at different rates on different devices, depending on the display refresh rate. So that's quite a significant problematic area that it does not attempt to address.

    Further the recommended solution proposes moving a fairly significant amount of logic in to the display function. In a good game engine, logic is a modifying operation and display is a read-only operation. The suggested solution sounds like it is really proposing three functions: logic, interpolate_logic, and display. So you call logic() at some fixed rate, then interpolate_logic() followed by display() at a higher rate.

    To me this seems a kind of crazy way to design a game engine; it's a pretty big architectural change, and makes the assumption that it's good for performance if interpolate_logic() is cheaper than logic(). In fact if the game is GPU-bottlenecked, there's no point calling interpolate_logic() - you may as well just call the full logic() since it runs in parallel to the GPU and won't impact performance. And I'm convinced that even the use of interpolate_logic() will cause game logic problems far more serious than vanishingly small rounding errors with variable framerates, which will not cause any problems in a well-designed game with reasonable tolerances.

    You can also simulate this method in the existing engine using techniques I've recommended previously: run expensive things like collision checks, for-each loops or nested loops on a timer, or at least every N ticks. Then you are effectively splitting your game logic in to expensive logic ticks (logic()) and cheap logic ticks (interpolate_logic()). This is just straightforwardly sensible game design and works well in a variable framerate engine as well, and can be done today without any extra engine options or rearchitecting.

    On the contrary I'm of the opinion that the variable rate logic/display cycle is the best solution: it v-syncs nicely at different refresh rates, handles mid-range framerates reasonably well, and is simple to design and reason about (since logic updates and display updates come at the same rate). I think the only disadvantage is really low framerates can teleport objects through collisions, but most systems aren't that slow, and there is a minimum framerate of 10 FPS in the Construct 2 engine.

  • I've tried skipping every other tick regardless of the timing, and it just halves the framerate regardless of what it is on Chrome for Android. So if it's running at 40 FPS it drops to 20 FPS instead of 30 FPS, and still looks pretty bad.

    I'm of the opinion that half framerate mode as implemented does not do anything useful, is too difficult to make work reliably in a browser-based engine, and I'd like to remove it in the next build.

    Changing how the engine runs ticks and render frames is another matter and could be considered separately. However again I'm not convinced there's much value there. You want to aim to render a frame every v-sync interval, which is usually 60 FPS. Dropping frames is not much help if the game is logic-bottlenecked (the GPU will do the heavy lifting, not the CPU). Running logic more often than rendering is wasteful of CPU time.

    AFAIK this is not a significant problem on desktops. I think it's a problem best solved by waiting. It's not much help in the short term, but in the long term I'm pretty sure everyone will have phones and tablets that can more or less match desktop performance.

  • You should report this as a bug in the Bugs following all the guidelines (e.g. attaching a .capx).

  • Closing, please contact licensehelpdjq@scirra.com.

  • The browser Close action should work.

  • It just chooses the blend mode in the fallback setting when the canvas2d renderer is in use.

    • Post link icon

    As I said, a secure variable plugin doesn't actually solve the problem, it just changes the way an attacker would hack your game.

  • - try not to bump old threads with keyword stuffing. That's what a lot of spam bots do, and we regularly delete and ban them. We wouldn't want to make a mistake! (Closing this thread now, it's old and links to the tutorial since we added the feature)

  • That example works fine for me. Pretty sure it's a driver bug. It's really hard to work around driver bugs, and usually they're pretty rare, so I don't think we will. Best report it to Intel.

  • Perhaps you could use some global objects with instance variables to simulate grouping variables. For example a sprite called 'Intelligence' allows you to use Intelligence.Learning, Intelligence.Knowledge and Intelligence.Memory. A sprite called 'Physical' allows you to use Physical.Strength, Physical.Agility, Physical.Speed. Etc...

  • Because there needs to be a server backend running a database to handle logins, which you can't ship along with a client-side javascript game.

    It shouldn't be too difficult with the AJAX plugin!

  • Did you check the debug console? Are there any error messages?

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • Currently everything is saved except things with the 'no save' behavior. It's not elegant, but a workaround is to back up any global variables to instance variables in a 'no save' object, load, then restore the globals from the instance variables afterwards.