我目前正在使用Lynda.com上的AS3游戏教程,并遇到了MouseEvent.CLICK和子索引的问题。游戏是一个简单的指向和射击,玩家必须在他们离得太近之前射击所有接近的敌人。它最初工作,但我添加的自定义光标显示在敌人后面。但是,当我尝试调整索引时(我使用了addChildAt函数并将addChild(游标)代码行移动到敌人容器初始化程序下方)点击交互,这应该是在点击时移除敌人,并不是工作。
我的文档类:
package {
import flash.display.*;
import flash.utils.*;
import flash.events.*;
import flash.ui.*;
public class Game extends MovieClip {
public var cursor:Cursor;
public var enemy:Enemy;
public var numberOfEnemies:uint;
public var enemyContainer:MovieClip;
public var enemyTimer:Timer;
public function Game() {
addEventListener(Event.ADDED_TO_STAGE, init);
Mouse.hide();
}
public function init(event:Event):void {
cursor = new Cursor;
addChild(cursor);
stage.addEventListener(MouseEvent.MOUSE_MOVE, dragCursor);
numberOfEnemies = 10;
enemyTimer = new Timer(1000, numberOfEnemies);
enemyContainer = new MovieClip();
addChild(enemyContainer);
enemyTimer.addEventListener(TimerEvent.TIMER, createEnemies);
enemyTimer.start();
}
public function dragCursor(event:MouseEvent) {
cursor.x = this.mouseX;
cursor.y = this.mouseY;
}
public function createEnemies(event:TimerEvent):void {
enemy = new Enemy();
enemy.x = 25 + Math.random() * (stage.stageWidth - 75);
enemy.y = 25 + Math.random() * (stage.stageHeight - 75);
enemyContainer.addChild(enemy);
enemy.timerStart();
}
}
}
我的敌人阶层:
package {
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.ui.Mouse;
import flash.events.*;
public class Enemy extends MovieClip {
public var scaleObj:Number = 0.50;
public var growTimer:Timer;
public function Enemy() {
scaleX = scaleObj;
scaleY = scaleObj;
addEventListener(MouseEvent.CLICK, shootEnemy);
}
public function timerStart() {
growTimer = new Timer(50);
growTimer.addEventListener(TimerEvent.TIMER, objectGrow);
growTimer.start();
}
public function objectGrow(event:TimerEvent):void {
if(scaleObj <= 1.0) {
scaleObj += 0.01;
scaleX = scaleObj;
scaleY = scaleObj;
}
else {
killEnemy();
}
}
public function killEnemy():void {
this.parent.removeChild(this);
growTimer.stop();
}
public function shootEnemy(event:MouseEvent):void {
killEnemy();
}
}
}
还有一个游标类,但是包和类定义器之外没有代码。如果您有任何问题或意见,请告诉我们,谢谢。
答案 0 :(得分:1)
将Cursor实例设置为不接收鼠标事件本身,因为它会阻止点击事件到达其后面的对象。代码就像是
cursor = new Cursor;
cursor.mouseEnabled = false;
cursor.mouseChildren = false;
答案 1 :(得分:1)
很可能Cursor对象正在拦截鼠标点击,因为它位于Enemy对象上方。
您可以通过在光标类中设置来阻止光标拦截鼠标事件:
this.mouseEnabled = false;
this.mouseChildren = false;
此外,理想情况下,您应该使用本机鼠标光标而不是手动创建自己的光标。查看this Adobe tutorial以获取示例。