Reputation:
I am creating a Flash engine, and I have an Loader class. When I open the .swf file in a map it works, but when I open it on my server it doesn't. The HTTP Status returns a 200 so it means it has a connection but the Image does not display... How is this caused and how can I fix it?
package com.loading{
import flash.display.Loader;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ErrorEvent;
import flash.events.IOErrorEvent;
import flash.events.EventDispatcher;
import com.events.LoaderEvent;
import flash.media.SoundChannel;
import flash.events.HTTPStatusEvent;
public class Loader extends EventDispatcher {
public var returnImages:Array = new Array();
public var totalImages:int = 0;
public function Loader() {
}
public function LoadImage(path:String) {
var imgLoader:flash.display.Loader = new flash.display.Loader();
imgLoader.contentLoaderInfo.addEventListener(LoaderEvent.COMPLETE, loadImageComplete);
imgLoader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpError,false,0,true);
imgLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, error, false, 0 ,true);
imgLoader.load(new URLRequest(path));
totalImages = 1;
}
public function LoadImages(paths:Vector.<String>) {
totalImages = paths.length;
for (var i:int = 0; i<paths.length; i++) {
var imgLoader:flash.display.Loader = new flash.display.Loader();
imgLoader.contentLoaderInfo.addEventListener(LoaderEvent.COMPLETE, loadImageComplete);
imgLoader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpError,false,0,true);
imgLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, error, false, 0 ,true);
imgLoader.load(new URLRequest(paths[i]));
}
}
private function loadImageComplete(e:Event) {
returnImages.push(e.target.content);
if (returnImages.length == totalImages) {
dispatchEvent(new LoaderEvent(LoaderEvent.ALL_IMAGES_LOADED,0,totalImages,true));
} else {
dispatchEvent(new LoaderEvent(LoaderEvent.IMAGE_LOADED,returnImages.length,totalImages,true));
}
}
private function error(e:IOErrorEvent) {
dispatchEvent(new LoaderEvent(LoaderEvent.ERROR,0,0,e.text,true));
}
private function httpError(e:HTTPStatusEvent) {
if (e.status != 200) {
dispatchEvent(new LoaderEvent(LoaderEvent.ERROR,0,0,e.status,true));
}
}
}
}
And this is how it's loaded:
var lo:com.loading.Loader = new com.loading.Loader();
lo.LoadImage("http://s3files.core77.com/blog/images/Balloon-Tank.jpg");
lo.addEventListener(LoaderEvent.ERROR, error, false, 0 ,true);
lo.addEventListener(LoaderEvent.ALL_IMAGES_LOADED,loadImage, false, 0, true);
function loadImage(e:LoaderEvent) {
for (var i:int =0; i<e.totalPosition; i++) {
info.appendText("Loaded Image: " + i+"\n");
try {
var tempBitmap:Bitmap = lo.returnImages[i];
tempBitmap.scaleX = tempBitmap.scaleY = 2;
tempBitmap.alpha = 0.5;
addChild(tempBitmap);
} catch (error:Error) {
info.appendText("Catched Error: " + error.toString() + "\n");
}
}
}
function error(e:LoaderEvent) {
info.appendText("Error: " + e.currentString+"\n");
}
Upvotes: 0
Views: 273
Reputation: 12431
I think you're encountering a cross domain issue when you create a new Bitmap
from the loaded image and attempt to manipulate its scale
and alpha
properties. The quick fix would be to load your test image from the same server from which the SWF is hosted.
If you're interested in cross domain policies as they relate to Flash, you should read the (rather esoteric) Adobe documentation, in particular the section titled "Traversing the Display List".
Upvotes: 0