🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

Leaving Flash behind, where to next?

Started by
6 comments, last by spooch 8 years, 10 months ago

Hey there,

Sorry to be posting one of those recommendation requests, but I'm having a hard time here and would appreciate some information on my options here.

TL;DR;

I'm looking for tooling/coding suggestions for creating cross-platform games and apps

My needs...

- run-time asset loading
- vector graphics handling
- network communication
- data handling (JSON,XML,SQLite)
- runs native / Cross-compiles on desktop and mobile
- object oriented programming

I've been developing in AS2 then AS3 for a while now, and while I do still believe that there is space for this technology, I think it's time again to consider some other options going forward. I do have certain needs and wants for my next projects and would like to try something that can offer me something more than Flash has.

I've been using the Flash IDE with FlashDevelop, and it's worked very well for me. I create assets in Flash that have no code aside of 'stop();' and export into swc or swf depending on whether I'm creating runtime or compiled assets. Then in FD I build out all the code using proper coding practices (try to mostly).

Despite it working very well for me, there are some reasons that I"m looking to switch.

- Cross-platform deployment. AIR makes it very easy to compile for android or iOS, on paper that is. Once I started testing on different devices I started seeing weird visual issues, and found it incredibly difficult to debug, and ended up abandoning the project and ended up using CoronaSDK, which got me to a non buggy release within 2 weeks with 0 Lua/Corona experience. I believe the issue there with flash is that it relies on the AIR runtime on the devices, which adds bloat and runs interpreted code, whereas some other cross-platform frameworks/tools/libraries compile to native code and thus boast better performance.

- IDE not a level editor. The Flash IDE is one of the platforms biggest strengths. It has it's quirks, but for the most part it's a solid and intuitive program that allows someone that has no experience with it to be productive in almost no time. but.... I seem to have come up with some limits now that have become increasingly difficult to get around. As a level editor, I find it lacking; I often use it to generate maps with spacial and relational data. I would love to be able to place nodes on a map, and link them to generate paths. The problem is that while I can add nodes and add properties to them through the IDE, the ability to draw a line from one to the other and later have access on the relationship between them is not possible using the IDE. Doing this would require a custom tool, which is another step in the pipeline on top of having to create such a tool in the first place.

- Community & Adobe Dependence. Adobe hates Flash, they treat it like the black sheep of RIA that they're embarrassed of.The community has been withering, almost every AS3 developer that I followed moved on. There are a few holding out, but the writing is on the wall, it has been for a while.

What I've tried...

- Unity3D. I've tried several times to give it a go, but it just doesn't suit my way of developing. I don't like some of the imposed coding practices, having assets and code be too dependent, and find run-time asset loading complicated. I'm sure if I committed fully and learned more about unity, I could find a way to be more productive with it, but I'd rather see what else is out there, plus most of the stuff I do would use 2D or 2.5D, so a 3D first engine is an overkill.

- Corona SDK. I found it surprisingly easy to get going with, but it's limiting to me because it only does mobile, and I ended up using the Flash IDE for assets anyway, so it doesn't solve anything. But it is a handy, free, mobile-only solution that I'd use again, but only for a specific type of project.

- Unreal Engine. This was more of a quick dable, it's basically the same as Unity3D from my standpoint, so while the features may be different, the drawbacks as far as my needs go are pretty much the same.
- OpenFL/Haxe. For the time being, this looks like the most viable option. It cross-compiles for multiple platforms (unlike AIR) and would be very easy to port existing code to. However I would still need to create my own level editor. I've also found debugging difficult, but I think debugging any cross-compiled code is.
- JavaScript. HTML5 has a lot of community support, and it is starting to displace Flash as the de-facto way of creating browser games. The problem I find with javascript is that as a non-compiled language, it is very reliant on the run-time environment (the browser). I'm not targeting web games, and HTML5 packagers are much like AIR on mobile, and suffer a lot in performance. As far as IDEs go, there's still nothing that surpasses Flash IDE for creating content for javascript (luckily Flash does export to an increasing amount of formats which are js friendly)

