Ashley's Forum Posts

  • Please do not bump threads so quickly - it looks obnoxious, and most people take at least 24 hours to revisit the forum.

    The link you provided looks like the "working images" case to me. Try clearing your browser cache, maybe it's loading parts of the old project.

  • I don’t have measurment other than my game passing from not crashing to crashing. :)

    C2 and C3 provide measurements specifically for this. I was suggesting that you look at them.

    I didn’t mention it earlier, but another big problem I have using C3 instead of C2 is the huge performance drop... My theory about this is the following: Healer’s Quest sometimes needs to load very small images that are not present on the layout in the editor (they are too situational and there are too many of them to load them all on all layouts).

    This forces a synchronous texture load and can easily cause jank in the C2 runtime. The C3 runtime actually loads textures asynchronously which should solve this problem (at the expense of possibly a couple of frames where the texture is invisible because it hasn't loaded yet - but avoiding the jank). As has always been the case, for best performance you must have every object that can be created in the layout initially placed in that layout, and destroyed on start of layout if need be; this means Construct will pre-load everything the layout uses and completely avoid any on-the-spot texture loads, which can hit performance no matter the size of image being loaded.

    Then in C3 this becomes even more important, because it analyses the objects initially placed on layouts to identify the objects that are most commonly used together, and then groups them on the same spritesheet. This can lower memory usage by making sure the images on a spritesheet are always used at the same time, helping eliminate the case where you load a big spritesheet with lots of images that aren't used.

    So this is a known case and has known workarounds. The jank from on-the-spot texture loads should be pretty much fixed in the C3 runtime thanks to its asynchronous loads, but even in the C2 runtime, if you do all of this it will make the performance even better than it was to begin with, since it won't even need to to on-the-spot texture loads even for small images.

  • It would be a lot easier to either wait, then run the entire loop; or create all the objects but hidden (e.g. make them invisible), then wait after the loop, then show them. Basically wait before or after the entire loop, but not during it.

  • It's impossible to help with such little information. Please see the bug report guidelines - we need all that information to be able to help.

  • So if I'm correct the RAM usage is MUCH higher than if every object type had its own spritesheet, as in C2. This is probably why the game is crashing all the time when exported with C3.

    You can customise the spritesheet size to help manage the tradeoff here. Do you have actual measurements to indicate the difference?

    FYI automatically generating spritesheets are extraordinarily complicated and have many subtle tradeoffs. I have worked on this extensively for years and there are a lot of surprising results. It depends entirely on the project and specific images being used. Spritesheeting can actually reduce memory usage thanks to power-of-two packing, can reduce the download size, improves runtime performance, and usually significantly improves loading times. However it comes at the cost of reducing texture memory management granularity. C3 does arrange images together based on their usage across layouts to try to mitigate this.

  • Splitting spritesheets in to individual images will actually increase the download size.

    Suppose you have 20 frames of the player sprite, and the player's head is the same in every frame. A spritesheet image will compress away to nothing the 19 copies of the identical player's head as identical to the first, making the file smaller. If they are in separate images, then each file must store a full copy of the player's head - even if compressed, you'll have 20 copies of the same thing.

    In other words, when all the images are in the same file, image compression can remove similar parts of the image across frames. So you're hoping that tweaking the image compression format will more than outweigh the effect of bloating the download size by splitting everything in to individual images. It's not clear that this will be effective.

  • It's hard to help without a link to the published game on the web. Usually it's a misconfiguration with the server - the first thing to check is the browser console (press F12).

  • When does your iOS development/publishing certificate expire? Maybe you just need to renew it.

  • If you use "wait" in a loop, then by the time the next action has run the loop has finished, so the loopindex expression won't work.

  • I'm not clear exactly what you're asking, but it sounds like you might want to use the 'Select all in project' option when you right-click an object in the Project Bar.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Can you identify where it's injecting a script, what it's injecting, and why it's breaking the Android export? If so we may be able to harden Construct against antivirus software that is breaking things. Otherwise I think it would be best to report it to Kaspersky as some overzealous injection that breaks things.

  • I think you misunderstood. I meant: use functions to change the animation. Then you don't need 'trigger once' to try to figure out when the animation changed; it changes in your function. I didn't mean to call functions in the events with "trigger once".

  • Moved to 'Your creations' and deleted two other duplicate posts. Please do not cross-post in the forum.

  • It looks like you're trying to do some work the first time a new animation plays. It would probably be easier to call a function whenever you want to change the animation, change the animation in the function, then do some extra work in that function after the animation has been changed.

  • Just use the 'Set response binary' action before the request.