0

MovieClip をステージに追加する必要がありますが、ステージ上の空の領域にのみ追加する必要があるという制限があります。ステージ自体には複雑な形状が含まれているか、ユーザーが操作できます。つまり、オブジェクトをドラッグ/移動して空の領域を変更できます。hitTest および hitTestObject メソッドには、すでにステージで使用可能な DisplayObject が必要です。正しい方法は何ですか?私が想像できる唯一の解決策は、オブジェクトをステージに追加してから、ヒット テストを繰り返し行うことです。

[ビデオ ゲームでスプライトを追加するようなものを想像してみてください。スプライトは空の領域にスポーンする必要があります。お互いの中から飛び出したら、本当に奇妙に見えます。]

4

3 に答える 3

1

新しいクラスを作成するときは、変数でオフにして可視性を false に設定し、hitTest がなくなるまでループします。

ばかげた例:

public class someClass extends Sprite
{
    private var objectsOnStage:Array;
    public function someClass(objectsArray:Array) {
        objectsOnStage = objectsArray;
        visible = false;
        addEventListener(Event.ADDED_TO_STAGE, init);
    }
    private function init(e:Event){
        removeEventListener(Event.ADDED_TO_STAGE, init);
        addEventListener(Event.ENTER_FRAME, SEARCH);
    }
    private function SEARCH(e:Event) {
        var doesHit:Boolean = false;
        x = Math.round(Math.random() * (550 - 0)) + 0;
        y = Math.round(Math.random() * (400 - 0)) + 0;
        for (var i:int = 0; i < objectsOnStage; i++) {
            if (doesHit) break;
            if (this.hitTestObject(objectsOnStage[i])) {
                doesHit = true;
            }
        }
        if (doesHit) return;
        placedInit();
    }
    private function placedInit() {
        visible = true;
        removeEventListener(Event.ENTER_FRAME, SEARCH);
        //now init the stuff you want.
    }
}
于 2012-07-19T17:33:12.177 に答える
0

この投稿が非常に古いことは知っていますが、誰かの役に立てば-

ステージ上にないムービークリップでヒット テストを行う必要がある場合。回避策は、最初にビットマップにラスタライズすることです。

var bitmapData:BitmapData = new BitmapData(mc.width, mc.height, true, 0x0000000);
bitmapData.draw(mc);

if (bitmapData.getPixel32(x, y) > 0) {
  // Hit true.
}
于 2014-04-27T02:08:25.383 に答える
0

両方のクリップのバウンディング ボックスがオーバーラップしているかどうかを確認するだけです。このような:

import flash.geom.Rectangle;
import flash.display.MovieClip;

// create simple movie clips that has a rectangle shape inside
var sym1 : MovieClip = new Sym1();
var sym2 : MovieClip = new Sym2();

// get a rectanle of both clipt
var boundingBox1 : Rectangle = sym1.getBounds(this);
var boundingBox2 : Rectangle = sym2.getBounds(this);

// check if bounding boxes of both movie clips overlaps
// so it works like hitTestObject() method
trace( boundingBox1.intersects( boundingBox2) ) 
于 2012-07-22T06:47:15.213 に答える