2016-06-27 12 views
2

私はスプライトシートクラスを作成しています。うまくいけば、これは誰かに果物をぶら下げるだろうが、私は困惑している。AS3でビットマップデータを変更する方法

私は、実行時にロードされ、コンストラクタメソッドの ouside Spritesheetクラスの.asファイル内からこのコードを使用して、ステージ上でのセクションを配置したspritesheet(.PNG)があります。

 private function onLoad(e:Event):void 
    { 
     var loaderBmp:Bitmap = Bitmap(_loader.content); 
     _bmpData.copyPixels(loaderBmp.bitmapData, new Rectangle(0,0,80,80),new Point(0,0)); 
    } 

これは問題なく動作します。 .pngファイルのスライスがうまく表示されます。私の場合、スプライトシートはキャラクターをアニメーション化するためのものなので、BitmapDataを更新する必要があります。運が足りません。ここで私は、私はキャラクターの状態に応じてアニメーションのフレームを変更するために使用する機能に私のMainクラス内でこれをしようとしているものです:

c._thisSpriteSheet._loader.content.bitmapData.copyPixels(loaderBmp.bitmapData, new Rectangle(0,20,50,30),new Point(0,0)); 

loaderBmpは値だ変数がvar loaderBmp: Bitmap = Bitmap(_spriteSheet._loader.content);

です

cは、文字であるRunnerオブジェクトへの参照です。

_spriteSheetは、タイプSpritesheetRunnerクラスのプロパティです。

_loaderは、c._spriteSheetのプロパティであり、スプライトシートがインスタンス化されたときに使用されるLoaderオブジェクトです。

エラーは発生しませんが、元のbitmapDataオブジェクトが新しいものに置き換えられることはありません。これは、新しいBitmapDataオブジェクトを作成し、copyPixelsメソッドで使用する必要があるかもしれないが、同じ結果(何も返されない)を返したことを意味している可能性があります。デバッグモードでコードをステップ実行すると、すべてが機能しているように見えますが、表示オブジェクトは新しいbitmapDataで更新されません。私は何を踏んでいますか?

ありがとうございます!

答えて

2

私はすぐにそれに答えているので、おそらく誰もこれを読んでいないだろうが、私は文字通りこれを理解しようと3日間過ごした。時には簡潔な方法で質問をしようとすると、自分の質問に答えることができます。

誰かが似たような問題を抱えている場合、最初にロードしたLoaderBitmapDataオブジェクトにアクセスしようとしていたことが間違っていました。それから、私が作ったSpriteSheetクラスのプロパティを使って直接BitmapDataを参照することができたことが私に浮き彫りになりました。私はこれが他の誰かに続くことをかなり混乱させると思う。司会者がこれを見て、それがジャンクだと思うなら、私はそれが消えても構わないが、とにかくそれを保つと思った。

c._thisSpriteSheet._bmpDSheet.copyPixels(loaderBmp.bitmapData, new Rectangle(0,20,50,30),new Point(0,0)); 

_bmpDSheetはクラスのプロパティのBitmapDataです:新しいコードはこのように見えました。

+1

何かを頻繁に参照する場合は、プロパティを使用してデータを入力してください。ただし、同じスプライトシートで多くの類似したオブジェクトを使用する場合は、 'copyPixels()'で事前に問題が発生するので、まず 'loaderBmp.bitmapData'をスライスしてセットを保存しなければなりません'BitmapData'オブジェクトの' c._thisSpriteSheet._bmpDSheet'は 'copyPixels()'の代わりにそのセットの別のメンバーを指しています。 – Vesper

関連する問題