2011-11-15 2 views
0

誰かが私を助けてくれることを願っています。私はactionscript3(AIR)にチャットエンジンを書くことを任されており、すべてのチャットメッセージにはそれに関連付けられたポスターのイメージがあります。だから私は一度に画面上に5つのチャットメッセージを持っているが、最後の人の投稿が異なるため、#1は常に変更されます。ビットマップイメージをフラッシュで変更する

私が間違っていると思うのは、画像を置き換える必要があるたびに.addChildメソッドを使用することです。これはステージ上に多くのものを作成し続けるためです。私がしようとしたことは、以下のコードですが、画像の更新を拒否しています。私はそれが動作するはずと思った道:「ImageBitMapを上書きすると仮定される -

1行目は - 次の画像は、2行目になると

「this.ChatLine」に追加された映画のクラスイメージを作成し、新しい画像データではそのビットは機能しません。

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を使用しないことをお勧めします。静的クラス参照を区別するのに役立ちます。 (なぜ、上のコードのすべての変数がクラスの色付けを持つのか) – 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

関連する問題