I have a function that adds thumbnail images to a scrollPane via xml. This xml also contains the url of the larger images of the thumb. The images are different rooms, kitchen, bath and so on. When my application launches I need to have a large room image loaded but not visible until I click on menu tab I call Room Scene.
I thought I could do it like this but I get an 1067: Implicit coercion of a value of type String to an unrelated type flash.display:DisplayObject.
//add the default large room
roomPic = “rooms/bedroom_1.png”
roomContainer.addChild(roomPic);
I would like to add the default room image when my xml loads but I am not sure how to accomplish this. I hope this is clear.
//create a container to hold the large room images
var roomContainer:MovieClip = new MovieClip();
//create a movie clip to hold the rooms thumbs
var roomMC:MovieClip = new MovieClip();
addChild(roomMC);
// add a ScrollPane for the room thumbs
var roomPane:ScrollPane = new ScrollPane();
roomPane.setSize(375, 110);
roomPane.move(10,450);
roomPane.addEventListener(Event.COMPLETE, completeHandler);
addChild(roomPane);
// set up XML loader to load the room thumbs
var roomsXML:XML;
var roomsXMLLoader:URLLoader = new URLLoader();
roomsXMLLoader.addEventListener(Event.COMPLETE, xmlRoomsLoaded, false, 0, true);
roomsXMLLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false,0,true);
roomsXMLLoader.load(new URLRequest("Rooms.xml"));
function xmlRoomsLoaded(event:Event):void {
try {
roomsXML = XML(event.target.data);
roomsXMLLoader.removeEventListener(Event.COMPLETE, xmlRoomsLoaded);
roomsXMLLoader.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
for each (var room:XML in roomsXML..room) {
var roomPic:String = room.roomImage.toString();
var roomThumb:String = room.roomThumb.toString();
var roomCaption:String = room.roomLabel.toString();
trace(roomPic);
//trace(thumbCaption);
//load thumbimage
var roomloader:Loader = new Loader();
roomloader.load(new URLRequest(roomThumb));
roomloader.x = rx+10;
roomloader.y = ry+10;
//make each thumb a button
roomloader.addEventListener(MouseEvent.CLICK, addRoom, false, 0, true);
//This is now the URL of the room image
rmPictures[roomloader] = roomPic;
//add the default large room
roomPic = "rooms/bedroom_1.png"
roomContainer.addChild(roomPic);
//set text up for captions
var roomText:TextField = new TextField();
var rmformat:TextFormat = new TextFormat();
rmformat.font = "Arial";
rmformat.size = 12;
rmformat.kerning = 0;
//format.align = TextFormatAlign.LEFT;
roomText.defaultTextFormat = rmformat;
roomText.text = roomCaption;
roomText.autoSize = TextFieldAutoSize.LEFT;
roomText.x = rx+10;
roomText.y = ry+75;
roomMC.addChild(roomText);
roomMC.addChild(roomloader);
roomMC.buttonMode = true;
rt = 80;
//set spacing for captions
rx = rx+rt+space;
}
} catch (err:Error) {
trace("Could not parse loaded content as XML:
" + err.message);
}
roomPane.source = roomMC;
}
//create a movie clip to hold the progress bar and text
var barContainer:MovieClip = new MovieClip();
addChild(barContainer);
barContainer.x=300;
barContainer.y=250;
//create text field
var percent:TextField = new TextField();
var percformat:TextFormat = new TextFormat();
percformat.font = "Arial";
percformat.size = 12;
percent.defaultTextFormat = percformat;
percent.autoSize = TextFieldAutoSize.LEFT;
percent.x=40;
percent.y=20;
barContainer.addChild(percent);
// add room image to the viewport
function addRoom(event:MouseEvent):void {
//trace(rmPictures[event.currentTarget]);
var rmloader:Loader = new Loader();
rmloader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop, false, 0, true);
rmloader.contentLoaderInfo.addEventListener(Event.COMPLETE, done, false, 0, true);
rmloader.load(new URLRequest(rmPictures[event.currentTarget]));
rmloader.x = 0;
rmloader.y = 0;
//remove all the contents BEFORE adding a new one.
while (roomContainer.numChildren) {
roomContainer.removeChildAt(0);
}
roomContainer.addChild(rmloader);
colorText.alpha = 0;
}
function loop(event:ProgressEvent):void {
//create progress bar
var loadBar:MovieClip = new MovieClip();
var barColor:Number = Number(0xCCCCCC);
loadBar.graphics.lineStyle(1, 0xCCCCCC);
loadBar.graphics.beginFill(barColor);
loadBar.graphics.drawRect(0,0,100,10);
loadBar.graphics.endFill();
loadBar.width=1;
barContainer.addChild(loadBar);
var perc:Number = event.bytesLoaded / event.bytesTotal;
loadBar.scaleX=perc;
percent.text = Math.ceil(perc*100).toString() + "%";
}
function done(event:Event):void {
removeChild(barContainer);
myContainer.x =1000;
gotoAndStop("scene");
}
roomScene.addEventListener(MouseEvent.CLICK, showRoom, false, 0, true);
function showRoom(event:MouseEvent):void {
myContainer.x =1000;
gotoAndStop("scene");
}