2011-11-15 35 views
0

我希望有人能幫助我。我的任務是在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); 
     } 
    } 
} 
} 
+1

https://projectavian.com/zero.gif – Marty

+0

作爲一個說明。建議不要將UpperCamelCase用於變量和函數名稱。它有助於區分靜態類別參考。 (因此,爲什麼上面的代碼中的所有變量都有Class着色) – WORMSS

回答

1

的問題是,你寫

ImageBitMap   = new Bitmap(ChatImageBMD); 

而且你只加ImageBitMap到顯示列表中的第一次。因此,在此之後,您只更改參考「ImageBitMap」,而不是顯示的對象。你應該寫這樣的事情:

ChatImageBMD = Bitmap(ChatImage.content).bitmapData.clone(); 
if (!ImageBitMap) 
{ 
    ImageBitMap = new Bitmap(ChatImageBMD); 
} 
else 
{ 
    ImageBitMap.bitmapData = ChatImageBMD; 
} 

提示:您可以通過避免檢查ImageBitMap.parent使用布爾AddedBitMap

順便說一下,你的變量的第一個字母應小寫,以與類型和類的區別;)

+0

完美!謝謝! – user385762