2011-12-16 11 views
1

色=ある色かどうかを確認してから適切に反応したいと思います。これはフラッシュAS3で行われます。Actionscript 3の文章でオブジェクトの色を確認してください

私が持っているコードは(対象となるcal_mc) if(cal_mc.color == 0x0000FF) { p1score = p1score + 25;

ある

それはエラーなしで実行しますが、動作しません。 誰かが私がif文で間違っていることを教えてもらえますか? コードをできるだけシンプルに保つことが望ましい。

答えて

4

私の知る限り、あなたのコードにはMovieClipオブジェクト(cal_mcはMovieClip)が使用されています。

短い回答:MovieClipに「color」というプロパティがないため、最初の条件が失敗します。

長い答え:それは彼らがあなたのコードの実行中に定義されたプロパティを持つことができることを意味して定義することにより

ムービークリップは、動的なオブジェクトです:

var custom:MovieClip = new MovieClip(); 
custom.potato = "I am a potato!"; // creates a new property "potato" and assigns it the value of "I am a potato". 
trace(custom.potato); // outputs "I am a potato"; 

MovieClipには何のプロパティ「色」がありませんしたがって、理論状態では条件文はfalseですが、MovieClipは実行時にプロパティを割り当てることができるため、Flashではエラーが発生しません。したがって、どこかで "color"を定義していないと、Flashは知ることができません。

ザ・はいくつかのソリューションです:

  • どちらかがcolor財産ときに正しい値を割り当てることがしたいグラフィックスを描画するためにcolorプロパティといくつかのメソッドを含んでいるでしょうMovieClipとロジックを拡張するカスタムクラスを作成します図面は完成しました。
  • あなたMovieClipは、私はそれがあると仮定し、単純な形状である場合、 - MovieClipBitmapにオブジェクトをレンダリングし、次いでBitmap sから最初の画素を(単純な形状の全ての画素が同じ色であるので)サンプルbitmapData 。ここで

は、後者のコードです:(このコードは微調整が必​​要な場合があり、それはアウトラインだ)

function sampleColorFromDisplayObject(display:DisplayObject):uint 
{ 
    var bd:BitmapData = new BitmapData(display.width, display.height, false, 0xFF0000); 
    bd.draw(display, new Matrix()); 
    var color:uint = bd.getPixel(0, 0); 
    bd.dispose(); 
    return color; 
} 

による様々な可能形や大きさに、このコードが必要な場合がありますことを、心に留めておいてくださいいくつかの図形で意図したとおりに動作しない可能性があります。 bitmapDataのサイズを大きくし、フラッシュIDEで定義された特定の種類の円とシェイプを考慮して最初のピクセルをサンプリングすることで、できるだけ多くのシェイプを扱うようにしました。

+0

私はこのコードを使って、またはIDEで色変換が設定されている場合にだけ、この答えを 'movieclip.transform.colorTransform.color'プロパティにまで拡張します。 – package

関連する問題