去年是我第一个成功的一年,教我的学生在Flash中使用AS3创建捕获和避免游戏。今年越来越好了。每年我都至少来这里寻求帮助一次。
我正在尝试为他们的第二个游戏项目添加射击。我可以从船上发射射击,发射任何东西,让它移动,当它离开屏幕时摆脱它,但是没有想出一个干净的方法让射击和目标消失(removeChild)和array.splice)碰撞。
我有点的代码有效,但我一直收到错误,
TypeError:错误#1010:术语未定义且没有属性。在 DropShootV02_fla :: MainTimeline /校验炮()
。 通常我知道这是因为对象和索引号之间不匹配,但这与删除框和项目符号时对第二个数组的调用有关。 为简单起见,我将只包括拍摄代码。类似的组织创建并删除框。
感谢任何帮助。顺便说一下,我们没有在AS文件中使用外部脚本。
var shotSpeed = 18;
var shots:Array = new Array();
import flash.events.MouseEvent;
import flash.events.Event;
stage.addEventListener(MouseEvent.CLICK, fireLaser);
function fireLaser(e:MouseEvent):void
{
if (gameOn==true)
{
var shot:Shot=new Shot();
addChild(shot);
shots.push(shot);
shot.gotoAndStop(1);
shot.x = user.x;
shot.y = user.y;
trace(shots.length);
}
}
addEventListener(Event.ENTER_FRAME, moveShot);
function moveShot(e:Event):void
{
for (var i:int=shots.length-1; i>=0; i--)
{
shots[i].y -= shotSpeed;
if (shots[i].y < -25)
{
removeChild(shots[i]);
shots.splice(i,1);
}
}
}
addEventListener(Event.ENTER_FRAME, checkShots);
function checkShots(e:Event):void
{
for (var i:int=shots.length-1; i>=0; i--)
{
for (var k:int=boxes.length-1; k>=0; k--)
{
if (shots[i].hitTestObject(boxes[k]))
{
if (boxes[i].type == "good")
{
score--;
scoreDisplay.text = "Score:" + score;
}
if (boxes[i].type == "bad")
{
score++;
}
removeChild(boxes[k]);
boxes.splice(k,1);
//if I leave this part out I get no errors,
//but but the bullet goes on to strike again
removeChild(shots[i]);
shots.splice(i,1);
}
}
}
}
谢谢kaarto: 我之前尝试过这种方法并且一直遇到同样的错误。我在这个游戏代码的其他地方使用了它。结果我需要调整玩家射击的频率。我从使用鼠标拍摄改为使用空格,现在问题已经消失。休息绝对是一个很好的。
答案 0 :(得分:-2)
将move shot
和checkShots
合并到一个ENTER_FRAME处理程序中。