Question For Very Experienced Mobile developers.

0 favourites
From the Asset Store
a ready made template of Mobile Advert, Google Play and Mobile IAP Plugin,
  • Hi. I would like to ask you to list every single Construct 2 behaviour or event sheet condition and action that kills mobile performance and if possible its workaround.

    I have a game which has very poor performance on xdk. So i need to learn , we all newbies need to know what not to use and what is the best alternative.

    For example; Action WAIT x seconds , every tick , Physics, and so on. This would be very usefull for all of us i hope. Thank you very much for your help.

    jay

  • Hi, Im a bit experienced with mobile. I wont list everything you want but will point you to where you can find it:

    https://www.scirra.com/tutorials/298/performance-tips-for-mobile-games

    https://www.scirra.com/tutorials/577/construct-2s-export-time-optimisations

    https://www.scirra.com/tutorials/1300/tips-to-reduce-the-download-size

    Start with these, there are many others. Just use the search on tutorials and Forums with keywords: mobile optimization, XDK, Cocoonjs etc.

    Also Cocoonjs is faster than XDK from what I've read.

  • thank you

  • Rotating objects frequently (rotate behavior or setting angle every tick) is one that doesn't show up in that list, but it can really slow things down, especially if you are rotating large objects.

    Also, the current 'stable' of crosswalk supported by xdk (v10) is a godawful mess that looks terrible at anything less than 60fps; if you really care about perf, use v7 instead. Just be aware that google may remove your app at some nebulous point in the future.

  • Nesteris you want to avoid every tick whenever possible so just try keeping it to a minimum.

  • Nesteris,

    Actually I wouldn't worry at all about most Every Tick events. The biggest source of slowdown on mobile is related to graphics, not logic. Unless you've got some hardcore physics calculations happening (EDIT: or insanity with loops, and other serious logic slowdown issues, anything way out of the ordinary), forget optimization and just make sure your code is organized and pleasing to the eye. Setting A equal to B every tick has practically zero impact on performance. Ashley has addressed this on his blog. If you haven't already, read it and feel relieved.

    https://www.scirra.com/blog/83/optimisa ... -your-time

    The best advice is to periodically export the game and check its performance on mobile. That way, if you made a change that breaks performance, you can re-evaluate your approach.

    Also, CocoonJS Canvas+ is the best export option when it comes to performance, there's no doubt about it. Because it's a "non-browser engine", Ashley doesn't like to promote it, otherwise users complain about Construct 2 being flawed when there are compatibility issues. The truth is that CocoonJS Canvas+ is WAY better performance-wise than Crosswalk, especially when it comes to twitch-based action games with lots of movement in them. So forget compatibility. If you are developing strictly for mobile, and CocoonJS Canvas+ works for you, then develop to export through it, and you'll get much higher quality results than Crosswalk.

  • Rotating objects frequently (rotate behavior or setting angle every tick) is one that doesn't show up in that list, but it can really slow things down, especially if you are rotating large objects.

    so Nate goes and makes a game where almost *every* object constantly rotates...

  • Wise choice to develop for desktop. Mobile can be a painful, heartwrenching journey

    ... but now I have two people saying two different things.

    Hehe, well not necessarily. I was talking more about the logic side of it. To say that "Every Tick" on its own is a 'bad' event is misleading, as it implies that merely executing some logic every frame can cause slowdown. What's true is that using Every Tick for intensive graphical operations could be a bad idea, which is where he may have extracted that rule-of-thumb.

    Rotating objects frequently (rotate behavior or setting angle every tick) is one that doesn't show up in that list, but it can really slow things down, especially if you are rotating large objects.

    This is interesting. I was under the impression that mobile GPUs would be pretty good at elemental operations like translation, scaling, rotation, etc. Did you experience this on CocoonJS as well? I'll have to test it.

  • > Rotating objects frequently (rotate behavior or setting angle every tick) is one that doesn't show up in that list, but it can really slow things down, especially if you are rotating large objects.

    >

    so Nate goes and makes a game where almost *every* object constantly rotates...

    Really don't think it matters on desktops. Maybe if you had thousands of objects, but even then, I don't think offscreen objects are drawn at all, so I assume having them rotate wouldn't matter.

    I was under the impression that mobile GPUs would be pretty good at elemental operations like translation, scaling, rotation, etc. Did you experience this on CocoonJS as well? I'll have to test it.

    I've haven't used Canvas+ much. I basically went into development figuring that CJS Canvas+ could break at any time since it's not officially supported anymore, so I couldn't place my faith in it. Also, I wanted my game to be able to run on lower-end devices, even with crosswalk. A masochist, I know...

    Anyway, I'm certainly not saying you can't do rotation on mobile, just that, in my limited testing, it's much more expensive than translation and scaling. I didn't totally geek out and dive into why since I'd like to actually get my game finished...

  • yeah, on desktop its not really an issue. Mobile / Wii U is out of the question though. I donno how much the rotation had a factor in that. Dev kits back with Nintendo now anyway and wasnt much i could do since it required the rotation at its core

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Nesteris,

    Also, CocoonJS is the best export option when it comes to performance, there's no doubt about it. Because it's a "non-browser engine", Ashley doesn't like to promote it, otherwise users complain about Construct 2 being flawed when there are compatibility issues. The truth is that CocoonJS is WAY better performance-wise than Crosswalk, especially when it comes to twitch-based action games with lots of movement in them. So forget compatibility. If you are developing strictly for mobile, and CocoonJS works for you, then develop to export through it, and you'll get much higher quality results than Crosswalk.

    CocoonJS is not just Canvas+. We also offer a similar solution to Crosswalk (WebView+) or even to PhoneGap (WebView).

    The term CocoonJS has been related to Canvas+ for a long time and it is completely understandable, but please, from now on, we would much appreciate if you could specify that your comments are about CocoonJS Canvas+ or WebView+ or WebView. We know it is a complicated change of mindset, but CocoonJS is no longer just Canvas+ so this distinction will help us better identify what technology you are referring to. Thank you very much!

  • ludei,

    Will start saying CJS Canvas+ from now on. Sorry about that!

  • Nesteris,

    Actually I wouldn't worry at all about most Every Tick events. The biggest source of slowdown on mobile is related to graphics, not logic. Unless you've got some hardcore physics calculations happening, forget optimization and just make sure your code is organized and pleasing to the eye. Setting A equal to B every tick has practically zero impact on performance. Ashley has addressed this on his blog. If you haven't already, read it and feel relieved.

    https://www.scirra.com/blog/83/optimisa ... -your-time

    The best advice is to periodically export the game and check its performance on mobile. That way, if you made a change that breaks performance, you can re-evaluate your approach.

    <img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked">

    Worse advice you can give to a mobile dev.

    Don't you see this forum is constantly filled by complaints of poor performance? 99% of the time its because mobile devs failed to optimize their games ground up.

    Even for the PC, it's best practice to always optimize your game and design it around extracting peak efficiency. This is especially true for mobiles, even if your game runs 60 fps. If its efficient, it runs 60 fps while using less CPU cycles, resulting in less "battery draining" or "overheating devices".

    ps. Setting A = B every tic doesn't matter much, but repeat those wasteful events enough, it becomes bloated, poorly optimized and then it truly matters.

  • +1 i could not think of what to reply with here but that post puts it pretty perfectly.

  • Worse advice you can give to a mobile dev.

    Don't you see this forum is constantly filled by complaints of poor performance? 99% of the time its because mobile devs failed to optimize their games ground up.

    Even for the PC, it's best practice to always optimize your game and design it around extracting peak efficiency. This is especially true for mobiles, even if your game runs 60 fps. If its efficient, it runs 60 fps while using less CPU cycles, resulting in less "battery draining" or "overheating devices".

    ps. Setting A = B every tic doesn't matter much, but repeat those wasteful events enough, it becomes bloated, poorly optimized and then it truly matters.

    It wasn't my intention to say that optimization on the whole should be ignored. My response was towards this tendency of "blindly optimizing" the game logic, which causes folks to spend eons tweaking their events, without taking care to develop a genuine understanding of what truly makes games performant.

    The way I see it, there are two extremes in high-level development, both which fail to capture reality: The first ignores optimization altogether, thinking the framework will handle it all. The second is obsessive compulsive, and convolutes the code in the name of optimization and peak performance, ignoring so much of what the framework is already doing behind the scenes to make it easier for developers.

    Obviously, there's a wiser approach that strikes a balance and gives peace of mind, allowing you to use your framework the way it was intended to be used for code clarity and organization, and yet get desirable performance out of your game. It doesn't do away with optimization, but uses genuine knowledge (as opposed to simplistic philosophy) to decide what to spend time on, and what things to let the framework handle as it already does so well.

    In the spirit of discovering this wiser approach, we could say that villainizing 'Every Tick' events solely on the basis of them being 'Every Tick' events is blind optimization of logic, which in this case ignores Construct 2's already well-optimized logic engine and steals some emphasis away from real performance culprits, notably graphics intensive operations. You could spend a week hacking 10 events into a single efficient one, but the wisdom of reducing readability and maintainability for the few percentage points of performance you gain would be questionable. To quote Ashley from the "Optimisation: don't waste your time" blog post:

    [quote:1egqpwd8]

    Our profiling has shown it's not unusual for even a fairly complex game to spend 10% of the time on the logic, and 90% of the time on rendering - even when hardware accelerated! In other words, if you're not getting 60 FPS, the #1 thing to do is think about how to speed up the drawing of the game. That might mean having fewer sprites on-screen, avoiding heavy particle effects, and so on. Remember your events and behaviors are part of the logic, which only takes 10% of the time. So even if you went to extreme pains and managed to get all your events and behaviors to run ten times faster overall, which is typically an impossible goal, you will just be reducing that 10% to 1%. The overall performance will just be a few percent better for hours and hours of work, and you could probably have got the same speed-up by reducing the rate of one of your particle effects.

Jump to:
Active Users
There are 1 visitors browsing this topic (0 users and 1 guests)