Direct all errors to a textfield - actionscript-3

I am developing a Flash game. It has a complex loading scheme which could go wrong at many different places.
When I am testing from Authoring Tool, either with "Test Movie" or "Debug Movie", it always succeeds and starts fine.
However, every time I test it by loading it in a browser, it always fails! I am not sure where to look.
The question is this : is there an easy way to direct all internal errors to a TextField on Stage where I can really check what went wrong? Alternatively, is there any other way to catch and show errors when testing on a browser?

Debug player is a must. It allows you use breakpoints and view your application state (like values of variables and so on) at runtime (if you are using an IDE with a debugger, like Flash Builder ofc). Viewing traces in console window is quite annoying, though, so you can use some external debug utility, for example Monster Debugger. It has some nice features, like highlighting MovieClips (and other DisplayObjects) at runtime.

You can use UncaughtErrorEvent to intercept all internal uncaught errors of a swf through a method.

The best way is to install the debug flash player. There is no way that I know of to direct internal errors anywhere. Apparently there is, see other answer. It's still probably easier to install the debug player however.
You can get the debug player from http://www.adobe.com/support/flashplayer/downloads.html (scroll down a bit).
As for the error itself, there are two common reasons:
If the files are hosted elsewhere, you need a crossdomain file set up
The base url of the flash file is not where you think it is, and thus any relative paths fail to resolve correctly.

Related

AIR Build Server Setup

I am at the point where I am running into incredibly long build times for my project and more projects to come. I would like to make a build server but I have not had any experience with them aside from downloading files from them as an end user.
My ideal setup is this: A GitHub where I can place my .fla file, classes and ANEs. The server sees this, compiles it, and allows me to test it remotely or hook into some debugger that lets me see stack traces and active variables at breakpoints and errors like Adobe Animate or Flash Builder.
Now I see there are GitHub plugins for Jenkins. I see there are questions referring to how to set one up with Flex/AIR. I come here with a few issues.
I am too far into my project to switch over from using Animate to something like Flash Develop or anything ADT related. The only thing I have found is how to take existing elements from my library in Animate and have them in a .swc for handling. However, this doesn't let me access existing elements in the Timeline and would rather not try to export/position/handle them in code (which is the only workaround that I see if this is not possible)
I run ANEs that are dependent on Google Play services and other Android specific libraries. Thus, I haven't been able to use the standard mobile debug launcher for AIR. I see Jenkins has some specific abilities for Android. Is it possible to somehow use this to give me a proper window for testing? I am thinking that I would need to run their emulator after compiling everything but I am unsure if there is a more efficient method or if it would even work.
I have never worked with Jenkins before or any other tools capable of automating tasks. Any step by step explanations is appreciated if you have the time.

Could not load scene into memory. Your document may be damaged

today I opened my flash project in CS6 and after it opened in the output I receive this message: "Could not load scene into memory. Your document may be damaged." The only problem I saw was the flash component (textInput, and button) that I use for my project. They was transformed smaller and I can select them. :-o And the problem is that try to open the previous version of the project and I found the same error. I think the only problem is FLASH COMPONENT. How can I make everything like it was (flash component). Is something about library ?I saw in library the TextInput are appear like symbol of component (3cubes).
Thank you for help!
Possible causes / solutions:
Your .fla was originally authored on a computer with a different operating system. Try opening it on the computer it was created.
Your .fla might have been made with a different version of Flash. Make sure you are opening it in the same version of Flash.
Your .fla might have been corrupted. If you look in the folder and it says the file size is something like 7kb, then your .fla file is seriously corrupted. Hopefully you have backups if this is the case.
Unfortunately it doesn't work in some fast way so I had to change all my flash components in the library. After I changed, the new components was looked also strange. But I didn't receive that error again and I can go ahead with my project now. Thank you anyway...

How to detect Flash runtime errors?

