在AS3中检查镜头碰撞并移除镜头和目标

时间:2017-11-03 19:04:18

标签: arrays actionscript-3 flash removechild

去年是我第一个成功的一年,教我的学生在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: 我之前尝试过这种方法并且一直遇到同样的错误。我在这个游戏代码的其他地方使用了它。结果我需要调整玩家射击的频率。我从使用鼠标拍摄改为使用空格,现在问题已经消失。休息绝对是一个很好的。

1 个答案:

答案 0 :(得分:-2)

move shotcheckShots合并到一个ENTER_FRAME处理程序中。