当两个电影剪辑碰撞时,一个消失

时间:2013-12-08 11:07:40

标签: actionscript-3 flash

我正在研究一个Uni项目,但我似乎无法解决一件事。

在我的舞台上,我有一个对象(peter_pan)和六个其他对象的孩子(bottle_mc)。

我想做的是当其中一个孩子击中彼得潘时,它应该立即消失,并且应该有+1得分(是的,这是一个非常简单的Flash游戏)。

然而,我似乎无法控制它,因为它们一旦流过他就会消失(而且它也是一个随机的瓶子_mc而不是他接触的那个)并且得分总是停在23而不是一个。

我是flash的新手,所以我的代码很简单(对不起我的英文,我不是英语母语人士)。

这是我的代码:

stop();

var collisionArray:Array = new Array();

var damageArray:Array = new Array();

var peter_pan:Peter=new Peter;
addChild(peter_pan);
peter_pan.x=0;
peter_pan.y=200;
stage.addEventListener(KeyboardEvent.KEY_DOWN, movement);

function movement(event:KeyboardEvent):void {
    switch (event.keyCode) {
        case Keyboard.UP :
            peter_pan.y -=15;
            break;
        case Keyboard.DOWN :
            peter_pan.y +=15;
            break;
    }
}

stage.addEventListener(KeyboardEvent.KEY_DOWN, showUp);
function showUp(event:KeyboardEvent):void {
    if (peter_pan.y>=365) {
    peter_pan.y=8;
}
}

stage.addEventListener(KeyboardEvent.KEY_DOWN, showDown);
function showDown(event:KeyboardEvent):void {
    if (peter_pan.y<=5) {
    peter_pan.y=340;
}
}

for (var i:int = 0; i<6; i++) {
    var bottle_mc:Bottle=new Bottle;
    addChild(bottle_mc);
    bottle_mc.x = 540;
    bottle_mc.y = Math.floor(Math.random()*(350 -0 +1))+0;
    bottle_mc.hit = false;
    bottle_mc.addEventListener(Event.ENTER_FRAME, movingBottles);
    collisionArray.push(bottle_mc);
}

function movingBottles(e:Event):void {
    e.currentTarget.x-=5;
    if (e.currentTarget.x<10) {
        e.currentTarget.x = 540;
        e.currentTarget.y = Math.floor(Math.random()*(300 - 0 +1))-0;
        if (e.currentTarget.visible==false) {
            e.currentTarget.visible=true;
            e.currentTarget.hit = false;
        }
    }
}

var score_val:Number=0;
score_txt.text=String(score_val);

addEventListener(Event.ENTER_FRAME, damage);

function damage(e:Event):void {
    if (peter_pan.x>=bottle_mc.x-peter_pan.width) {
        bottle_mc.visible=false;
        score_val++;
        score_txt.text=String(score_val);
    }
}

那么,我怎么能做一些简单的事情,比如当peter_pan接触到第一个bottle_mc时它会立即消失,这样他就可以收集得更多而且它们会消失,1瓶的得分只有1分?

1 个答案:

答案 0 :(得分:1)

您的代码中似乎存在一些问题,但我认为主要问题出在damage函数中。您正在比较xpeter_pan的{​​{1}}值(我认为这是所有六个瓶子的容器)。

相反,你应该在bottle_mc和每个瓶子之间单独进行一次命中测试。所有瓶子都已包含在peter_pan数组中,因此代码看起来像这样:

collisionArray