收集后,玩家的电力消耗不会消失

时间:2013-04-10 10:38:10

标签: actionscript-3

我正在制作一个简单的小行星风格,自上而下的射击游戏。在游戏中有一个加电,允许玩家角色在短时间内对敌人的火力无敌。

一段时间后,加电效果会逐渐消失,但事实并非如此。一旦收集了电源,它就不会消失,让玩家立于不败之地。

我有两个与盾牌有关的课程(加电)。

Game.as :在游戏功能中有一条线说游戏开始时盾牌不应该显示(ship.shield.visible = false;)

同样的行在我的gameOver函数中,该函数表明当游戏结束时,盾牌不应出现。

PowerUp.as :以下是整个PowerUp.as的代码

包{

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

public class PowerUp extends MovieClip{

    var speed:Number;
    var type:Number;

    function PowerUp(){

        speed = 2;
        type = Math.floor(Math.random()*3+1);
        this.x = 650;
        this.y = Math.random()*200+50;
        addEventListener("enterFrame", enterFrame);

    }

    function enterFrame(e:Event){

        this.rotation -= 2;
        this.x -= speed;

        if(this.hitTestObject(Game.ship)){

            if(type == 1){
                Game.ship.takeDamage(Game.ship.health - Game.ship.maxHealth);
            }
            if(type == 2){
                for(var i in EnemyShip.list){
                    EnemyShip.list[i].takeDamage(1);
                }
            }
            if(type == 3){
                Game.ship.shield.visible = true;
                Game.ship.shield.alpha -= 0.05;
            if(Game.ship.shield.alpha == 0){
                Game.ship.shield.visible = false;
                Game.ship.shield.alpha = 1;
            }

            removeEventListener("enterFrame", enterFrame);
            stage.removeChild(this);

        }

        if(this.x < -30){

            removeEventListener("enterFrame", enterFrame);
            stage.removeChild(this);

        }

    }

}

}

1 个答案:

答案 0 :(得分:0)

鉴于您正在尝试编制时间效果,您应该为&#34; ship&#34;添加一个计数器。 enterframe监听器。给它一个无懈可击的&#34;计数器将填充一个具有您选择的特定值的通电(类型== 3一个)。然后,在takeDamage函数中,你检查那个伤害是否为正(你使用负面伤害进行治疗 - 好的恕我直言)和无敌伤害计数器大于0,然后不会造成伤害。并且每一帧减少,一旦为0,就会隐藏盾牌,使你的船再次受到伤害。

if(type == 3){
            Game.ship.shield.visible = true;
            Game.ship.shield.alpha = 1;
            Game.ship.invulnerability=50;
        }

进入船上的听众:

if (invulnerability>0) {
    invulnerability--;
    if (invulnerability==0) {
       shield.visible=false;
    } else if (invulnerability<20) {
       shield.alpha=invulnerability*0.05; // fade out if close to end
    }
}

不要忘记在某处初始化invulnerability 0。如果ship不是直接MovieClip,则可以声明它,它可以在运行时获取属性。