Ashley's Recent Forum Activity

  • Are you sure it's the mouse polling rate and not just frame latency, which would add the kind of delay you describe? The lower the framerate the higher the latency from input to rendering, and the higher the framerate the lower the latency. Construct uses high-frequency polling specifically to reduce the input latency (via pointerrawupdate) and I just checked that on my system, even though the display is refreshing at 60 Hz, mouse input is being received at ~125 Hz.

  • That would most likely put us out of business.

    I think we're unique in the industry as being one of the only independent, self-funded game development tools. We're not backed by a billion-dollar company or investors. It gives us the freedom to avoid being obliged to do things like ram unnecessary AI features into the software, but we do need to make a living and pay our bills.

  • Press F12 and check the browser console for a more detailed error message - that might help identify the problem.

    Also try disabling any browser extensions you have installed, clear your cache, and try again. Often problems are caused by buggy browser extensions interfering with Construct and breaking it.

  • All software, commercial and otherwise, has bugs. Even software with extremely rigorous testing procedures and thousands of professional testers still have bugs, and still need to accept bug reports from users to make sure every problem gets sorted. Just look at Windows, Chrome, Safari, etc. Accepting issue reports from users is industry standard practice - in fact not accepting issue reports from the public is a negative signal for software quality in my experience (see: graphics drivers).

    The problem we have with Construct is you can make very large and complex projects with it that are particularly time-consuming to investigate, and we're a small company with limited resources. In exceptional circumstances we will try and investigate user's full projects, but it is usually infeasible: there is just so much going on that there is no way to identify how a bug could possibly have happened. Reducing the project ourselves is possible, but extremely time consuming, and usually takes far more time consuming than the original developer doing it. I don't think people appreciate just how difficult it is to be handed a vast project that you didn't make yourself. You start not even knowing how to play the game in question. It is even worse if the issue only occurs on level 25 which takes an hour to reach and involves difficult gameplay challenges before the issue occurs. You can try and cheat, but often making changes to a project you didn't make just breaks it because you don't understand it; then sometimes the issue doesn't reproduce after you made a cheat anyway. You can try and strip it down but it can take hours of examining the project to even know where to start. Then like I say often the end result is that you ultimately discover a mistake in event 4520 action 15 that actually caused the problem. If it took a week to reach that point, it will have meant missing an entire beta release of other improvements that could have been made in that time. We could hire professional testers to take this on, but in my view that would prove a very expensive and time consuming thing to do that produces minimal results, making it hard to justify. So I'm afraid the status quo is probably the best we can do for now.

    FWIW, we are often in the same boat when we report bugs to other developers ourselves. For example if I report a bug in Chrome, they rarely accept a reproduction using the entire Construct engine for the same reasons - it's too time-consuming to investigate and too frequently does not actually come down to being an actual bug. It can take significant time to strip things down and that can be frustrating when you're busy, so I totally appreciate that. However it's basically how things get done in the software industry. A good bug report with a minimal repro can sometimes literally be fixed in 5 minutes. A whole project with a vague report of an occasional issue can take weeks of work and still come to no resolution, so it's not generally something that is done in the industry - although if anyone does it, it's trillion-dollar multinational corporations with tens of thousands of staff who can afford to have a member of staff work on a possibly fruitless investigation for a few weeks. So yeah, sorry, I know it's hard reporting bugs, but it's basically the only way to realistically get things done.

  • What export option are you using? What project and export settings have you chosen? What device are you running it on? What are you comparing it to?

  • I made heavy use of the No Save behavior to keep things simple, but I kept running into issues. A lot of them were fixed, but I keep finding more, either bugs, edge cases, or weird quirks.

    With a large and complex project, I have to ask - how do you know these are not logic issues with your project? It is difficult to rule that out, and I do think it's sometimes unfair to blame Construct for things you can't prove are definitely it's fault - especially when we frequently deal with bugs along the lines of "Construct is not handling XYZ properly!" which then turn out to be a problem with the user project or some other kind of misunderstanding instead. From my point of view the savegame feature is a heavily used feature that's been used by thousands of projects over many years, and there are currently very few known issues with it, which is usually good evidence it's actually pretty robust. One of the reasons we have our bug report guidelines is you need to follow that to prove it really is a problem with Construct, and not yet another case of a misunderstanding or project logic issue. I know that can be a pain, but it's generally the only way things ultimately get sorted out. And if you can't narrow it down, that can be a sign it's not actually a bug in Construct.

    If you make your own save system, it's also likely to run in to all sorts of bugs and issues that Construct's save system has already sorted. For example saving and loading the relationships between objects is particularly tricky. Take two instances A and B, with B being a child of A. If you load A and B doesn't exist yet, you can't set up the hierarchy; if you load B and A doesn't exist yet, you can't set up the hierarchy. You have to have a phased approach where you load A excluding hierarchy, load B excluding hierarchy, then afterwards when both exist, restore the hierarchy relationships. There are dozens of awkward cases like this through the savegame system. It's entirely possible that if you try to take this on yourself and re-do all the same logic Construct already handles in the savegame feature, you'll actually end up with a more buggy and inconsistent system - another reason it's better to focus on the built-in feature.

    Also, just to confirm: is the Drawing Canvas object not saved by the system?

    Drawing Canvases are saved, just not the pixel data inside them - so just the number of instances, their positions, sizes etc. Saving the pixel data inside them is actually quite a tricky feature to design. Should it save a smaller lossy image format, or store it uncompressed? If lossy, then savegames degrade the quality of images, which may end up looking bad. If uncompressed, a HD image is about 8 MB, which could be solely responsible for making a savegame go from say 10KB to 8 MB; if you have cloud saves suddenly that's a big, slow save using lots of storage quota. It'll get worse very quickly if you have more Drawing Canvases. Then in some cases if you do something like procedurally generate the pixel data, it may be entirely unnecessary anyway. Drawing Canvas has other features to save the pixel data, so the idea is if you want to do that, you can opt-in and save additional data alongside the savegame.

    Updating the game and loading a savestate from an old version sounds extremely iffy, especially if the loaded objects have changed for whatever reason

    Construct's savegame feature is actually specifically designed to handle this gracefully. Everything internally relies on fixed IDs (called SIDs - serialization IDs) that are robust even in the face of renaming or moving things. You can rename all your object types, layouts, families, instance variables, behaviors, etc. and savegame data will be restored exactly the same. Data for deleted objects is just ignored, and newly added objects since the last savegame are not restored as there isn't any data for them. So it should in general just work. I don't recall anyone having issues with updating a project using savegames in the past few years, so from my point of view that seems to all be working. It's also another thing you have to think about if you invent your own savegame system. Will it be robust if you rename an object or a variable? Are you tracking things with fixed IDs to make it robust? It seems to me another non-obvious thing that you might get wrong if you try to make your own savegame system, and then you've invented a worse system that you are more likely to break.

  • Construct should fall back to creating a WebGL renderer if there is an error creating a WebGPU renderer.

  • That sounds like the known issue mentioned in the OP:

    Note however due to a Safari bug WebGPU rendering is glitchy from v26.0-26.3. It should however work correctly from v26.4+.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • By default Construct layout co-ordinates line up with CSS co-ordinates. So unless you apply some sort of scaling to the layout/layer yourself, I think the safe area size should just be used as-is.

  • I noticed a slight mistake in that manual entry - the actual condition name is Desktop features supported - I updated it to fix that. It means the action will only work when that condition is true, which is documented here. There's more context in the section further up about the permissions model, but in short, the 'Run file' action can only be used in Windows WebView2, macOS WKWebView, and Linux CEF exports.

  • To the extent feasible, the entire engine state is saved and loaded. It should cover virtually everything, with the sole exceptions being that linked issue, things like mid-flight network requests that are not possible to save, and things like Drawing Canvas pixels on the basis it's a large amount of data that you may well not want to include. The savegame system should be pretty bulletproof - it's been used widely for many years now, and we've fixed a bunch of bugs over the years.

    If something isn't working right, as ever please file an issue so we can fix it. I'd also point out often problems turn out to be mistakes in the project or misunderstandings - if you think the savegame system isn't covering something, prove it! Make a minimal project to test it and file an issue if necessary. I think the state of the feature is better than is portrayed in this thread but I am willing to be proven otherwise with issue reports, which we would then fix to make sure it works reliably.

    In my view it really doesn't make sense to tell people not to use a core engine feature and invent their own. Why did we bother making the whole feature if people are going to tell other people not to use it and to make their own? If there is something sub-par about the built-in feature, we should fix it so it does the job its meant to.

    Having said that, the savegame feature does include the full state of the gameplay and that can in some cases be a lot of data. The only time I'd agree it's fine to make your own save system is if it's very simple. For example if all you need to save is something like "reached level 5, current score is 120", then the savegame system is probably overkill, and you can just do something like save a small Dictionary with a couple of keys (or your own JSON data). If you want to include all the objects in the layout though, definitely use the built-in savegame feature - there is an absolute ton of stuff to take in to consideration if you want to handle that yourself, but we've already taken care of all that for you.

  • If you get a black screen, press F12 and check the browser console for any errors. You might have made a coding mistake and the error might tell you what it is. It's difficult to help from just screenshots - it's much quicker and easier to help if you share a project file.

Ashley's avatar

Ashley

Early Adopter

Member since 21 May, 2007

Twitter
Ashley has 1,761,892 followers

Connect with Ashley

Trophy Case

  • Jupiter Mission Supports Gordon's mission to Jupiter
  • Forum Contributor Made 100 posts in the forums
  • Forum Patron Made 500 posts in the forums
  • Forum Hero Made 1,000 posts in the forums
  • Forum Wizard Made 5,000 posts in the forums
  • Forum Unicorn Made 10,000 posts in the forums
  • Forum Mega Brain Made 20,000 posts in the forums
  • x125
    Coach One of your tutorials has over 1,000 readers
  • x74
    Educator One of your tutorials has over 10,000 readers
  • x5
    Teacher One of your tutorials has over 100,000 readers
  • Sensei One of your tutorials has over 1,000,000 readers
  • Regular Visitor Visited Construct.net 7 days in a row
  • Steady Visitor Visited Construct.net 30 days in a row
  • RTFM Read the fabulous manual
  • x42
    Great Comment One of your comments gets 3 upvotes
  • Email Verified

Progress

32/44
How to earn trophies

Blogs