<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ construct 3 - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ construct 3 - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 30 May 2026 22:26:19 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/construct-3/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ What 2D Game Engine to Use for Your Next Game ]]>
                </title>
                <description>
                    <![CDATA[ By M. S. Farzan A few weeks ago, I posted about my experience attempting to make a prototype in a bunch of different 2D game engines/frameworks to learn what makes them tick. If you're shopping around for an engine for your next 2D game, this article... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-2d-game-engine-to-use-for-your-next-game/</link>
                <guid isPermaLink="false">66d85201c1231da2ef2b5a88</guid>
                
                    <category>
                        <![CDATA[ C ]]>
                    </category>
                
                    <category>
                        <![CDATA[ construct 3 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Game Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ game-maker-2 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Godot ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ phaser 3 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                    <category>
                        <![CDATA[ unity ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 04 Nov 2019 20:47:36 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9f9f740569d1a4ca4397.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By M. S. Farzan</p>
<p>A few weeks ago, I <a target="_blank" href="https://www.freecodecamp.org/news/how-i-made-a-2d-prototype-in-different-game-engines/">posted about my experience</a> attempting to make a prototype in a bunch of different 2D game engines/frameworks to learn what makes them tick.</p>
<p>If you're shopping around for an engine for your next 2D game, this article will provide some things to consider that may help in your discernment process.</p>
<p>Do note that I'm not attempting to cover every 2D game engine out there; nor am I positioning one engine or framework over another.  These recommendations are from my personal experience using different engines and frameworks for prototyping.</p>
<p>And if you'd prefer to watch rather than read, I've created a video version of this post (26 minute watch):</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/gtKEkuhsWOs" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-react">React</h2>
<p>At first glance, you might be thinking, "<a target="_blank" href="https://reactjs.org/">React</a> is a front end framework for making interactive websites. It's not a game engine!" And you'd be mostly correct.</p>
<p>React doesn't provide native support for game development basics, like, for example, 2D physics, but it <em>does</em> handle state extremely well.  If you're already a JavaScript developer and willing to pair React with something like <a target="_blank" href="https://boardgame.io/">boardgame.io</a> to make a simple 2D game, you could potentially get a prototype up and running pretty quickly.</p>
<p>For all other types of 2D games, you'll want to look elsewhere.</p>
<h2 id="heading-unity">Unity</h2>
<p><a target="_blank" href="https://unity.com/">Unity</a> has made itself ubiquitous in the 2D and 3D game development spaces. I'd position it as an excellent 3D game engine, and a serviceable 2D one.</p>
<p>The Unity editor is fairly complex, with a lot of nested menus that take some time to wrap your head around (check out <a target="_blank" href="https://www.freecodecamp.org/news/take-a-tour-of-unity-2d/">this article</a> for a tour of its 2D features).  If you don't already have a background in C#, which Unity uses for scripting, you'll want to brush up on it prior to learning Unity, as doing so will ease your overall learning curve.</p>
<p>Unity also does a lot of things the "hard way" when it comes to 2D game development, which doesn't <em>feel</em> native compared to other game engines.  Creating a 2D game world in Unity, for example, feels like you're shoehorning a 2D plane into a large 3D space, and things like animation and pixel perfection are more clunky than in other 2D-specific engines.</p>
<p>You can make any type of 2D game with Unity if you're willing to wrestle with the editor and underlying 3D idiosyncrasies. It has extensive community support, and you'll find that working with C# is a delight. Additionally, Unity's Asset Store has all kinds of art and templates for you to download and purchase, but buyer beware: you might spend as much time rewriting someone else's code to fit your project as you would just starting from scratch.</p>
<p>Unity is, in general, free to use, but pricing becomes more complex if you want to use <em>everything</em> it has to offer (see <a target="_blank" href="https://store.unity.com/compare-plans">this page</a> for more details).</p>
<h2 id="heading-godot">Godot</h2>
<p><a target="_blank" href="https://godotengine.org/">Godot</a> is a free and open source 2D and 3D game engine that supports GDScript, C#, and even C++ and Python if you're willing to do a lot of the heavy lifting to make them work.  It supports a node-style workflow and is super lightweight.</p>
<p>If you're a) willing to invest in learning GDScript or b) already super good at C#, C++, or Python, you'll probably be fine in Godot, particularly if you like working with open source software.  If not, you may get easily frustrated, as there isn't nearly as much support for C# or other languages as there is for GDScript.  Still, Godot is a pleasant engine with which to work, and although it may not have the same pedigree and community support as something like Unity, if you're a self-starter you might feel well at home.</p>
<h2 id="heading-construct-3">Construct 3</h2>
<p>If you just want to make 2D games and don't care about programming language or subscription fees, you'll find <a target="_blank" href="https://www.construct.net/en">Construct 3</a> to have everything you need to get a demo up and running, and quickly.  All of your work will be done in a browser, using drag-and-drop tools (and custom JavaScript support if you need it).</p>
<p>Don't expect to have a meaningfully productive experience with Construct 3 for free, however.  There's a simple demo that you can try out, but impactful game development with Construct 3 is locked behind a paywall, and a subscription at that.</p>
<h2 id="heading-game-maker-studio-2">Game Maker Studio 2</h2>
<p><a target="_blank" href="https://www.yoyogames.com/gamemaker">Game Maker Studio 2</a> has a user-friendly editor that supports a proprietary language called, appropriately, Game Maker Language (GML), along with visual scripting.  It also has a lot of tutorials, great community support, and an asset store (which comes with the same caveats as Unity's, above).</p>
<p>The general workflow of Game Maker Studio 2 and doing things like animating sprites, setting up your game world, and so on, are straightforward and intuitive. GML might not be your cup of tea if you're coming from another, more widely-used programming language, and I would <em>not</em> recommend it as your first introduction to learning how to code.  It employs some of the basic concepts of programming, but not important details such as coding best practices or how to write clean code.</p>
<p>Additionally, you can try Game Maker Studio 2 with a free 30-day trial, but will need to pay to continue to use it after that time.</p>
<h2 id="heading-phaser-3">Phaser 3</h2>
<p>If you want to code <em>everything</em> and learn a lot about the JavaScript ecosystem while doing it, check out <a target="_blank" href="http://phaser.io/">Phaser 3</a> (or wait for Phaser 4, which is <a target="_blank" href="https://madmimi.com/p/4f5f0f">on the way</a>).</p>
<p>Phaser is a lightweight and powerful JavaScript framework for making 2D games.  Whereas Phaser 2 was extremely well-documented and had excellent community support, Phaser 3 is quite the opposite.  There's good official documentation and a bunch of examples (without much context around them, it must be said), and a dreadfully small amount of tutorials.</p>
<p>Expect to build everything yourself, but if you're looking for ES6 or TypeScript support, or if you <em>really</em> want to polish your skills as a JavaScript developer, you'll be able to go a long way with Phaser 3.</p>
<p>In the interest of fairness, I should mention a two other 2D game engines that have been recommended to me since I started writing on the topic: <a target="_blank" href="https://love2d.org/">LÖVE 2D</a>, which uses Lua, and <a target="_blank" href="http://www.monogame.net/">MonoGame</a>, which supports C#.  I haven't used either of them (or others, such as <a target="_blank" href="https://www.pygame.org/">PyGame</a>), and can't speak to their usefulness, but they may be worth checking out.</p>
<p>Let me know which 2D game engine you wind up using, and why!</p>
<p>If you enjoyed this article, please consider <a target="_blank" href="https://www.nightpathpub.com/">checking out my games and books</a>, <a target="_blank" href="https://www.youtube.com/msfarzan?sub_confirmation=1">subscribing to my YouTube channel</a>, or <a target="_blank" href="https://discord.gg/RF6k3nB">joining the <em>Entromancy</em> Discord</a>.</p>
<p><strong>M. S. Farzan, Ph.D.</strong> has written and worked for high-profile video game companies and editorial websites such as Electronic Arts, Perfect World Entertainment, Modus Games, and MMORPG.com, and has served as the Community Manager for games like <em>Dungeons &amp; Dragons Neverwinter</em> and <em>Mass Effect: Andromeda</em>. He is the Creative Director and Lead Game Designer of <em><a target="_blank" href="https://www.entromancy.com/rpg">Entromancy: A Cyberpunk Fantasy RPG</a></em> and author of <em><a target="_blank" href="http://nightpathpub.com/books">The Nightpath Trilogy</a></em>. Find M. S. Farzan on Twitter <a target="_blank" href="http://www.twitter.com/sominator">@sominator</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ I attempted to make the same 2D game prototype in React, Unity, Godot, Construct, Game Maker, and Phaser. Here's what I found. ]]>
                </title>
                <description>
                    <![CDATA[ By M. S. Farzan I'm a tabletop game developer. In designing a new card game, I decided to build a digital prototype to help me run simulations and easily share a proof of concept with collaborators. I have some background in JavaScript and C#, and I ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-i-made-a-2d-prototype-in-different-game-engines/</link>
                <guid isPermaLink="false">66d851e4e0db794d56c01bf5</guid>
                
                    <category>
                        <![CDATA[ phaser 3 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ C ]]>
                    </category>
                
                    <category>
                        <![CDATA[ construct 3 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Game Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ game-maker-2 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Godot ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                    <category>
                        <![CDATA[ unity ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 11 Oct 2019 16:17:31 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/10/EntromancyHB_Logo_COLOR.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By M. S. Farzan</p>
<p>I'm a tabletop game developer. In designing a new card game, I decided to build a digital prototype to help me run simulations and easily share a proof of concept with collaborators.</p>
<p>I have some background in JavaScript and C#, and I set out as many do: by spending an inordinate amount of time in "what framework should I use" threads and reading documentation without actually making anything. </p>
<p>Flash forward many months, and I've now spent more time working in (and wrestling with) React, Unity, Godot, Construct 3, Game Maker Studio 2, and Phaser 3, in an attempt to understand what makes them tick.</p>
<p>Admittedly, I think I've spent <em>way more</em> time in each of them than necessary to make my little game, and I probably could have just stuck with the first one and blundered my way through the prototype. I'm hoping the below info will be helpful for anyone else who is shopping around for an engine or framework.</p>
<p>Bunch of caveats: I'm not attempting to sell one engine or framework over the others, and I'm also not suggesting that one or any of these frameworks will work for your game better than another. I'm also not comparing pricing, back end functionality, or platform deployment. So depending on your requirements, the below information might be of differing value to you.</p>
<p>Additionally, this experience is based on development for a 2D card game, so I won't be discussing 3D engines, physics, etc.</p>
<p>You can also <strong>skip to the bottom for the TL;DR.</strong></p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/gtKEkuhsWOs" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-the-prototype">The Prototype</h2>
<p>My game, <em>Entromancy: Hacker Battles</em>, is a competitive cyberpunk card game with TCG-light mechanics. You can read more on our <a target="_blank" href="https://www.entromancy.com">website</a> or watch how it's meant to be played in <a target="_blank" href="https://www.entromancy.com/single-post/2019/09/26/Get-a-Sneak-Peek-at-Entromancy-Hacker-Battles">this video</a>. But suffice it to say that, as a card game, it requires a potential digital framework to support basic things like state management, UI, drag-and-drop UX, and back end hooks for implementing multiplayer.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/HackerBattles_Card-Mockup.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Given these requirements, I explored the following frameworks and engines to see which one would be most suitable for making my game...instead of actually <em>making</em> the game (I'm happy to say that now that I've settled on a framework, I'm making a lot more progress). </p>
<p>You can access a playable version <a target="_blank" href="https://sominator.github.io/hacker-battles/">here</a>, and although the game is further along than the live prototype would suggest, this version is pretty stable (in Chrome at least).</p>
<h2 id="heading-react">React</h2>
<p>Having already built a character generator prototype in <a target="_blank" href="https://reactjs.org/">React</a> for a <a target="_blank" href="https://www.entromancy.com/rpg">tabletop RPG I designed</a>, I thought a natural step would be to give the framework a spin for the card game. I found state management to be a breeze (it's what React <em>does</em>, after all), whereas implementing simple drag-and-drop functionality for cards proved to be a nightmare.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/React_Native_Logo.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>There are some libraries out there that can help with basic drag-and-drop (e.g. <a target="_blank" href="https://react-dnd.github.io/react-dnd/about">React DnD</a>), but I found that with a card game, I needed a more elegant solution for dropzones, as Hacker Battles is very specific about which cards can be played where, and when.</p>
<p>This experience led me to check out <a target="_blank" href="https://boardgame.io/">boardgame.io</a>, which can work in tandem with React. But this ultimately required me to learn another framework on top of an existing framework, which was less than ideal for my purposes.</p>
<h2 id="heading-unity">Unity</h2>
<p>Out of general interest, I had spent a lot of time in <a target="_blank" href="https://unity.com">Unity</a> doing tutorials and learning how to use the editor before attempting to remake the card game prototype with it. The asset store is a great resource, and there's so much documentation, official and unofficial, out there that I was confident I could find an answer to any issue I might encounter.</p>
<p>My experience with Unity thus far has been a mixed bag. I really enjoy working in C#, and anything code-related has been a relatively pain-free experience. However, Unity is very specific about its implementation and can feel counter-intuitive at times.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/1280px-Unity_Technologies_logo.svg.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>The editor, on the other hand, is a bear to work with. To harness Unity's full potential, you need to spend a good long while wrestling with the UI to understand where everything is and how to use it. It's also desperately behind the times with 2D game development, clearly attempting to flatten a primarily 3D engine into a 2D plane, with mixed results.</p>
<p>To be fair, I quite enjoy working in the Unity editor, clunky as it is. But if you're looking for a 2D game engine, your quality of life will be a lot higher elsewhere (watch a video on Unity's animation system or achieving pixel perfection and you'll see what I mean). </p>
<p>Ultimately, Unity's handling of the 2D space is a bit more complex than I need for my prototype, but I will return to it for other types of games.</p>
<p>Also, a sidebar that might be useful to some: I was initially extremely excited about the asset store, with the idea that I could purchase a card game template that would make the development process that much easier for me. It didn't work out. Most of them were MTG/Hearthstone/etc. clones that would require just as much development time on my part to restructure them for my card game as it would to just start from scratch. </p>
<h2 id="heading-godot">Godot</h2>
<p>My first thought upon encountering <a target="_blank" href="https://godotengine.org">Godot</a> was: "open source game engine that supports C#? Sign me up!" Then I downloaded it, worked through a couple of basic tutorials, and had it crash on build. Hurm.</p>
<p>Several Google searches, reinstalls, and hairs pulled later, I figured out it had something to do with my version of VS Build (I think?), which led me down a separate rabbit hole. I knew from experience that other engines - Unity chief among them - could cause game-breaking issues completely outside of your own code, but this was an annoying hurdle that likely colored the rest of my experience with Godot.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/Godot_logo.svg" alt="Image" width="600" height="400" loading="lazy"></p>
<p>In terms of the editor, I quite liked Godot's node-based implementation, which I actually found counter-intuitive coming from Unity's prefabs, but eventually warmed to. I'd actually go as far as to say that its 2D functionality is <em>better</em> than Unity's, but it's missing the community, asset store (see sidebar above), and especially, the documentation that Unity has. If you're intending in working in C# with Godot, for example, be prepared to look for answers in the engine's custom GDScript and then translating them to C#.</p>
<p>I have heard, however, of people experiencing great success with Godot while using GDScript, so if you're willing to invest the time to learn it you might enjoy what Godot has to offer.</p>
<h2 id="heading-construct-3">Construct 3</h2>
<p>In the caveats that I listed above, I mentioned that I'm not including pricing as a point of discussion. Still, I feel like I need to bring it up with <a target="_blank" href="https://construct.net/">Construct 3</a>, as it turned out to be impactful in my experience. </p>
<p>Unlike the other game engines listed here, which are, for the most part, free to use (Game Maker Studio 2 has a 30-day free trial), the vast majority of Construct's functionality is behind a pay wall, and a subscription fee at that. Ugh.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/Construct_3_Logo.svg" alt="Image" width="600" height="400" loading="lazy"></p>
<p>I really, <em>really</em> like the cut of Construct's jib for simple 2D games. The editor feels a bit like an upgrade from MS Paint, but it handles sprite and object management really well, and is just plain easy to use. I don't love that it uses a "visual scripting" style, but they've recently added the feature of writing plain old JavaScript and it seems to more or less work.</p>
<p>I was able to spin up a very rudimentary architecture for the prototype in a brief amount of time before closing the Construct 3 demo (which runs in a browser)...and then trying it all again later with a new demo. I feel like, at least for this card game, I could do a lot with Construct 3, but I'm just not willing to pay $99/year (or more, as a business) for a prototype.</p>
<h2 id="heading-game-maker-studio-2">Game Maker Studio 2</h2>
<p>YoYo Games has clearly done a lot of work to make <a target="_blank" href="https://www.yoyogames.com/gamemaker">Game Maker Studio 2</a> accessible and easily navigable, and it shows. Of all of the engines that I've used for this project, I like the GMS editor the most. For a small project, it's easy to find your way around and go about your business. I suspect, however, that a larger project might get out of hand pretty quickly.</p>
<p>This might be influenced by Game Maker Studio's proprietary language, GML (although GMS 2 supports visual scripting, which I did not use). It works, but if you're coming to it from another OOP language (or, truly, any other widely used language), you might scratch your head at the implementation or figuring out how to do some things. If you're a beginner or willing to spend time figuring out how GMS <em>wants</em> you to use GML, you'll probably be fine.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/download.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>I experienced some quirkiness with Game Maker Studio's drag-and-drop functionality - namely, mouse pointer detection upon dragging is a little wonky and requires some scaffolding to make work correctly. </p>
<p>I think - and this is totally personal preference and laziness on my part - that if GMS offered the ability to use another, non-proprietary programming language, I would spend the time to do more damage here. I'm all for leveling up multiple skills while working, whereas spending the time to become an expert in the GMS editor <em>and</em> GML without being able to easily apply that knowledge elsewhere doesn't seem worthwhile.</p>
<p>Still, it's a pretty workable 2D editor, and although the community support may not be on par with Unity's, it's still pretty good.  Beware, also, that once your free trial is up, you'll have to pay to continue using Game Maker Studio 2.</p>
<h2 id="heading-phaser-3">Phaser 3</h2>
<p><a target="_blank" href="https://www.freecodecamp.org/news/how-i-made-a-2d-prototype-in-different-game-engines/phaser%20io">Phaser</a> is a lightweight, open-source JavaScript game framework. There are some Phaser IDEs around, but if you're of the sort that wants to work primarily in code, you might wind up here, using Atom, Sublime, or your favorite editor.</p>
<p>Phaser 2 was and is widely used and well-documented with a ton of tutorials to draw upon. Phaser 3 is the opposite. It has a comparatively high learning curve for beginners, with a bunch of examples and not a lot of context around them. </p>
<p>A lot of the tutorials out there support Phaser 2, and while the learning is transferable, the code is not. Additionally, the devs <a target="_blank" href="https://madmimi.com/p/4f5f0f">recently announced that they'll be moving support to Phaser 4</a> (and TypeScript rather than ES6), which is not great if you've spent time working in Phaser 3.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/Phaser_-game_framework-_logo.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you're not a professional programmer (I'm not) and up-to-speed with ES6 classes and JavaScript best practices (I wasn't), you might become quickly frustrated with Phaser's lack of handholding and having to set up your own IDE and work flow (I was). </p>
<p>However, I've found it to be a powerful, lightweight framework that does a lot of things in a much more streamlined fashion than other game engines. Drag-and-drop functionality for the card game has been a relative breeze, and the ability to separate card types into classes (sort of like Unity's prefabs) has compartmentalized some of the cognitive load that this kind of game requires.</p>
<p>If you're a front end developer, you might like or be comfortable with hard coding pixel coordinates for everything, but sheesh, is this painstaking work. Additionally, if you're not up-to-speed on everything JavaScript, you'll most likely be searching for answers in non-Phaser circles and then applying them to your project, which has its own benefit, I suppose.</p>
<p>One other note in case it's not clear: Phaser 3 <em>does</em> have quite a bit of official documentation and examples, but it <em>doesn't</em> have the community or Stack Overflow answers that a lot of other game engines enjoy. If you run into an issue or can't figure something out, you'll have to figure out your own solution or post your question on the Phaser Discord server, which has been helpful in my experience.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Given all of the above, the prototype I've stuck with and continue to iterate upon is the one I've built with Phaser 3. I realize that this may be anti-climactic, as Phaser isn't inherently "better" than the other frameworks and engines at 2D game development (except for, perhaps, React, which isn't trying to be a competitor in the digital game space).</p>
<p>Phaser does, however, seem to handle drag-and-drop and game loop management for <em>Hacker Battles</em> more smoothly, and for my purposes, that's important. I also enjoy that using Phaser is requiring me to invest more heavily in the JavaScript ecosystem(s) and communities, but I'm interested in doing that anyway so it feels like a bonus. </p>
<p>If you're more of the "what can I use to build something quickly and not care about the context in which the engine is situated" type, YMMV.</p>
<h2 id="heading-tldr">TL;DR</h2>
<p><strong>React:</strong> great for front end development. Wouldn't use it for games, particularly drag-and-drop.</p>
<p><strong>Unity:</strong> you can make any type of 2D game if you're willing to wrestle with the editor and underlying 3D idiosyncrasies. Great community support, and C# is awesome. Asset store exists, but may not be useful for your purposes.</p>
<p><strong>Godot:</strong> open source and supports GDScript, C#, even C++ and Python if you're willing to do a lot of the heavy lifting. Good 2D implications but not nearly as much community support as something like Unity. Also, my experience was buggy.</p>
<p><strong>Construct 3:</strong> really easy to use, high barrier to entry because of the subscription paywall. Visual scripting may get on your nerves if you're looking to use or learn code, although there is now some JavaScript support.</p>
<p><strong>Game Maker Studio 2:</strong> user-friendly editor with good community support. GML or visual scripting might not be your cup of tea if you're coming from another more popular programming language, but hey, when in Rome. Also, requires payment after a 30-day free trial.</p>
<p><strong>Phaser 3:</strong> expect to code everything, and do a lot of searching to figure out how to make things work. It's working for me for this particular game and prototype, but Phaser 4 is on the way, so there's that.</p>
<p>I hope this post is useful in your own search and discernment process. I'd love to hear about your own experience(s), too, with any of these frameworks/engines or others!</p>
<p>If you enjoyed this article, please consider <a target="_blank" href="https://www.nightpathpub.com/">checking out my games and books</a>, <a target="_blank" href="https://www.youtube.com/msfarzan?sub_confirmation=1">subscribing to my YouTube channel</a>, or <a target="_blank" href="https://discord.gg/RF6k3nB">joining the <em>Entromancy</em> Discord</a>.</p>
<p><strong>M. S. Farzan, Ph.D.</strong> has written and worked for high-profile video game companies and editorial websites such as Electronic Arts, Perfect World Entertainment, Modus Games, and MMORPG.com, and has served as the Community Manager for games like <em>Dungeons &amp; Dragons Neverwinter</em> and <em>Mass Effect: Andromeda</em>. He is the Creative Director and Lead Game Designer of <em><a target="_blank" href="https://www.entromancy.com/rpg">Entromancy: A Cyberpunk Fantasy RPG</a></em> and author of <em><a target="_blank" href="http://nightpathpub.com/books">The Nightpath Trilogy</a></em>. Find M. S. Farzan on Twitter <a target="_blank" href="http://www.twitter.com/sominator">@sominator</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ REST API cURL Post Request via Construct 3 GameDev Tool & AJAX Module ]]>
                </title>
                <description>
                    <![CDATA[ By Andreas Lopez Hello FreeCodeCamp Reader Community! This Tutorial is made as a little thought experiment but might have some merit for the one or other person. Please keep in mind that this plugin is making an example by adding a product via Const... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/rest-api-curl-post-request-via-construct-3-gamedev-tool-ajax-module/</link>
                <guid isPermaLink="false">66d45d99d62e921b49e02cb6</guid>
                
                    <category>
                        <![CDATA[ construct 3 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Ajax ]]>
                    </category>
                
                    <category>
                        <![CDATA[ curl ]]>
                    </category>
                
                    <category>
                        <![CDATA[ json ]]>
                    </category>
                
                    <category>
                        <![CDATA[ REST API ]]>
                    </category>
                
                    <category>
                        <![CDATA[ woocommerce ]]>
                    </category>
                
                    <category>
                        <![CDATA[ WordPress ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Sun, 23 Jun 2019 02:25:54 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/06/c3-woo-wp-banner.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Andreas Lopez</p>
<p>Hello FreeCodeCamp Reader Community! This Tutorial is made as a little thought experiment but might have some merit for the one or other person.</p>
<blockquote>
<p>Please keep in mind that this plugin is making an example by adding a product via Construct 3 Forms + REST API cURL Request to an existing WordPress + WooCommerce installation.</p>
</blockquote>
<p>The principles still are valid for other purposes you might have with the REST API, and I included the .c3p on the bottom of this tutorial. There are more elegant ways about feeding the arrays of information to the application, but this is a quick demo as proof-of-concept that I put together within 2 hours and felt like sharing it due to the lack of API and AJAX information for Construct 3.</p>
<p><strong>Here is the entire code in a single screenshot:</strong></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/06/c3-api-example.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Construct 3 Source Code Screenshot</em></p>
<h1 id="heading-the-code-broken-down-once-we-click-on-create-product-button">The Code Broken Down once we click on 'Create Product' button</h1>
<ul>
<li>productjson is an obligatory text field outside of the viewport on the layout.</li>
<li>productjson contains our entire payload data pre-formatted as json to allow the REST API to work properly.</li>
<li>The payload contains dynamically created content which are the forms in the layout such as product name, sku, price, etc.</li>
<li>The AJAX module that I renamed AJAX_Data will set the Request_Header to "Content-Type" with the value of "application/json", because the REST API via cURL request will utilize JSON.</li>
<li>The next AJAX_Data with the 'Post to URL' request will be our actual API request.</li>
<li>The Tag is merely a name which can be utilized for example to return the values of the request, in the example of my project - as debugging information.</li>
<li>The URL will start with your domain, i.e. 'https://www.example.com' The next part of the URL is the API request you would like to make, in our example as per WooCommerce documentation to add a product we need '/wp-json/wc/v3/products?'</li>
<li>Last but not least for the URL we need the consumer key and secret in this manner: 'consumer_key=&amp;consumer_secret='</li>
<li>The full URL looks like this: "https://www.example.com/wp-json/wc/v3/products?consumer_key=&amp;consumer_secret="</li>
<li>Next up is the Data. This is simple since we already have made a text box for this exact purpose. Simply refer to it here, in my example the Data will be 'productjson.Text'.</li>
<li>And at the very end, what type of Request. Since we are creating a product we will need 'POST', if we were to retrieve a product we would want a 'GET' request, see the respective documentation of the API you are using.</li>
</ul>
<h3 id="heading-c3p-file-download">.c3p File Download:</h3>
<p><a target="_blank" href="https://drive.google.com/open?id=16DKq5RJD5tCw57oZPruGk_mtTIAe-Um9%5B/url%5D">https://drive.google.com/open?id=16DKq5RJD5tCw57oZPruGk_mtTIAe-Um9</a></p>
<h1 id="heading-requirements-for-my-c3p-example">Requirements for my .c3p example</h1>
<ul>
<li>WordPress Installation with WooCommerce installed</li>
<li>REST API enabled and issued a consumer secret &amp; key</li>
<li>Replace my API secret and key example in the code</li>
<li>Uploaded an image in the media gallery within WordPress</li>
<li>Created a Product Category within WordPress/WooCommerce</li>
</ul>
<p>If you need a free WordPress environment to play around with, I used <a target="_blank" href="https://pantheon.io">https://pantheon.io</a>, under the free plan you can get 2 sandbox sites. Just make sure to install the WP-CORS plugin first and set allowed sites to '*' as seen in their documentation here:<br><a target="_blank" href="https://pantheon.io/docs/platform-considerations/#cors%5B/url%5D">https://pantheon.io/docs/platform-considerations/#cors</a></p>
<p><a target="_blank" href="https://wordpress.org/plugins/wp-cors/%5B/url%5D">https://wordpress.org/plugins/wp-cors/</a></p>
<h3 id="heading-api-source-information-amp-relevant-c3-documentation">API Source Information &amp; Relevant C3 Documentation:</h3>
<p><a target="_blank" href="https://woocommerce.github.io/woocommerce-rest-api-docs">WooCommerce REST API Documentation</a><br><a target="_blank" href="https://www.construct.net/en/make-games/manuals/construct-3/plugin-reference/ajax">Construct 3 AJAX Documentation</a><br><a target="_blank" href="https://jsonlint.com/">JSON Validator tool to verify if your JSON is properly formatted.</a><br><a target="_blank" href="https://www.construct.net/en/tutorials/rest-api-curl-post-request-2245">Original Tutorial I wrote on Construct.net</a></p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
