Custom Component Crashes Flash CS4 (and how to fix it..)

By now some of you are probably familiar with Crash Flash CS4′s bad crashing habit.

The majority of these crashes can be fixed with the 10.0.2 Hotfix, but I was consistently seeing one that the update didn’t fix.

On Mac OS 10.5.8, with Flash CS4 10.0.2, Flash would crash anytime I tried to add a custom component I had built and put in the Components library. I have been developing and using this component for almost 4 years, and had never seen this problem before.

I tried every fix that Google had to offer, including dumping fonts, resetting flash, deleting preferences, re-building the component, and nothing worked. Every time I tried to add that component to my Flash file, it would crash without fail. (Or maybe with fail, since it was, after all, crashing….)

I was going through everything, trying to figure out what the problem could possibly be, and I noticed that in the component’s FLA file, there was an entry that was nothing but a period underneath the other folder locations.

That one little dot can crash Flash


Removing that period and re-exporting the SWC solved the crash problem.

, , , ,

Leave a Comment

Technorati Claim

New Blog URL (Again) so here’s another attempt to do a Technorati claim

GHKZ5CMBQMQW

Leave a Comment

Another new year, another new post about how I’m back

I’ve actually paid money to get the blog back up and running this time. Expect more updates!

Leave a Comment

Google Reads Flash

Lately, this blog has been less about Flash and more about me apologizing for it not working.

So here’s an interesting article about Flash and SEO:

Google Reads Flash Text, so Optimize It

This is a huge step in the right direction for Flash. For many years, one of the biggest arguments against Flash was its unreadability to search engines. And really, that was one of the few remaining arguments with any merit.

Now, while I think this is a big win for Flash, I also believe it will be a few years before this makes any difference. Existing Flash sites with no SEO will have to be rebuilt, and sites built by less experienced developers will still probably avoid this altogether.

Also, please note the feed URL has changed.. it’s now http://nerdabilly.com/blog/feed/. I think the GoDaddy ads may be breaking it though so I am searching a more stable solution.

Leave a Comment

And, we’re back!

I hope.

Hosting and maintaining this blog has proven to be quite a challenge but this latest go-round should at least provide some stability.

Leave a Comment

SHOUTCast, SHOUTCast, Let It All Out

These are the things I could do without.

For the past couple of months, I have been working on a SHOUTCast player app in AIR. When I signed on to do the project, I had absolutely no idea that playing SHOUTCast streams in Flash is a Herculean task. It seems there’s this nagging little memory leak related to Flash loading a never-ending audio stream. Flash doesn’t release the memory for the audio already played, and eventually that audio data just builds and builds and builds until your CPU or memory maxes out. So far, I have found little to nothing in the form of a nice quick solution to this.

That being said, perhaps the most viable current solution was posted at MadArco’s DevBlog . It basically entails streaming the audio for 20-30 minutes, then recreating the audio stream in a new variable, and crossfading the two streams, at which point the original can be released from memory and garbage-collected. It’s a nice idea, but in CS3, after the first couple of swaps, I lost sound altogether, and this problem re-occured no matter which “swapping” method I attempted. MadArco’s solution is in AS2, and perhaps I lost something along the way while attempting to convert it to AS3, or perhaps AS3 isn’t able to handle this particular method.

There’s also a nice explanation of the “swapping” concept here.

So, after even more research (by “research” I mean thinking of new ways to search for a solution in Google) I found a post on FlashBrighton about generating audio and PCM wave data. I also found this on ActionScript.org, about using PHP to create a socket connection to read ID3 tags.

See where I’m going with this?

I’m proposing an all-in-one memory-leak-and-ID3-problem fix ShoutCast solution for Flash. Here’s my thoughts on it so far:

1.) Use Socket for getting the ID3 data, and, if possible, getting the stream as well.

2.) Use the FlashBrighton wave-data solution to create the audio from the ByteArray returned by the MP3 stream. This is possible using the URLStream class.

3.) Distribute it as a component or nice reusable class in order to allow beginners to use it easily.

I made some attempts at this yesterday, but the bytecode stuff is way over my head. If anyone has any input, or would like to have a go at this, please leave a comment and let me know what you think!

, , , , ,

2 Comments

now requiring user registration and login

I know there has been problems with this before, but the amount of spam I’m getting on a nearly hourly basis has gotten to be too much.

From now on, users must register before adding comments to a post. I’m not going to steal, sell, or otherwise misuse your information, this is strictly a spam-busting measure.

Initially, some users had problems with registering, so please contact me if you experience any problems.