I'm developing an AS3 application with the commandline tools from the Flex SDK. My workflow is:
write code
compile with mxmlc
run the SWF file in favorite webbrowser
repeat
The second step catches compile-time errors, but what about run-time errors and warnings? And trace() output? How can I see that?
I'm not using any IDE with debugging capabilities.
Get the debug version of the Flash player and Firebug for Firefox, then you can see the traces and errors in the console.
When a run-time error occurs that isn't caught by an exception handler you will get a popup telling you about the error.
Why not get http://www.flashdevelop.org/? It's free and it has debugging, profiling and all other goodies you can expect from an IDE.
Although the Flash debugger is a pretty good choice. I would personally suggest Monster Debugger. It is a great debugger with a very intuitive user interface and it has a plethora of features that make debugging extremely easy.
Flash player debugger writes the output of trace() to the flashlog.txt file. Its location is hardcoded and is different on different systems. On Linux it is in ~/.macromedia/Flash_Player/Logs/flashlog.txt. In order to have The debugger to actually write into that file, you need yet another file, mm.cfg, it's location and name are again hardcoded. It should be in ~/mm.cfg. It may contain many different options, but the one you are interested in is ErrorReportingEnable=1.
You may then $ tail -f ~/.macromedia/Flash_Player/Logs/flashlog.txt to see the progress as the file is been written to.
Note that the directory and the file must be writable by the user running the player. Flash player will not issue any warnings if that is not the case, and will fail silently.
Also note that if you are happened to be on Linux, then there isn't a 64-bit version of a debugger player... However, the player runs fairly well under Wine, the Windows version that is.
You may debug using commandline debugger found in SDK. it's called fdb (fdb.exe or in Apache Flex fdb.bat on Windows). It has similar to gdb interface, can do breakpoints, some runtime code evaluation, disassemble functions, look up stack frames and their variables and most of the other stuff you'd expect a debugger to do. I'm usually running it from Emacs, but I would imagine that running it from Vi[m] or whatever editor you are using shouldn't be a problem...
If you were using Emacs, it is actually possible to hook up Flymake to a part of the SDK that does syntax checking while you type. You can find more info on how to do that here: http://www.flashdevelop.org/community/viewtopic.php?f=13&t=9238 (thanks Philippe).

Does my AS3 project need a preloader?

I'm just starting to develop an AS3/MXML application on Linux using the command-line Flex 4 compiler. When running mxmlc -source-path=. MyApp/Main.as, I get the following warning:
/home/andreas/projects/as3/MyApp/src/MyApp/Main.as: Warning: This compilation unit did not have a factoryClass specified in Frame metadata to load the configured runtime shared libraries. To compile without runtime shared libraries either set the -static-link-runtime-shared-libraries option to true or remove the -runtime-shared-libraries option.
Another SO answer says that the solution is to link to my preloader. I don't think my project needs a preloader as it's pretty small; can I just ignore the warning?
You should make a preloader, even if your file is pretty small.. the best if you have a preloader, because what's if the user has a very slow internet connection? Or lost the connection while loading.
If your project is really small (like less than a megabyte) and you don't think it will be used widely, a preloader isn't completely necessary. As Zhafur said people with a slow connection such as dial-up might be confused for a while but even so, small apps shouldn't take too long.
However, if you can be bothered, a preloader is probably a good choice for any Flash app embedded in a web page. And if it's small, you don't need anything fancy, just a simple percentage count would do the trick.

AS3 Embedding assets - "Warning: Failed to parse corrupt data"

I've got an AS3 project where I'm trying to compile in several images, a soundtrack, and a video via [Embed] metadata. It's a product requirement that these be embedded, so network transfer is not an option.
I'm getting some really strange behavior - a sort of intermittent corruption of the compiled-in data. Sometimes after the project compiles, I run the swf and it closes immediately and writes "Warning: Failed to parse corrupt data" to the flash log. If I delete the binary and clean the project, sometimes it'll run fine after building it again. Sometimes it doesn't.
This is probably the strangest part about this problem, but sometimes when I see that error, I can physically move the video [Embed] lines to the end of the file, then clean the project, and it will build and run no problem. Sometimes I move them back to the beginning of the file and it builds and runs fine.
It kinda seems like it might be a bug in the compiler. Has anyone else experienced something similar? I'm targeting Flash 10.1 and using sprout (http://projectsprouts.org) to build my project. This is the mxmlc line that's being used to compile (mxmlc Version 4.1.0 build 16076):
mxmlc -as3 -static-link-runtime-shared-libraries=true -debug -default-background-color=#ffffff -default-size 712 400 -output=bin/ProjectName.swf -source-path+=.preprocessed/src -source-path+=.preprocessed/assets .preprocessed/src/ProjectName.as
I've tried both removing the -debug compiler option and adding the -optimize option, but no luck.
Everything is being ran through the GNU C preprocessor for some other tasks, so maybe I'll try removing the preprocessor stuff and hardcoding those variables...I'll try that and post the results tomorrow.
Any insight at all would be much appreciated. Thanks!
EDIT:
This project is going to be compiled dynamically with different assets being embedded into the same codebase, so switching to something like Flash Builder for compilation really isn't an option...it must be done via command-line mxmlc.
UPDATE:
Turns out the corrupted data message was due to images created with Photoshop's "Save for web" feature. If I save them outright as PNG images I don't get the message. However, the intermittent nature of the movie compiling properly still seems to be an issue. Now sometimes when the project is compiled it won't throw any compiler errors, but I get a blank flash player window. Right clicking in flash player shows a context menu with a message that says "Movie not loaded..." This doesn't appear to have anything to do with things being ran through CPP first.
[Screenshot]
This is apparently a bug in mxmlc under Mac OS X. After posting this, I observed some other really strange behavior, so I switched the whole codebase to Windows 7. Everything works as expected there (still using Project Sprouts as a build tool).
Flash builder is fine with it.
Can you separate your issue for video or music only, or issue is true for both includes?