Ashley's Recent Forum Activity

  • Preview should work the same as export. It was specifically designed like that to avoid differences between preview and export. If it doesn't, please file an issue.

    In your case it looks like you are using relative paths in both cases, but after export the server or upload process actually changes the folder structure. There's nothing much Construct can do about that: it expects export to work the same way as preview. So the best approach is to make sure the publishing system preserves the same folder structure.

  • Construct follows the same API patterns as used by the browser (e.g. addEventListener). If we deviate from that I think it actually overall makes coding harder, as you have to learn different patterns, and remember which pattern fits to which feature. This kind of inconsistency annoys me regularly when using third-party libraries which deviate from the browser way of doing things (e.g. using on instead of addEventListener). It also reduces the use of Construct in education, as if your early coding is using the same patterns as industry-standard code, then you're already learning useful real-world skills instead of tool-specific details.

    Still, there's nothing stopping anyone using the coding feature to write a library that does that kind of thing! You can always write code to "layer on top" a differently-designed API that works like you want.

  • I don't think those are good analogies - software is pretty abstract and personally I don't think maintaining a reliable software platform that other third-party developers build on top of has much relation to a restaurant. Tweaking random bits of internal code is fundamentally unmaintainable. This is widely understood among professional software developers. There is no way to make that work. The solution is a public documented API which you promise to support. That is what we have done.

    I think a better analogy is: imagine a block of flats where any resident is allowed to make any structural, electrical, plumbing, gas, or water alterations, to any part of the building, at any time, without permission from anyone. Chaos would ensue and the result would probably be extremely dangerous. This is not a reasonable way to run a shared building. There are rules about what you can and can't do, and who is allowed to make which changes, specifically to prevent that end result. Residents who complain that they can't just break open a few walls and run another gas pipe through several neighbor's flats are not being unfairly restricted in their freedom to do what they want with their flat - the rules are there to make sure the building can continue to function and be properly maintained in the long term.

  • I am sure people would still ignore the warnings, cause compatibility disasters for themselves including corrupting their projects, and then contact support and ask us to help rescue their project. Or we update Construct, it breaks the custom code change, and then the situation I described previously plays out again.

    As I keep saying, things are also much more complicated than they look: often people think "oh, I just change this code here", but it actually causes another bug somewhere else. This is so easily the case with the Platform behavior that even when we make small changes ourselves, it can result in several regression bugs spanning the next few months of releases. So you could easily end up descending in to a nightmare of constantly breaking things. Which isn't much better either - especially if you only discover shortly before release that your own change caused a showstopper bug, and you're doing something unsupported so we won't help you. I am sure people would still contact us and beg us to help them, so again it comes back to us anyway.

    I think the key point is it's not merely making changes - support is essential to software development as well. I don't think it's realistic to say "oh you can do that but you won't be supported". Not supporting customers is not a good option.

  • I want to encrypt messages before sending them on websocket.

    Connect to a secure websocket (wss: - the WebSocket equivalent of https:), and this happens automatically, so you don't need to do any encryption or decryption yourself.

    If you do want to write cryptography code in JavaScript for any other reason though, you have the full browser built-in Web Crypto API at your disposal.

  • 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 think the other crashes posted here are related to the original one, as they have different messages.

    Usually it's impossible to tell what happened from just a crash message. This is why we ask that issues are filed here following all the guidelines, as we need all that information to be able to help.

    A good thing to try is also to disable any browser extensions you have installed, as sometimes those interfere with Construct and cause problems. If you find a browser extension that causes a problem with Construct, please report the issue to the browser extension author.

  • You can't change the FOV in Normalized Z axis-mode, because it's mathematically impossible.

    Normalized mode means that for a 100% zoom, the camera is at Z=100 (the "default camera Z"). To achieve this with any viewport size, it adjusts the FOV to meet these requirements. If you changed the FOV then Z=100 would no longer correspond to 100% zoom, and so you're not using normalized mode any more.

    This is why you need to set the Z axis scale to Regular in order to change the FOV - which in turn changes the default camera Z (which you can see in the 3D Camera object's properties).

    Normalized mode is designed for 2D games, so my advice is if you are using any kind of 3D view with the 3D Camera object, then you should switch to regular mode.

  • I would guess that's a security restriction of macOS that comes back automatically if the app is ever changed. I'd recommend saving data somewhere where permission is not required, such as the app data folder on Windows (not sure what the equivalent is on macOS though). The Documents folder is actually a very security sensitive folder as in theory an application could read all your personal information and upload it to the web, hence the prompt.

  • Adding such a joint was only like 10 lines of code, but it was never added to c2 despite a fair number of people asking for it.

    IIRC, this was because the situation was something like: we were using an asm.js build of Box2D physics based on an older version of Box2D that did not have support for prismatic joints. By then asm.js had fallen out of favor and WebAssembly had taken over. So upgrading the physics engine meant more or less a full migration to a whole new technology for the physics engine, including figuring out how the new toolchain works, and going through the inevitable round of bug fixes for a few months as we figure out a bunch of unexpected breaking changes that came from the technology upgrade. And as ever we're being asked for 100 different things at the same time, so it just takes time to get round to that and take on a big upgrade job like that.

    This kind of thing is why I wrote the blog post The unexpected complications of minor features, which basically argues that there is no such thing as a minor feature when you work with complex software like Construct. I think most of the time when someone thinks something is straightforward it is actually much more complicated than they think. But people still see things like this and think "Scirra are lazy" or "they just don't care". I don't really know what we could do to mitigate this, as often we don't know what the complications are until we start the work, so we can't always explain why things will take longer than expected ahead of time. All I can do is ask for people's patience and please read that blog post to understand the kind of thing we routinely deal with when implementing "minor" features.

    Basically, its seems like Scirra recognizes the need for engine tweaking to support behavior interaction, but is adamant that isn't how you should develop

    Let me explain what went wrong with tweaking the engine code:

    • Some third-party developer adds some plugin that tweaks some internal code to do some interesting feature and releases it.
    • The plugin gets wide adoption over time.
    • Eventually - perhaps even years layer - we come to upgrade that part of the engine, perhaps to add some major new feature, optimize it to be 2x faster, or some other significant improvement. We have no idea that some plugin manipulates this code, so in the process of changing everything, even though we check Construct officially remains backwards compatible, we break all projects using the plugin.
    • Users update to the latest version of Construct and see their project is broken. Who do they go to? They contact us and complain. Often they get the impression we're incompetent as in their view, we can't even update Construct without breaking everything. Cue angry customers, refund requests, claims they'll leave Construct forever for other tools, etc. Sometimes it also results in corrupt projects, and for years afterwards we end up answering occasional support requests where someone has a corrupt project, and often it's extremely difficult to help them recover their work. (And a surprising number of people don't keep backups.)
    • Meanwhile by then the original third party developer may left the community and have no idea what happened. Sometimes they even blame us anyway, claiming we're incompetent and should have kept backwards compatibility.

    There are other ways this can go equally wrong, merely by tweaking an action in an official plugin or behavior and releasing it.

    In other words it's a total disaster for us and our customers, and often the third-party developers think it's fine, or have no idea anything ever went wrong.

    The solution to this is: define and document a public API with specific methods that you promise to support indefinitely. Then we know the feature set we have to support when making changes. This is the standard and widely accepted approach in the software industry.

    Of course if the public API doesn't do quite what you want, it can be a tough situation to be in. But this is still a much better situation overall. The inability to cause compatibility disasters is a feature, not a bug.

    I am well aware that tweaking things to suit your specific needs is important. However it must be done in a way that avoids compatibility disasters, or the entire development of Construct could descend in to a development hell where it's impossible to make improvements to the product without causing chaos.

    We do have multiple ways to customize things. For example most behaviors have the ability to directly manipulate the movement vector. This is sufficient to add extra features like wall-jumping and climbing to the Platform behavior. If you need even more advanced features, perhaps you run in to some fundamental limitation of the behavior itself. But this is also why we have the custom movement behavior, which provides the kind of basic building blocks things like the Platform behavior are made from, as well as coding features so you can custom-code things like in any other engine, and also a full addon SDK so if you wanted you could even come up with an entirely new form of a Platform behavior (distributed maintained separately from the official one, so avoiding compatibility problems). So I think there are a range of options for customization already there, with a sliding scale from works-out-the-box to custom-code-everything. And none of those are responsible for major compatibility disasters. I think it's part of our job to be responsible in ensuring people can't do things that end in disaster, so even if it might be frustrating that you can't do something like tinker with a random part of the internal engine, please know that it's for a good reason, and we're trying to guide people to better alternatives.

  • The plugin SDK is mainly designed for integrating third-party services, precisely because there are so many possible services out there, and even some individual third-party services have a huge feature set, there's no way we have the resources to cover it ourselves. So we made an SDK so other developers can integrate all that stuff without having to wait for us to do it. I guess some people want to tinker with the engine internals, but that type of thing has historically caused awful, horrible, nightmarish compatibility problems, so it's something I would specifically discourage. (And often I think the things people want to do are already possible, just if designed in a different and more maintainable way.) Anyway if there's specific and feasible suggestions for the SDK, they can be posted to the suggestions platform... but the key word is "feasible" (if your suggestion is "add an editor SDK so we can customise absolutely any part of the editor from plugins", then file that along with "make a full 3D engine").

    As for an insiders program... it's actually very complicated - the release system is a fairly big and sophisticated bit of server-side software, and it would probably be a lot of work to create another release channel that only certain people can see. But I don't really see what that gains us anyway - we already release things to the beta channel as soon as there's something worth sharing, or if we want to ask the community about stuff, we do it in the forum. So everything we would do in an insiders program, we basically already do but in public, involving everyone. So we get more feedback, and avoid the political problem of some people feeling left out if we don't pick them for the insiders channel.

  • game maker ... the GML programming language

    Umm... welcome to the Construct forums!

    If you're interested in coding, Construct supports coding in JavaScript, which is a far more advanced programming language than GML and also means you're learning skills you can use elsewhere in the industry - such as getting a job, or using other frameworks like node.js. We also just recently added support for TypeScript in the latest beta releases which adds static typing - see Using TypeScript in Construct for more on that.

  • It depends on what you're doing, but merely having 1000 objects is not actually that much for Construct - it's more than capable of handling that many objects. For example this blog post demonstrates that even old mobile devices can handle around 10,000 sprites on-screen and still hit 60 FPS.

    If you're using performance-intensive features like Physics, then it may be a different story. But Physics already uses a C++ engine compiled to WebAssembly, so it's probably already about as fast as a native engine.

    Perhaps the problem is the game design, if you're doing something inefficient like nested loops. It depends on your project and it's hard to say more without seeing exactly what you're doing, but Construct is definitely capable of handling 1000 objects smoothly.

Ashley's avatar

Ashley

Early Adopter

Member since 21 May, 2007

Twitter
Ashley has 1,425,778 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
  • x108
    Coach One of your tutorials has over 1,000 readers
  • x62
    Educator One of your tutorials has over 10,000 readers
  • x3
    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
  • x35
    Great Comment One of your comments gets 3 upvotes
  • Email Verified

Progress

32/44
How to earn trophies

Blogs