ドキュメント クラスのアクション スクリプトで動的にステージに追加されるムービークリップがライブラリにあります。このムービークリップには、Photoshop から元の位置に直接インポートされた多くの子イメージが含まれています (保持する必要があります)。
何十ものイメージ インスタンスがあるため、すべてのイメージ インスタンスに手動で名前を付けたくありません。
どうやらフラッシュは「ビットマップ」オブジェクトをAS3の親ムービークリップの子として認識しないため、画像を手動でシンボルに変換しました(numChildrenはビットマップを認識しませんが、シンボルを認識します)。
数十の子への参照で満たされた配列があり、それをループして、クリックしたときにそれぞれがマウスの下にあるかどうかを確認します。ただし、どういうわけか、子シンボルに手動で名前を付けない限り、項目をクリックしても検出されません(いくつかの名前を手動で付けてテストしましたが、それらはクリックに敏感になりました)。
私はすでにtrace()
コード全体のデバッグを行っており、配列がデータでいっぱいであること、実際にはデータがインスタンスの名前 (自動的に名前が付けられる、IE instance45、instance46、instance47 など) であることを確認しています。関数をクリックすると実行され、シンボルに手動で名前を付けた場合にコードが正しく機能することを確認します。
何が問題なのか、またはフラッシュのどの側面を理解できていないのか、誰にもわかりますか?
コードは次のとおりです。
//check each animal to see if it was clicked on
private function check_animal_hits():void
{
var i:int = 0;
var animal:Object = this.animal_container;
for (i=0; i<animal.mussels.length; i++)
{
if (this.instance_under_cursor(animal.mussels[i].name))
{
var animal_data = new Object();
animal_data.animal = "mussel";
this.send_data(animal_data);
}
}
}
instance_under_cursor()
メソッドのコードは次のとおりです。
// Used for finding out if a certain instance is underneath the cursor the instance name is a string
private function instance_under_cursor(instance_name)
{
var i:Number;
var pt:Point = new Point(mouseX,mouseY);
var objects:Array = stage.getObjectsUnderPoint(pt);
var buttons:Array = new Array ;
var o:DisplayObject;
var myMovieClip:MovieClip;
// add items under mouseclick to an array
for (i = 0; i < objects.length; i++)
{
o = objects[i];
while (! o.parent is MovieClip)
{
o = o.parent;
}
myMovieClip = o.parent as MovieClip;
buttons.push(myMovieClip.name);
}
if (buttons.indexOf(instance_name) >= 0)
{
return true;
}
return false;
}
アップデート:
getObjectsUnderPoint()
手動で名前を付けない限り、オブジェクトを検出できないという問題に絞り込んだと思います。