我遇到的问题基本上是,我在舞台上五次实例化“目标”对象。这种情况正在发生,但只有一个对象能够对其执行hitTestPoint。任何人都可以帮助解决这个问题的原因吗?
以下是代码:
已更新
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.ui.Mouse;
import flash.text.*;
public class TheGameItself extends Sprite {
public var main_class:TheGame;
private var crosshair:Crosshair = new Crosshair;
private var targets:Array = new Array();
public function TheGameItself(passed_class:TheGame) {
main_class = passed_class;
addTargets(4);
Mouse.hide();
addChild(crosshair);
crosshair.x = mouseX;
crosshair.y = mouseY;
addEventListener(MouseEvent.MOUSE_MOVE, moveCrosshair);
}
private function addTargets(numOfTargets:int):void {
for (var i:int = 0; i < numOfTargets; ++i) {
targets[i] = new Target;
targets[i].x = 100 * i + 70;
targets[i].y = 100;
targets[i].scaleX = targets[i].scaleY = .7;
addChild(targets[i]);
addEventListener(MouseEvent.CLICK, collisionDetection);
}
}
private function collisionDetection(e:MouseEvent):void {
targets.forEach(detectCollision);
}
private function detectCollision(element:*, index:int, targets:Array):void {
if (element.hitTestPoint(mouseX, mouseY, true) && targets.length > 0) {
trace("["+index+"]"+" "+element);
collisionNotification.text = "Yes";
} else {
collisionNotification.text = "No";
}
}
public function moveCrosshair(e:MouseEvent):void {
crosshair.x = mouseX;
crosshair.y = mouseY;
}
}
}
答案 0 :(得分:1)
将目标添加到数组中以跟踪:
private function target:Array = new Array();
private function newTarget(numOfTargets:uint):void {
for (var i:int = 0; i < numOfTargets; i++) {
target[i] = new Target;
target[i].x = 100 * i + 70;
target[i].y = 100;
target[i].scaleX = target[i].scaleY = .7;
addChild(target[i]);
trace(target[i]); // Adds 5 objects to stage
//**updated**
target[i].addEventListener(MouseEvent.CLICK, collisionDetection);
}
}
现在您可以参考每个目标:
private function collisionDetection(e:MouseEvent):void {
var target:MovieClip = MovieClip(e.target); //**updated**
if (target.hitTestPoint(mouseX, mouseY, true)) {
collisionNotification.text = "Collision";
removeTarget();
currentScore.text = String(int(score));
} else {
collisionNotification.text = "No collision";
decreaseScore();
currentScore.text = String(int(score));
// Check if score is equal to -200 and if it is, show game over screen
if (score == -500) {
Mouse.show();
main_class.showGameOver();
}
}
}