-
Notifications
You must be signed in to change notification settings - Fork 450
Flixel 5.0.0 Migration guide
Flixel 5.0.0 is the first major update to flixel since 2016. Since then, we've added many new features without messing up existing games but if you want to make a great game engine, you need to make a few breaking changes. In order to keep major version updates to a minimum, we ended up stock-piling a large list of fixes and features. This guide will help you utilize them in your existing Flixel 4 games.
- If you're project is using an older version than 4.11, it might be a good idea to try 4.11 before grabbing the latest haxelib
- Be sure to check out the changelog for a quick overview of every change that was made
Alpha (all 5.0.0-alpha changes)
The latest release is actually an 5.0.0-alpha, because we still have a few more major features to implement in the very near future. Even though things may change, soon, we wanted to get our current changes and features out there. People don't seem to use the git version of haxelibs and we've spent a considerable amount of time pointing 4.11 users to existing solutions for old flixel problems.
We encourage everyone to upgrade to the alpha and test out all the new features. Things are still changing but everything should be pretty stable. This page will continue to update as major updates are added, each release will have it's own section until all of the major changes for 5.0.0 are officially finished.
New Default Save Location #2566
The old default args for FlxG.save.bind
were ("flixel", null)
where null would be replaced with the full url or file path to the application. This created issues where releasing updates could create a new save path. The new args are generated from your Project.xml's file
and company
metadata, respectively. Game's will automatically look for the legacy save file, and migrate the data over to the new save if it exists.
You can also specify your own desired save path for FlxG.save
, just call FlxG.save.bind("mySaveName", "mySavePath");
before instantiating your FlxGame
and it will be used by flixel, internally, to save and load sound, window and debug preferences. Previously the default save would overwrite this value when the FlxGame is initialized
Collisions Preserve Momentum #2422
Collisions with FlxG.collide
between objects of different masses used to flip out and act strangely, this is now corrected. This is still a breaking change, however, and anyone depending on the old system should be aware. For instance, any game using FlxReplay
to replay player runs with collisions using objects of different mass or elasticity will have invalid replays on the new system. To keep the Flixel 4.0 collision physics on a Flixel 5.0 game you can use the compiler constant FLX_4_LEGACY_COLLISION
.
Angles at 0˚ Point Right, Not Up #2482
There used to be some inconsistencies regarding angles, almost every math utility would point right at 0 degrees, but not everywhere. Notably FlxSwipe
and FlxPath
treated 0 degrees as up. If you're using a FlxPath
on a sprite with autoRotate
enabled, you'll need to change your sprite to face right at 0 degrees. (actually wait, I should make an offset property to solve this more easily)
FlxVector is Dead, All Hail FlxPoint #2557
It seemed silly to have 2 separate 2d position classes, so we took every method in FlxVector
and moved them all to FlxPoint
. FlxVector
Still exists, but it's been reduced to a deprecated typedef of FlxPoint
. Not many devs knew FlxVector existed, so hopefully this will expose more devs to cool features like length
and degrees
getter/setters, or math helpers like dotProduct
and bounceWithFriction
.
As a bonus, we've also added math operators, like +
, +=
, -
, -=
, *
and *=
.
AssetPaths has less caveats #2575
AssetPaths (or any class built using FlxAssets.buildFileReferences
) will no longer throw an error when two files have the same file name. Now it will give a warning and ignore whichever file is nested more deeply in the folder, or whichever file was found later.
The filterExtensions
arg was removed and replaced with include
and exclude
args. These new args can either be an EReg
, or a wildcard string, similar to openfl's project.xml args. For example to exclude everything in a folder called "test", as well as any .psd files, you would either use "*/test/*|*.ase"
or ~/\/test\/|\.ase/
.
Lastly, the rename
arg was changed, significantly. Custom renaming is already a relatively new and unknown feature of AssetPaths, but now it may be the most powerful! The rename
arg is a function that will take a filepath (a relative filepath from the project.xml) and returns a field name used to access that path. The previous versions there would be no way to include two files with the same name, for instance, "assets/images/mario/walk.png" and "assets/images/luigi/walk.png" wouldn't be allowed, now you can call them mario_walk.png
and luigi_walk.png
. Additionally, you can return null
to exclude a specific file.
A simple change, but could impact your projects, in addition to adding a NONE value, FlxAxes is now an Int
abstract that uses bit flags.
var X = 0x01;
var Y = 0x10;
var XY = 0x11;
var NONE = 0x00;
This means you can't use of the match
method anymore, but checks like if (axes.match(X | XY))
can be replaced with if (axes.x)
.
If you would like your game to have a large pixel size, simple set width and height to a fraction of your window size, defined by your Project.xml. for instance, in 4.11 if your FlxGame constructor was:
new FlxGame(
stage.stageWidth / 2, // width
stage.stageHeight / 2, // height
MenuState, // initial state
2, // zoom
60, // update framerate
60 // draw framerate
);
Just remove the zoom property, like so:
new FlxGame(
stage.stageWidth / 2, // width
stage.stageHeight / 2, // height
MenuState, // initial state
60, // update framerate
60 // draw framerate
);