Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 带有数组、循环和if语句的hitTestObject_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 带有数组、循环和if语句的hitTestObject

Actionscript 3 带有数组、循环和if语句的hitTestObject,actionscript-3,flash,Actionscript 3,Flash,我让仆从在追香蕉,它被箭头键控制着。我也有一个生命酒吧,我会根据仆从是否掉香蕉来跟踪它。我现在面临的问题是,当一根香蕉(从阵列中)落地时,我的生命棒完全掉落。我希望随着每一根香蕉落地,它都能逐渐减少。我尝试使用分派事件,但不起作用 这是我在主程序中的内容: import flash.display.MovieClip; import flash.events.KeyboardEvent; import flash.events.Event; var leftKey:Boolean; var

我让仆从在追香蕉,它被箭头键控制着。我也有一个生命酒吧,我会根据仆从是否掉香蕉来跟踪它。我现在面临的问题是,当一根香蕉(从阵列中)落地时,我的生命棒完全掉落。我希望随着每一根香蕉落地,它都能逐渐减少。我尝试使用分派事件,但不起作用

这是我在主程序中的内容:

 import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.events.Event;

var leftKey:Boolean;
var rightKey:Boolean;
var upKey:Boolean;
var downKey:Boolean;
var jump:Boolean = false;
var xvelocity:int = 9;
var yvelocity:int = 3;
var gravity:Number = 7;

stage.addEventListener(Event.ENTER_FRAME, changeVelocity);
stage.addEventListener(KeyboardEvent.KEY_UP, checkKeyUp);
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeyDown);

  function changeVelocity(evt:Event){
        moveMinion();
        yvelocity += gravity;
    }

    function moveMinion(){

        if (leftKey == true){
           sideMinion.x -= xvelocity;
            sideMinion.left();

        }
        if (rightKey == true){
            sideMinion.x += xvelocity;
            sideMinion.right();
        }
    }

    function checkKeyDown(e:KeyboardEvent){
        if (e.keyCode == Keyboard.LEFT){
            leftKey = true;
        }
        else if (e.keyCode == Keyboard.RIGHT){
            rightKey = true;
        }

    }

    function checkKeyUp(e:KeyboardEvent){
        if (e.keyCode == Keyboard.LEFT){
            leftKey = false;
        }
        else if (e.keyCode == Keyboard.RIGHT){
            rightKey = false;
            }
    }

    btnStart.addEventListener(MouseEvent.CLICK, makeItFall);

    function makeItFall(e:MouseEvent){
    var numBananas = 6;
    var theBananas: Array = new Array();
    theBananas = [];
    for (var i = 0; i < numBananas; i++) {
    var aBanana: banana = new banana();
    theBananas.push(aBanana);
    btnStart.visible=false;
    aBanana.y=100;
    theBananas[i].setSpot(Math.random()*450,Math.random()*200);
    theBananas[i].setSpeed((Math.random()), 1);
    stage.addChild(aBanana);

}   

var health: Number= 100;
var healthPercent: Number= 1;
var lives:Event= new Event("lifeDrops")

addEventListener(Event.ENTER_FRAME, pickUpBananas);

function pickUpBananas(event:Event){

    for (var i:int = theBananas.length-1; i>-1; i--){

            if (sideMinion.hitTestObject(theBananas[i])){
                stage.removeChild(theBananas[i]);
                theBananas.splice(i,1);

        }

            if (info.hitTestObject(theBananas[i])){
            dispatchEvent(lives);   
            health=health-10;
            healthPercent=health/100;
            trace(healthPercent);
            life.scaleX= healthPercent;
            text.text=String(health);


        }

        if (health<0){
            gotoAndStop(5);
        }
    }
}   
    }

stop();

您的
pickUpBananas
函数会运行每一帧并检查每一根香蕉是否接触地面。因此,如果一根香蕉击中,它将降低该帧上的生命值,并每一帧,直到它不再触地

你需要做点什么来防止同样的香蕉在随后的画面中重复消耗生命


具体的解决方案将取决于您希望游戏如何运行。您可以立即重置它的位置,使其不再接触地面,但您可能希望它保持在地面上(或至少在消失前淡出)。在这种情况下,您可以在香蕉上设置一个标志,指示它已被计数,这样它就不会再次被计数。如果你再扔香蕉,记得清除该标志。

你的
pickupbanananas
函数会运行每一帧并检查每一根香蕉是否接触地面。因此,如果一根香蕉击中,它将降低该帧上的生命值,并每一帧,直到它不再触地

你需要做点什么来防止同样的香蕉在随后的画面中重复消耗生命


具体的解决方案将取决于您希望游戏如何运行。您可以立即重置它的位置,使其不再接触地面,但您可能希望它保持在地面上(或至少在消失前淡出)。在这种情况下,您可以在香蕉上设置一个标志,指示它已被计数,这样它就不会再次被计数。请记住,如果您重新删除香蕉,请清除该标志。

您只是无法使用从阵列中删除香蕉。它需要从数组中删除,否则它将继续检查香蕉是否正在命中它将要命中的
info

theBananas.removeAt(i); //works with most recent flash players and Adobe air 

这两种方法的作用相同,但是
removeAt
速度更快,更容易键入

当然,您将把这段代码与info.hitTest中的其余部分放在一起,例如,它可以直接放在
text.text=String(health)下面

我还将继续使用
theBananas[I].parent.removeChild(theBananas[I];
)将香蕉从舞台上移除。当然,这需要在将其从阵列中移除之前完成

希望有帮助


编辑:@Cadin的答案完全正确。如何让香蕉停止触发hitTest取决于您希望它的外观和工作方式。我的答案只是一种方法。

您无法使用从数组中移除香蕉。需要将香蕉从数组中移除,否则它将继续检查香蕉是否命中
信息
,它将是

theBananas.removeAt(i); //works with most recent flash players and Adobe air 

这两种方法的作用相同,但是
removeAt
速度更快,更容易键入

当然,您可以将此代码与info.hitTest中的其余部分一起放入,例如,它可以直接位于
text.text=String(health);

我还将继续使用
theBananas[I].parent.removeChild(theBananas[I];
)将香蕉从舞台上移除。当然,这需要在将其从阵列中移除之前完成

希望有帮助

编辑:@Cadin的答案完全正确。如何让香蕉停止触发命中测试取决于你希望它的外观和工作方式。我的答案只是一种方法

theBananas.splice(1,i); // works with all players and Adobe air versions