0

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

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

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

Game.as:在 Game 函数中有一行说游戏开始时盾牌不可见(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);

        }

    }

}

}

4

1 回答 1

0

鉴于您正在尝试编写定时效果,您应该为“ship”enterframe 侦听器添加一个计数器。给它一个“无敌”计数器,该计数器将充满您选择的特定值的通电(type==3 one)。然后,在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不是直接 a MovieClip,它是必需的,它可以在运行时获取属性。

于 2013-04-10T11:31:33.280 回答