Search code examples
flashhaxehaxeflixel

Haxe projects only shows blank Flash Player


I'm getting started using Haxe. After going through all of the setting up, I should be all ready to go, but when I run any project it opens a Flash Player with a blank screen. No preloader, not text, just a screen of whatever color is specified in the Project.xml.

I've spent the day looking for a solution but no luck yet.

  • I've double checked to make sure everything is up-to-date.

  • I have run the project from multiple IDEs and command line.

  • I have tried running my own projects, demos, HelloWorld, etc.

  • Other Flash projects run fine. I'm only having this problem with Haxe projects.

Everything produces the same result: A blank Flash Player.

Having spent this much time looking for a solution, I'm almost positive it has to be something extremely stupid that I'm overlooking.

Here's the Project.xml:

<?xml version="1.0" encoding="utf-8"?>

<app title="HelloWorld" file="HelloWorld" main="Main" version="0.0.1" company="HaxeFlixel" />

<!--The flixel preloader is not accurate in Chrome. You can use it regularly if you embed the swf into a html file
<!--or you can set the actual size of your file manually at "FlxPreloaderBase-onUpdate-bytesTotal"!-->
<app preloader="flixel.system.FlxPreloader" />

<!--Minimum without FLX_NO_GAMEPAD: 11.8, without FLX_NO_NATIVE_CURSOR: 11.2 -->
<set name="SWF_VERSION" value="11.8" />

<!--------------------------------WINDOW SETTINGS------------------------------->

<!--These window settings apply to all targets-->
<window width="640" height="480" fps="60" background="#000000" hardware="true" vsync="true" />

<!--Web-specific-->
<window if="web" orientation="portrait"  />

<!--Desktop-specific-->
<window if="desktop" orientation="landscape" fullscreen="false" resizable="true" />

<!--Mobile-specific-->
<window if="mobile" orientation="landscape" fullscreen="true" width="0" height="0" />

<!--------------------------------PATHS SETTINGS-------------------------------->

<set name="BUILD_DIR" value="export" />
<classpath name="source" />
<assets path="assets" />

<!--------------------------------LIBRARIES------------------------------------->

<haxelib name="flixel"/>

<!--In case you want to use the addons package-->
<!--haxelib name="flixel-addons" /-->

<!--In case you want to use the ui package-->
<!--haxelib name="flixel-ui"/-->

<!--In case you want to use nape with flixel-->
<!--haxelib name="nape" /-->

<!--------------------------------HAXEDEFINES----------------------------------->

<!--Enable the Flixel core recording system-->
<!--haxedef name="FLX_RECORD" /-->

<!--Disable the right and middle mouse buttons-->
<!--haxedef name="FLX_NO_MOUSE_ADVANCED" /-->

<!--Disable the Native cursor api for Flash target-->
<!--haxedef name="FLX_NO_NATIVE_CURSOR" /-->

<!--Optimise inputs, be careful you will get null errors if you don't use conditionals in your game-->
<!--haxedef name="FLX_NO_MOUSE" if="mobile" /-->
<!--haxedef name="FLX_NO_KEYBOARD" if="mobile" /-->
<!--haxedef name="FLX_NO_TOUCH" if="desktop" /-->
<!--haxedef name="FLX_NO_GAMEPAD" /-->

<!--Disable the Flixel core sound tray-->
<!--haxedef name="FLX_NO_SOUND_TRAY" /-->

<!--Disable the Flixel sound management code-->
<!--haxedef name="FLX_NO_SOUND_SYSTEM" /-->

<!--Disable the Flixel core focus lost screen-->
<!--haxedef name="FLX_NO_FOCUS_LOST_SCREEN" /-->

<!--Disable the Flixel core debugger. Automatically gets set whenever you compile in release mode!-->
<haxedef name="FLX_NO_DEBUG" unless="debug" />

<!--Enable this for Nape release builds for a serious peformance improvement-->
<haxedef name="NAPE_RELEASE_BUILD" unless="debug" />

<!--------------------------------CUSTOM---------------------------------------->

<!--Place custom nodes like icons here (higher priority to override the HaxeFlixel icon)-->

FIX: Windows had a different default player for .swf files. I changed this to the correct version and everything works fine.


Solution

  • There are a couple of things causing this:

    1. FlashDevelop using the incorrect Flash player.
    2. FlashDevelop's invocation of the Flash player passes a "/c" command-line argument that the Flash Player Projector stand-alone player doesn't like.

    Here's how to make it work:

    1. Download the Flash Player Projector content debugger from https://www.adobe.com/support/flashplayer/downloads.html. Be sure to get the debugger version. It can be a little confusing; at the time I downloaded, it was the link that says "for Netscape-compatible browsers" even though it's a stand-alone executable. The file I downloaded is called flashplayer_14_sa_debug.exe. Put this file in a handy location.

    2. In the same place where you stored the debug player, create a new batch file called play.bat and make its contents as shown below. Put in the correct Flash Player Projector executable name if yours differs from flashplayer_14_sa_debug.exe (the part after %~dp0):

      @"%~dp0flashplayer_14_sa_debug.exe" "%2"
      
    3. In FlashDevelop, we'll now tell it to use play.bat as its Flash player. From the Tools menu, select Program settings..., then select the FlashViewer item under Plugins. On the right side of the pane, click in the path area of External Player Path and then click the ellipses (...) button to browse for a player. Find the play.bat file you created in the step above, then click the Open button. Then Close the dialog box.

    FlashViewer settings page

    You should now be able to play and debug from FlashDevelop. The key is the use of play.bat to take out the "/c" option that FlashDevelop tries to pass to the Flash Player, which is what causes the blank screen.