我希望有人能帮助我。我的任务是在actionscript3(AIR)中编写一个聊天引擎,每个聊天消息都有一个与之相关的海报图片。所以我在任何时候在屏幕上都有5条聊天消息,但显然与消息相关的图像例如因为最后一位发布者不同,所以#1总是在变化。更改闪存中的位图图像
我认为是错误的是每次我需要替换图像时使用.addChild方法,因为它只会在舞台上创建更多东西。我试图做的是下面的代码,但它拒绝更新图像。的方式我认为它应该工作:
1号线 - 创建被添加到“this.ChatLine”
当下一个图像进来2号线电影类图像 - 是假设覆盖“ImageBitMap “与新的图像数据,但这一点不工作。
1 - this.ChatLine:bmChatImage = new mbChatImage();
2 - this.ChatLine.LoadChatImage("NewImage.png");
package com.mypackage {
import flash.display.MovieClip;
import flash.events.*;
import flash.display.Loader;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.net.URLRequest;
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
public class bmChatImage extends MovieClip {
public var ChatImage = new Loader();
private var ImageBitMap:Bitmap = null;
private var AddedBitMap:Boolean = false;
private var ChatImageBMD:BitmapData = null;
private var Parent = null;
private var ImageURL:String = "";
public function bmChatImage() {
ChatImage.load(new URLRequest("http://mydomain/default.png"));
ChatImage.contentLoaderInfo.addEventListener(Event.COMPLETE, DoneLoadImage);
ChatImage.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
public function LoadChatImage(pImageURL:String,pChatSequence:int) {
ImageURL = pImageURL;
ChatSequence = pChatSequence;
ChatImage.load(new URLRequest(ImageURL));
ChatImage.contentLoaderInfo.addEventListener(Event.COMPLETE, DoneLoadImage);
ChatImage.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
protected function ioErrorHandler(e:IOErrorEvent):void{
trace("ERROR",e.text);
}
private function DoneLoadImage(ThisObject:Event)
{
ChatImageBMD = Bitmap(ChatImage.content).bitmapData.clone();
ImageBitMap = new Bitmap(ChatImageBMD);
if (AddedBitMap == false) {
AddedBitMap = true;
this.addChild(ImageBitMap);
}
}
}
}
https://projectavian.com/zero.gif – Marty
作为一个说明。建议不要将UpperCamelCase用于变量和函数名称。它有助于区分静态类别参考。 (因此,为什么上面的代码中的所有变量都有Class着色) – WORMSS