thanks.

-nerdabilly

Leave a Comment

Disabling the FLVPlayback component’s controls (including seekbar!)

I’ve stumbled on another one of those “everyone wants to do it, but nobody knows how” issues in Flash: how to disable the controls on the FLVPlayback component.

After quite a bit of documentation-reading, web-searching, and forum-browsing, I’ve come up with a function for easy, on-the-fly toggling of controller-enable-ability.

with a FLVPlayback instance on the stage, add the following to your ActionScript:

 mx.video.FLVPlayback.prototype.enableButtons = function(bEnabled:Boolean){
this.skin_mc.seekBar_mc.handle_mc._visible = bEnabled;
if(bEnabled){
this.stopButton =this.skin_mc.stop_mc;
this.backButton = this.skin_mc.back_mc;
this.forwardButton = this.skin_mc.forward_mc;
this.seekBar = this.skin_mc.seekBar_mc;
}else{
this.onEnterFrame = function(){
this.stopButton = this.skin_mc.stop_mc.disabled_mc
this.backButton = this.skin_mc.back_mc.disabled_mc;
this.forwardButton = this.skin_mc.forward_mc.disabled_mc;
this.seekBar = null;
updateAfterEvent();
delete this.onEnterFrame;
}
}
}

Now, for a bit of explanation:

The first step is to simply toggle the visibility of the SeekBar handle. With it invisible, there is no way the user can use it, and this seems to be the simplest solution, rather than digging through the MC structure of a component skin and figuring out how that handle is, uh, handled. So, the bEnabled value can double as the visibility value for the handled: true (visible) for enabled buttons, or false (invisible) for disabled.

For the rest of the buttons, it’s not so simple. Users have come to expect a “ghosted” or “grayed-out” appearance for a disabled button, so simply removing them as we did with the scrollbar handle would be bad form. Luckily, the pre-made skin SWFs for the FLVplayback component include disabled states for everything, and we can use these.

Because the component skins use bitmap caching and 9-slice scaling to maximize their flexibility, simply setting the button properties to the disabled MC won’t work, and it requires a bit more of a brute-force approach to get those buttons to appear. Hence, the onEnterFrame and updateAfterEvent() commands. updateAfterEvent() forces an update of the stage, so it will make those disabled-states appear, but it only works as part of a clip event, such as onEnterFrame. So we wrap the whole thing in an onEnterFrame, and then delete the onEnterFrame function to save on processing and memory.

I should note that I developed this using the SteelExternalAll.swf skin. The documentation indicates that the skins are built using a universal structure, so it should work for any of them, but I’m not making any promises.

, , , ,

6 Comments

Customing icons on the Flash 8 Tree Component

Back to one of my favorite topics – UI Component customization. Flash’s Tree Component provides a Windows Explorer-like hierarchical menu for displaying data in a “folder” structure.

The structure it displays uses 2 separate icons, a “folder” icon for folder nodes, and a “disclosure” arrow for opening and closing the folders.

To see an example of this, place a tree component on the stage and give it an instance name of “myTree.” Then, use the following loops for some dummy data in the tree:

for(i=1;i

The Tree Component Documentation lists various styles that can be set on the component, and it seems that these properties work without first installing a theme.

I’m not sure the exact reason for this, but the component seems to want to open and close folders based on clicking the “disclosure” arrow, not the folder icon.

So, what if you wanted one icon only? For this example, I’ll use the +/- metaphor that the Windows registry and some other apps use. first, create your “plus” and “minus” movie clips, and give them linkage IDs of “plus” and “minus”, respectively.

Then, use setStyle to apply these to the tree:

myTree.setStyle("disclosureOpenIcon","minus");
myTree.setStyle("disclosureClosedIcon","plus");

This turns the disclosure arrows into plus an minus signs, but the cliché folders are still there:

tree_plusd_w_folders.gif

The solution is to create a blank movieclip and set it as the folder icon. To do this, create a new MovieClip symbol and give it a linkage ID of “blankicon.” Then, add the following to assign the empty icon:

myTree.setStyle("folderOpenIcon","blankicon");
myTree.setStyle("folderClosedIcon","blankicon"); 

And there you have it…

tree_plusminus_final.gif

, , ,

Leave a Comment

Apologies

Sorry for the XML parsing errors in the feed and the general slowness of the site. After a lot of back-and-forth with my web host, we determined that the issue was temp files clogging up the cache. I deleted nearly 200,000 files and it seems to run well again!

Leave a Comment

Follow

Get every new post delivered to your Inbox.