0

アルファの不可視性。

現在、一部の画像の円形領域を「ホット スポット」として定義しています。たとえば、自分の写真を画面に表示して、頭に円を重ねることができます。頭との相互作用をリアルタイムで確認するには、Overlaps を返し、円に重なっているすべてのオブジェクトに対して何らかの操作を行います。デバッグのために、アルファ 0.5 で円を黄色にし、リリースのためにアルファを 0 に減らして、円を非表示にします (そうあるべきです)。

これはプログラムを遅くしますか? インタラクションを可能にしながら、サークル自体を非表示にする別の方法はありますか? (潜在的に) コストのかかる 0 のアルファを使用せずに「見えない」色にする方法はありますか? ビットマップ マトリックスとしてキャッシュしますか? または、マスクを使用せずに「ホットスポット」検出を解決する他の効率的な方法はありますか?

4

2 に答える 2

1

目に見えない表示オブジェクトがいくつかあるだけでそれほど遅くなることはありませんが、多くの場合は遅くなる可能性があります。よりクリーンなオプションは、ステージ上に実際の目に見えない表示オブジェクトを配置するのではなく、コードですべてを処理することだと思います。

円の場合、中心点と半径を定義します。次に、誰かがクリックしたかどうかを取得するには、次のようにします。

var xDist:Number = circle.x - mousePoint.x;
var yDist:Number = circle.y - mousePoint.y;

if((xDist * xDist) + (yDist * yDist) <= (circle.radius * circle.radius)){
    // mousePoint is within circle
} else {
    // mousePoint is outside of circle
}

表示オブジェクトを使用してこれらの円形のヒット領域を設定することを主張する場合 (場合によっては、視覚的に、次に数字の方が簡単な場合があります)、それらの表示オブジェクトを読み取る (そしてレンダリングからそれらを削除する) ためのコードを記述して、それらの位置を取得することもできます。そして半径サイズ。


追加された方法:

// inputX and inputY are the hotspot's x and y positions, and inputRadius is the radius of the hotspot
function hitTestObj(inputA:DisplayObject, inputX:int, inputY:int, inputRadius:int):Boolean {
    var xDist:Number = inputX - inputA.x;
    var yDist:Number = inputY - inputA.y;
    var minDist:Number = inputRadius + (inputA.width / 2);
    return (((xDist * xDist) + (yDist * yDist)) =< (minDist * minDist))
}
于 2012-11-09T03:32:38.330 に答える
0

alpha=0 は、Flash Player が最適化するため、レンダリングの点でそれほどコストがかかりません (実際の数値については、こちらを確認してください)。スプライトが見えないため、ビットマップ キャッシュは役に立ちません。自分で計算を行うことで衝突検出を実行する方法は他にもあります (数十または数百のスプライトを使用するゲームでより関連性があります) が、それはあなたの場合はやり過ぎです。

于 2012-11-09T03:57:33.720 に答える