PaulPlay's Forum Posts

  • Thank you for your reply, I fully agree on that one.

    Though, I feel like iOS is quite a big platform that shouldn’t be overlooked by Scirra. Probably, most Construct games are being developed for PC, but part of that certainly is due to the lackluster compatibility with mobile platforms.

    I‘ll plug my feature request for adding a Capacitor export option here:

    github.com/Scirra/Construct-feature-requests/issues/382

  • I think it‘s well established that Construct 3 games don‘t run that well on android and iOS. Partially, this is because the System Webview for android suffers from performance issues, such as a frame scheduling bug.

    I feel like it might be worth it to transition away from Cordova in the long run. I don’t think performance would be a lot better on a new platform, but significantly so with more modern APIs, less plugin related bugs (have experienced so many loading bugs, memory leaks etc. coming from Cordova plugins) and overall a smoother experience.

    An option that I found to be interesting is Capacitor, which is backwards compatible with Cordova, has full PWA support if needed and uses far more up-to-date APIs in many areas. It‘s also open source and well maintained.

    Regarding TWAs that don‘t use the System WebView at all, I‘ve discovered that Google has released a billing API that might be worth taking a look at. Trusted Web Activities are significantly more performant than Webview Apps at the moment and it could be an interesting option to add to the Construct Export window.

    My hopes are still up that Google will update the Webview to be on par with the Chrome browser and fix the jitter issue. Moreover, I sincerely hope that WebGPU will become useable for Construct games in the near future, as it‘s basically non-functional (iOS) or extremely sluggish (Android) as of now.

    If there would be a convertor or at least an updated version of the unofficial c3ide, that would make updating plugins so much easier.

    This way I‘d likely have to fork and update many abandoned plugins myself to make my commercial projects work again. It‘s a lot of work to do and if it is necessary, the process should at least be highly optimized and as easy as possible.

  • Something that I‘ve been wondering for a while is whether there is a difference (or maybe performance difference) in having an empty condition with actions or an every tick condition with actions.

    As far as I know, both run every tick and seem to have an equal performance impact.

  • I have now spent more than seven hours tracking down the issues and filed a bug report here. I think there are multiple things that currently slow down performance with WebGPU tremendously

  • So I've spent hours trying to replicate my issue of near constant stuttering and it was extremely difficult. For me, objects are at least rendering fine, both in the webview beta as well as the stable version.

    Edit: I thought that the Compositing Mode made a difference, in reality, it just didn't use webGPU this time, after reinstalling the web view it did it again. Composition mode also makes no difference for webGL on this device at least.

    I've created a test project that stutters sometimes, like once a minute, on my test device but it's not even close to my main project. I'm not sure what the difference is exactly, because I've removed most code and almost all behaviors from the main project as a test and then the performance was fine. However, cpu usage is extremely low across the board in the project so I don't quite get how that could make a big difference. Furthermore, gpu usage is rather high but fine too. What causes the lag spikes according to the graphing tool on android is Misc / Vsync Timeout which is not very helpful but yeah. Also with the refreshrate down to 60 the stutters are far less noticable. The sample project also sits in the drive folder.

  • I‘ll work on a test project once I have time. But fyi, the "boat scene" in my game doesn’t use any effects and still stutters severely. It‘s just sprites moving, a few animations playing and a few objects running opacity tweens. I think pretty much any construct game using high-res instead of pixel art graphics will reproduce this, on the pixel devices at least.

  • Now that r380 ships with WebGPU enabled for Android I‘ve done some tests myself and thought I’d share them here :) The results unfortunately weren’t too promising…

    The past few system webview updates have brought significant performance improvements for my game for webGL 2, while webGPU causes severe stuttering issues on my 7 Pro test device, as you can tell from these videos. Furthermore, it sometimes causes longer hiccups and especially struggles with displays that support a dynamic refresh rate (disabling this feature improves performance significantly, but it’s still worse than webGL). Performance on my (relatively slow) Galaxy S8 with webGL is a lot better in comparison. iOS webGL performance, while not amazing, is much better too.

    I‘m hoping for future webGPU or Construct updates to improve this in the future, but for now I think I‘ll have to disable webGPU for my exports.

  • Do you know when this will be in the system webview which is being used by cordova afaik? Looking at what they did in the past, it seems that they usually update both pretty much at the same time..

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • I don‘t know about this and couldn‘t find anything about it online, but could be the case

  • Hey, do you guys have an idea whether there is a way to work around the fact that battery saver severely impacts the webview performance on ios? Like, everything seems to be limited to 30fps or is just laggy, especially when scrolling in my game it is very noticeable. I don‘t think there is a way to detect whether or not battery saver is enabled, or is there? If there is, it would at least be possible to display a message asking the user to disable it for improved performance. Ashley

  • You do not have permission to view this post

  • I assume you are testing on mobile, where loader layouts are not supported? It still shows a quick screen for launching the engine though in your browser, the loader layout is just being shown while downloading files. This is normal actually, it just takes a few seconds max. to load up your first layout and while doing so shows the logo you have selected for this screen in the icons folder and you can also opt to show a different background image as well or rather display the project color

  • Hey everyone!

    I was making a web app that generates and formats text and stumbled upon the following issue:

    I could not make a button that lets the user copy the text and keep the formatting.

    When you use the built-in clipboard plugin and copy the text of a text field (using Object.Text), the formatting through BBCode is being copied as plain text. For example, This would not look cursive but rather just show the BBCode brackets with the i's inside of them.

    So I tried doing it with an html field, I set the HTML's content to the text field's BBCode-formatted text and it displays it nicely, however, when I copy the HTML.HTMLContent, the text doesn't copy with the right format and <em> elements are being shown instead of the text being cursive etc.

    In the end, I managed to find a solution to this problem which I wanted to share with you and it does not require any plugin, just a few lines of javascript code which you can simply include in the construct editor thanks to the built-in scripting feature.

    What you need to do beforehand, is to set the text of an html element to the formatted text that you want to copy and set the ID of the html element (in the construct inspector) to "result" (you can pick a different id, but you have to change it in the js code accordingly).

    So in the event sheet, I put the following script under my button press event:

    function copyToClip(str) {
     function listener(e) {
     e.clipboardData.setData("text/html", str);
     e.preventDefault();
     }
     document.addEventListener("copy", listener);
     document.execCommand("copy");
     document.removeEventListener("copy", listener);
    };
    copyToClip(document.getElementById('result').innerHTML);
  • I‘m glad it helps :)