4、射击
在这个游戏中,射击子弹有两种方式:一是我方控制的射击,一是敌方的自动射击:下面先看我方的射击是如何实现的:
function shoot() {
attachMovie('bullet', 'bullet'+depth, buldepth);//加载子弹
buldepth++;//深度
bullet++;子弹数目限制
_root['bullet'+depth]._x = boxes.man._x+boxes._x;
_root['bullet'+depth]._y = boxes.man._y+boxes._y;//子弹位置
if (motion.length == 0) {
_root['bullet'+depth].dirx = dirx;
_root['bullet'+depth].diry = diry;//初始化是的子弹
} else {
_root['bullet'+depth].dirx = motion[0][2];
_root['bullet'+depth].diry = motion[0][3];//子弹的运动的方向
}
_root['bullet'+depth].onEnterFrame = function() {
for (f=0; f<enemies.length; f++) {
if (this.hitTest(_root.boxes['enemy'+f])) {//如果子弹和敌人碰撞(击中)
this.removeMovieClip();//删除子弹
bullet--;//子弹减少
_root.boxes['enemy'+f].play();//播放被击中动画
}
}
this._x += this.dirx;
this._y += this.diry;//子弹飞行
tempo = ((this._x-10)-boxes._x)/20;
tempk = ((this._y-10)-boxes._y)/20;
if (boxes['b'+Math.round(tempk)+'_'+Math.round(tempo)]._currentframe == 2) {
this.removeMovieClip();//如果子弹碰到墙壁,删除子弹
bullet--;//子弹减少
} else if (this._x<0 or this._x>boxes._width or this._y<0 or this._y>boxes._height) {
this.removeMovieClip();//如果子弹飞出界外
bullet--;
}
};
depth++;
}
如何实现敌方的自动射击:
function checkForEnemy(z) {//参数z是敌方对象
z.man = z._parent.man;//
z.manxright = Math.round((z.man._x-(z.man._width/2))/20);
z.manxleft = Math.round((z.man._x-15)/20);
z.manybottom = Math.round((z.man._y-15)/20);
z.manytop = Math.round((z.man._y-(z.man._height/2))/20);//
for (u=0; u<z.sight.length; u++) {
if (z.manxleft == z.sight[u][1] or z.manxright == z.sight[u][1]) {
if (z.manytop == z.sight[u][0] or z.manybottom == z.sight[u][0]) {
shootEnemy(z, z.sight[u][0], z.sight[u][1]);//在米字射程内就射击
}
}
}
}
function shootEnemy(q, r, s) {//参数r,s是当前“我”所在的位置
if (!q.shooting) {如果被击中了,就停止射击
q.shooting = true;
q.hitman = false;
boxes.attachMovie('Ebullet', 'Ebullet'+g, 1000+g);//加载敌军子弹mc
boxes['Ebullet'+g]._x = q._x;
boxes['Ebullet'+g]._y = q._y;//设置子弹mc的位置
boxes['Ebullet'+g].difx = s-q.xpos;
boxes['Ebullet'+g].dify = r-q.ypos;//敌人的位置的数组下标
boxes['Ebullet'+g].absdifx = Math.abs(s-q.xpos);
boxes['Ebullet'+g].absdify = Math.abs(r-q.ypos);//
boxes['Ebullet'+g].bulldirx = (boxes['Ebullet'+g].difx/boxes['Ebullet'+g].absdifx);
boxes['Ebullet'+g].bulldiry = (boxes['Ebullet'+g].dify/boxes['Ebullet'+g].absdify);//计算x,y的一个运动的比例
boxes['Ebullet'+g].onEnterFrame = function() {
this._x += 10*this.bulldirx;
this._y += 10*this.bulldiry;//子弹飞行
tempo = (this._x-10)/20;
tempk = (this._y-10)/20;//转换为数组的下标
if (boxes['b'+Math.round(tempk)+'_'+Math.round(tempo)]._currentframe == 2) {
this.removeMovieClip();//如果碰到墙壁
q.shooting = false;
// bullet -= 1;
} else if (this._x<0 or this._x>boxes._width or this._y<0 or this._y>boxes._height) {
this.removeMovieClip();//如果飞出界外
q.shooting = false;
// bullet -= 1;
}
if (this.hitTest(q.man)) {//如果击中
this.removeMovieClip();
q.shooting = false;
q.man.health -= 10;//健康值下降
if (q.man.health>0) {//如果没被消灭
q.man._alpha = q.man.health;//透明度下降
} else {//否则。。。
q.man._alpha = q.man.health;
health.text = q.man.health;
q.man.removeMovieClip();
gameOver('lose');
}
}
};
g++;
}
}
一般的子弹的发射需要经过这样的几个步骤:
1、事件触发
mc.onKeyDown=function(){
if(Key.getCode==90){
... ....
2、子弹mc加载并指定初始位置(当前的man或者enemy所在的位置)
attachMovie("bullet"...
bullet._x=...
bullet._y=...
3、onEnterFrame事件的运用(修改x,y的值来让子弹的位置改变)
bullet._x+=speed
bullet._y+=speed
4、处理子弹的击中或者出界
if()
击中:
hitTest()
出界是位置的判断
处理的结果是删除子弹和击中的目标
bullet.removeMovieClip();
man.removeMovieClip();
在这个游戏中,射击子弹有两种方式:一是我方控制的射击,一是敌方的自动射击:下面先看我方的射击是如何实现的:
function shoot() {
attachMovie('bullet', 'bullet'+depth, buldepth);//加载子弹
buldepth++;//深度
bullet++;子弹数目限制
_root['bullet'+depth]._x = boxes.man._x+boxes._x;
_root['bullet'+depth]._y = boxes.man._y+boxes._y;//子弹位置
if (motion.length == 0) {
_root['bullet'+depth].dirx = dirx;
_root['bullet'+depth].diry = diry;//初始化是的子弹
} else {
_root['bullet'+depth].dirx = motion[0][2];
_root['bullet'+depth].diry = motion[0][3];//子弹的运动的方向
}
_root['bullet'+depth].onEnterFrame = function() {
for (f=0; f<enemies.length; f++) {
if (this.hitTest(_root.boxes['enemy'+f])) {//如果子弹和敌人碰撞(击中)
this.removeMovieClip();//删除子弹
bullet--;//子弹减少
_root.boxes['enemy'+f].play();//播放被击中动画
}
}
this._x += this.dirx;
this._y += this.diry;//子弹飞行
tempo = ((this._x-10)-boxes._x)/20;
tempk = ((this._y-10)-boxes._y)/20;
if (boxes['b'+Math.round(tempk)+'_'+Math.round(tempo)]._currentframe == 2) {
this.removeMovieClip();//如果子弹碰到墙壁,删除子弹
bullet--;//子弹减少
} else if (this._x<0 or this._x>boxes._width or this._y<0 or this._y>boxes._height) {
this.removeMovieClip();//如果子弹飞出界外
bullet--;
}
};
depth++;
}
如何实现敌方的自动射击:
function checkForEnemy(z) {//参数z是敌方对象
z.man = z._parent.man;//
z.manxright = Math.round((z.man._x-(z.man._width/2))/20);
z.manxleft = Math.round((z.man._x-15)/20);
z.manybottom = Math.round((z.man._y-15)/20);
z.manytop = Math.round((z.man._y-(z.man._height/2))/20);//
for (u=0; u<z.sight.length; u++) {
if (z.manxleft == z.sight[u][1] or z.manxright == z.sight[u][1]) {
if (z.manytop == z.sight[u][0] or z.manybottom == z.sight[u][0]) {
shootEnemy(z, z.sight[u][0], z.sight[u][1]);//在米字射程内就射击
}
}
}
}
function shootEnemy(q, r, s) {//参数r,s是当前“我”所在的位置
if (!q.shooting) {如果被击中了,就停止射击
q.shooting = true;
q.hitman = false;
boxes.attachMovie('Ebullet', 'Ebullet'+g, 1000+g);//加载敌军子弹mc
boxes['Ebullet'+g]._x = q._x;
boxes['Ebullet'+g]._y = q._y;//设置子弹mc的位置
boxes['Ebullet'+g].difx = s-q.xpos;
boxes['Ebullet'+g].dify = r-q.ypos;//敌人的位置的数组下标
boxes['Ebullet'+g].absdifx = Math.abs(s-q.xpos);
boxes['Ebullet'+g].absdify = Math.abs(r-q.ypos);//
boxes['Ebullet'+g].bulldirx = (boxes['Ebullet'+g].difx/boxes['Ebullet'+g].absdifx);
boxes['Ebullet'+g].bulldiry = (boxes['Ebullet'+g].dify/boxes['Ebullet'+g].absdify);//计算x,y的一个运动的比例
boxes['Ebullet'+g].onEnterFrame = function() {
this._x += 10*this.bulldirx;
this._y += 10*this.bulldiry;//子弹飞行
tempo = (this._x-10)/20;
tempk = (this._y-10)/20;//转换为数组的下标
if (boxes['b'+Math.round(tempk)+'_'+Math.round(tempo)]._currentframe == 2) {
this.removeMovieClip();//如果碰到墙壁
q.shooting = false;
// bullet -= 1;
} else if (this._x<0 or this._x>boxes._width or this._y<0 or this._y>boxes._height) {
this.removeMovieClip();//如果飞出界外
q.shooting = false;
// bullet -= 1;
}
if (this.hitTest(q.man)) {//如果击中
this.removeMovieClip();
q.shooting = false;
q.man.health -= 10;//健康值下降
if (q.man.health>0) {//如果没被消灭
q.man._alpha = q.man.health;//透明度下降
} else {//否则。。。
q.man._alpha = q.man.health;
health.text = q.man.health;
q.man.removeMovieClip();
gameOver('lose');
}
}
};
g++;
}
}
一般的子弹的发射需要经过这样的几个步骤:
1、事件触发
mc.onKeyDown=function(){
if(Key.getCode==90){
... ....
2、子弹mc加载并指定初始位置(当前的man或者enemy所在的位置)
attachMovie("bullet"...
bullet._x=...
bullet._y=...
3、onEnterFrame事件的运用(修改x,y的值来让子弹的位置改变)
bullet._x+=speed
bullet._y+=speed
4、处理子弹的击中或者出界
if()
击中:
hitTest()
出界是位置的判断
处理的结果是删除子弹和击中的目标
bullet.removeMovieClip();
man.removeMovieClip();
回复Comments
作者:
{commentrecontent}