为了增加游戏的难度,还需要对游戏中子弹的发射的数量做一下限制。还需要做一个射击的动画,让
发射子弹真实一些。
在动画的最后一帧加上
_root.fire=false;
并在场景的action层初始化一下fire的值
var fire=false;
最后把空的触发事件修改成这样:
if (Key.isDown(Key.SPACE))
{
if (fire == false)
{
fireBullets();
}
}
并且在fireBullets函数体内重新设置fire的值(fire=true)并让我方飞机重新回到第一帧。
这样修改的目的是让每次事件触发后需要等到动画播放完毕才能发射子弹。当然也有其他的限制方法。
7、暂停
首先需要加载一个有暂停动画的mc,设置该mc的visible为false。
_root.attachMovie("pause", "pause", 1000);
_root.pause._x = 250;
_root.pause._y = 150;
_root.pause._visible = false;
图片如下:

这次利用监听对象来监听键盘事件:
var listener = new Object();
listener.onKeyUp = function()
{
var code = Key.getCode();
if (code == 80)
{
if (paused == false)
{
paused = true;
}
else
{
paused = false;
}
}
}
Key.addListener(listener);
字母p的键盘码是80,来控制pause在true 和 false之间循环。完整的代码是:
stop();
var numEnemy = 3;
_root.score = 0;
var fire = false;
_root.attachMovie("pause", "pause", 1000);
_root.pause._x = 250;
_root.pause._y = 150;
_root.pause._visible = false;
var paused = false;
var listener = new Object();
listener.onKeyUp = function() {
var code = Key.getCode();
if (code == 80) {
if (paused == false) {
paused = true;
} else {
paused = false;
}
}
};
Key.addListener(listener);
function moveHero(speed) {
if (Key.isDown(Key.UP)) {
_root.hero._y -= speed;
} else if (Key.isDown(Key.LEFT)) {
_root.hero._x -= speed;
} else if (Key.isDown(Key.DOWN)) {
_root.hero._y += speed;
} else if (Key.isDown(Key.RIGHT)) {
_root.hero._x += speed;
}
if (Key.isDown(Key.SPACE)) {
if (fire == false) {
fireBullets();
}
}
}
var i = 1;
function fireBullets() {
i++;
if (i == 10) {
i = 0;
}
fire = true;
_root.hero.gotoAndPlay(2);
var newname = "bullet"+i;
_root.attachMovie("bullet", newname, i*100);
_root[newname]._y = _root.hero._y+13;
_root[newname]._x = _root.hero._x+55;
_root[newname].onEnterFrame = function() {
if (paused == false) {
var bullet_speed = 9;
this._x += bullet_speed;
if (this._x>555) {
this.removeMovieClip();
}
for (var h = 1; h<=numEnemy; h++) {
if (this.hitTest(_root["enemy"+h])) {
this.removeMovieClip();
_root["enemy"+h].play();
}
}
}
};
}
function Enemys() {
for (j=2; j<=numEnemy; j++) {
var name = "enemy"+j;
_root.enemy1.duplicateMovieClip(name, j);
}
}
Enemys();
_root.onEnterFrame = function() {
if (paused == false) {
_root.pause._visible = false;
moveHero(8);
} else {
_root.pause._visible = true;
}
};
需要注意的是深度的冲突。这里的解决办法是把子弹的深度限制在1000以下,当然有比这更好的解决办法
。
发射子弹真实一些。
在动画的最后一帧加上
_root.fire=false;
并在场景的action层初始化一下fire的值
var fire=false;
最后把空的触发事件修改成这样:
if (Key.isDown(Key.SPACE))
{
if (fire == false)
{
fireBullets();
}
}
并且在fireBullets函数体内重新设置fire的值(fire=true)并让我方飞机重新回到第一帧。
这样修改的目的是让每次事件触发后需要等到动画播放完毕才能发射子弹。当然也有其他的限制方法。
7、暂停
首先需要加载一个有暂停动画的mc,设置该mc的visible为false。
_root.attachMovie("pause", "pause", 1000);
_root.pause._x = 250;
_root.pause._y = 150;
_root.pause._visible = false;
图片如下:

这次利用监听对象来监听键盘事件:
var listener = new Object();
listener.onKeyUp = function()
{
var code = Key.getCode();
if (code == 80)
{
if (paused == false)
{
paused = true;
}
else
{
paused = false;
}
}
}
Key.addListener(listener);
字母p的键盘码是80,来控制pause在true 和 false之间循环。完整的代码是:
stop();
var numEnemy = 3;
_root.score = 0;
var fire = false;
_root.attachMovie("pause", "pause", 1000);
_root.pause._x = 250;
_root.pause._y = 150;
_root.pause._visible = false;
var paused = false;
var listener = new Object();
listener.onKeyUp = function() {
var code = Key.getCode();
if (code == 80) {
if (paused == false) {
paused = true;
} else {
paused = false;
}
}
};
Key.addListener(listener);
function moveHero(speed) {
if (Key.isDown(Key.UP)) {
_root.hero._y -= speed;
} else if (Key.isDown(Key.LEFT)) {
_root.hero._x -= speed;
} else if (Key.isDown(Key.DOWN)) {
_root.hero._y += speed;
} else if (Key.isDown(Key.RIGHT)) {
_root.hero._x += speed;
}
if (Key.isDown(Key.SPACE)) {
if (fire == false) {
fireBullets();
}
}
}
var i = 1;
function fireBullets() {
i++;
if (i == 10) {
i = 0;
}
fire = true;
_root.hero.gotoAndPlay(2);
var newname = "bullet"+i;
_root.attachMovie("bullet", newname, i*100);
_root[newname]._y = _root.hero._y+13;
_root[newname]._x = _root.hero._x+55;
_root[newname].onEnterFrame = function() {
if (paused == false) {
var bullet_speed = 9;
this._x += bullet_speed;
if (this._x>555) {
this.removeMovieClip();
}
for (var h = 1; h<=numEnemy; h++) {
if (this.hitTest(_root["enemy"+h])) {
this.removeMovieClip();
_root["enemy"+h].play();
}
}
}
};
}
function Enemys() {
for (j=2; j<=numEnemy; j++) {
var name = "enemy"+j;
_root.enemy1.duplicateMovieClip(name, j);
}
}
Enemys();
_root.onEnterFrame = function() {
if (paused == false) {
_root.pause._visible = false;
moveHero(8);
} else {
_root.pause._visible = true;
}
};
需要注意的是深度的冲突。这里的解决办法是把子弹的深度限制在1000以下,当然有比这更好的解决办法
。
回复Comments
作者:
{commentrecontent}