WackyToaster's Recent Forum Activity

  • In a sense you do have to worry about performance at least a little bit because there's always gonna be this one guy with his forgotten relic of a computer expecting to play the game. Which is fair enough considering we're talking about 2D games here. They should run on any toaster you throw them at.

    Regardless I do think the engine does perform really well in most cases. Things that do cause bad performance that I'm aware of are:

    - any kind of loops every tick especially if they manipulate instances.

    - The physics plugin

    - Shaders/effects also tend to be unusually(?) expensive, especially on mobile.

    Am I missing something?

    EDIT:

    I wanted to add. Construct being tightly tied to vsync can also cause performance issues, theoretically at least. Lets just assume my game performs 50.000 collision detections per second. That is... as long as it's a 60hz screen. Newer mobiles for example often have 120hz screens, now it's 100.000 collision detections per second. Or a fancy gaming monitor with 240hz... 200.000 collision detections per second. On top of that, don't forget that this also means that collision detections are inherently framerate dependent, just to add a little extra annoyance.

    I'd really like to see these type of calculations untied from the monitor framerate. At least as an optional feature. I'd like to be able to run the game logic at a fixed rate, then have the visuals on top interpolate accordingly. This will stop collision checks from ballooning out of control for no actual reason, and also would guarantee framerate independence for collision checks. And yes, this will slow down the game if the fps dip too low. That is a tradeoff I'm willing to take, considering this approach is good enough for a multi-billion dollar company youtu.be/dDxMv33QlFs

    There's a reason this is done this way. I've run into many many inconsistencies because of this. So many times have I made something that works nicely, then I remembered I have a high fps screen and swap to 60hz. Boom, everything's broken. No amount of deltatime is gonna save me here because how am I supposed to deltatime the rate of raycasts being performed if it's tied to vsync. So I could do something like "every 0.0167 seconds -> do raycast" to have it run at "60 fps". Does this work? Honestly I don't even know, probably not. What about the platform behavior? That is also tied to vsync, but I don't have the ability to execute that only "every 0.167" seconds. How can I tie this together without massive spaghetti? I probably can't.

    But I also don't expect this to change, because changing that is probably a massive task. What I do know is that the whole interpolate on top thing works because I sort of do exactly that in my current project. Technically speaking, it runs at ~13 fps. I get position updates to my sprites that I then simply tween to their new position. Visually it runs at a normal framerate, just everything in the background happens at 13 fps. And it will run at 13 fps in any case.

  • It's quite possible that some browser plugin is messing something up. You can try disabling them. Does it also happen with different browsers? In any case, I couldn't find any issues on my end when scrolling around in the tweening menu.

    You can try and file a bugreport with as much information as possible, but chances are this will lead nowhere and the issue is on your end somewhere. Some software, plugin, etc.

    github.com/Scirra/Construct-bugs

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • I did not expect timers to be this complex :V

  • I have a feeling that the main reason why timers are fake triggers is simply because of backwards compatibility. The timer behavior is ancient and changing it will probably cause a ton of older (but also current) projects to break. I wonder what the best course of action would be... deprecating it and make a new one with real triggers?

    Arguably, in any case the timer behavior should be the best performing option.

  • And by the way, when using lerp you need to use delta-time. Instead of 0.005 in the last parameter, it should be 0.3*dt. Otherwise the game will run differently on different frame rates.

    I'd go directly with the mathematically correct way of

  • Iʻve been running some comparisons and I noticed many times the events are already so well optimized that rewriting it in JS seemed to do nothing to speed it up. I actually managed to slow it down using JS in some cases

    I had that exact same experience a few times. :)

  • Yeah I found working with data in C3 in terms of arrays and such is... meh. It works but handling it in javascript is so much better, easier and faster. So in that regard I'd just go for subclassing. construct.net/en/make-games/manuals/construct-3/scripting/guides/subclassing-instances

    I had no idea that plugin exists, seems pretty useful. I had that thought a while ago where I wanted to add a json object as a new type of instance variable, don't remember if I ever posted a suggestion for it or anything.

  • Not that I'm aware of. I've also never done it myself.

    You can probably try and take a look at the official one, though that will cost you 20 bucks. I guess there's a how to set up included.

    construct.net/en/game-assets/tools/multiplayer-signalling-server-2

  • I've tinkered with firebase before and it does work pretty well. Haven't used it in a good while though, but it does pretty much exactly what you're looking for and then some. It's not super complex to set it up either.

    I'd also argue having your own little server somewhere has it's flair, but you'll have to deal with authentication, security etc. yourself and that's not exactly easy.

    As for a solution somewhere between:

    1. Setup a wordpress page that handles all the rating etc.

    2. Hook up the game with the wordpress api developer.wordpress.org/rest-api/using-the-rest-api

    developer.wordpress.org/rest-api/using-the-rest-api/backbone-javascript-client

    3. This should now allow the user to create "posts" on your wordpress page under their username from inside the game

    4. Setup user privileges etc. so you can moderate everything and so that people don't post questionable stuff. (As in posts need to be admin approved before being visible to the public)

    I'm not 100% sure on the whole api thing if that works (I think it should?) BUT the point is that a wordpress page can also just be used outside of the game. So if the API approach fails, you can easily fall back to just having the website as the level hub. And wordpress has categories and tagging and filtering build in too.

  • Ah, so you can "store" that expression itself in the form of a function, that returns the resulting value. As for the sliders, I'd put them into a family and use custom actions.

    This setup will change the sliders frames at 97 for all sliders. But you can also then add overrides if a specific slider should change at 50 for example.

    I suggest reading into functions and custom actions:

    construct.net/en/make-games/manuals/construct-3/project-primitives/events/functions

    construct.net/en/make-games/manuals/construct-3/project-primitives/events/custom-actions

    Hope this helps!

  • It should be possible, but you'll still need to host a websocket server on the local network. Probably via node.js or python. You don't need a hotspot, just both devices on the same network.

  • In your case, if the value only is calculated when you change the fader, I'd go with a global variable to store it.

    So, On input -> set global variable to round(3.1 * (1 - exp(-0.035 * FaderValue)))

    This stores the result until you change the input again. So yes, you can set a variable to that equation, just keep in mind it stores the result, not the equation itself.

    As for applying it to several objects in your project, that depends on what exactly you want to do. You could use families and custom actions to handle whatever the objects need to do based on the value. Perhaps a function also does the trick in your case. Most likely either of those will be what you're looking for.

WackyToaster's avatar

WackyToaster

Online Now

Member since 18 Feb, 2014
Last online 18 Jul, 2025

Twitter
WackyToaster has 26 followers

Connect with WackyToaster

Blogs