我正在制作一个简单的小行星风格,自上而下的射击游戏。在游戏中有一个加电,允许玩家角色在短时间内对敌人的火力无敌。
一段时间后,加电效果会逐渐消失,但事实并非如此。一旦收集了电源,它就不会消失,让玩家立于不败之地。
我有两个与盾牌有关的课程(加电)。
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);
}
}
}
}
答案 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
,则可以声明它,它可以在运行时获取属性。