There's a very handy list here http://stackoverflow.com/questions/17584717/2d-cross-platform-game-development-engines and after looking through the list, I find that the most likely candidate would be libgdx.
libgdx uses Java, which would be new to me, but seems like an easy enough switch. It seems to support vector graphics (vertex arrays), supports JSON and XML, and can be used with an IDE called Overlap2d. Overlap2D has custom variables (A feature that I've been using hacks to do in Flash), and it has a plugin API, so creating a waypoint/pathing plugin may be possible without building a custom tool from scratch.
If that doesn't work I may do a switch to Haxe/OpenFL and create the custom tooling, or use a creative coding library like Cinder++ or OpenFrameworks.
If you have any other suggestions, or feedback on any of the libraries/frameworks/tools, especially if you have experience with libgdx, would love to hear it.
Thanks for reading.

Advertisement
Many things that Flash does, nobody else does. Many things that Unity does, nobody else does. The same is true everywhere. You have to get used to re-learning idiomatic workflows when you move to new technologies.

I can't suggest any particular technology, because anything I suggest will still require you to deal with the painful adaptation process that everything has and everyone has to deal with.

I use another framework with haxe (Kha), but with OpenFL I know there is some integration with Flash IDE. Check this video:

For a level editor, you can use Tiled (it has support to draw vectors, and insert custom data), or yet Overlap2D, actually Overlap2D isn't a editor exclusive to libgdx, it's a editor that export to json and you can use in any game framework. I tested the last version and the export function isn't there yet, but will be in the final version.

http://www.mapeditor.org/

https://github.com/UnderwaterApps/overlap2d


- Unity3D. I've tried several times to give it a go, but it just doesn't suit my way of developing. I don't like some of the imposed coding practices, having assets and code be too dependent, and find run-time asset loading complicated. I'm sure if I committed fully and learned more about unity, I could find a way to be more productive with it, but I'd rather see what else is out there, plus most of the stuff I do would use 2D or 2.5D, so a 3D first engine is an overkill.

Assets and code be too dependent? That can be easily avoided. We use a strict approach where rendering and logic are entirely independent on our end. Also, Unity is also optimized for 2D (and has been for a few years). I do primarily 2D development using it.

I suggest you take a second look at the 2D tutorials: https://unity3d.com/learn/tutorials/topics/2d-game-creation

To be honest, if you're not the type who'll roll their own (simple, meets your needs) engine, then something like Unity or Unreal is probably your best bet. Given your exploration and your initial dislike of both, that's probably not news you want to hear, but its pragmatic advice as well as a marketable skillset. Having recently picked up Unity myself, and coming in as a Roll-your-own kind of guy, I get that doing something much differently than you're used to feels weird -- icky even. But every tool or engine has made its own philosophical choices somewhere and they're probably different than other tools that you're familiar with. At some point, you'll need to accept that reality and learn to see through these kinds of mostly-trivial differences.

I don't know how long you've spent on Unity, but even with quite a bit of experience in other methods its taken me awhile to figure out how Unity wants me to work, I still am finding things where I think I've hit a place of having to either roll my own component or accept some ugly compromise, only to get part way through implementing that before discovering the way Unity does that very thing -- not the way I would have thought to do it, perhaps, but in a way that's cohesive with Unity as a whole.

Another benefit to Unity and Unreal is that if you do feel the need to write a component, odds are someone is already selling it in the asset store, maybe even giving it away. And the community -- Unity really has one of the best communities, as well as first-party docs and tutorials.

My earnest advice to you is to take a break, set aside your expectations for the way things "should work", and spend some more time with Unity. Realize, also, that some of the quicker/smaller tutorials and sample projects don't necessarily demonstrate best practices for scalability -- even as easy as Unity can be, you can't cram in considerations for scaling development into a 2-4 hour tutorial series. The blogs of Unity-using indie devs are usually better for insight into that.

throw table_exception("(? ???)? ? ???");


- Unity3D. I've tried several times to give it a go, but it just doesn't suit my way of developing. I don't like some of the imposed coding practices, having assets and code be too dependent, and find run-time asset loading complicated. I'm sure if I committed fully and learned more about unity, I could find a way to be more productive with it, but I'd rather see what else is out there, plus most of the stuff I do would use 2D or 2.5D, so a 3D first engine is an overkill.

Assets and code be too dependent? That can be easily avoided. We use a strict approach where rendering and logic are entirely independent on our end. Also, Unity is also optimized for 2D (and has been for a few years). I do primarily 2D development using it.

I suggest you take a second look at the 2D tutorials: https://unity3d.com/learn/tutorials/topics/2d-game-creation

I recall from reading multiple sources that Unity in 2D is the same as 3D, but with the camera being restricted, and that even minimal or blank compiled projects have a big size.

I do often do generative graphics, and I recall from when I did do some work with Unity in the past, that I had a hard time drawing lines, and I don't recall there being a way to draw to a bitmap other than pixel-level APIs. I'm assuming that they've probably done some work on these sort of things when introducing the Unity as a 2D tool.


Unity in 2D is the same as 3D, but with the camera being restricted, and that even minimal or blank compiled projects have a big size.

There are standalone physics for 2D, which strangely work better collision-wise, and the support for sprite over actual meshes is great (and simpler to use). The camera is orthogonal, which aside from restricting the viewport also works well with draw order instead of Z axis which removes a lot of management from the transform and back into rendering (as it should).

There's a lot you can do to draw 2D elements on-screen now.

I'd give it a second shot :)

I'd give it a second shot smile.png

Do you know if I can do run-time assets with Unity? I haven't found a way to do that in the past, but I think there should be a way to do that

Ooops, that was an easy one to google....

http://docs.unity3d.com/Manual/LoadingResourcesatRuntime.html

This topic is closed to new replies.

Advertisement