| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > Flash游戏制作 > 文章正文 用户登录
关于web2.0盈利模
个人网站的生存和
成功等于兴趣加坚
用户体验:如何周
网站商业化方向分
XML connector的讨
[讨论]函数的封装
Flash中关于圆的设
关于音乐不能导入
一个基于实例(向量

[讨论]飞机游戏中的跟踪子弹           

[讨论]飞机游戏中的跟踪子弹

作者:佚名 来源:闪吧 作者: holybozo 更新:2007-1-13 20:43:19 错误报告 我要投稿

试着做了一个跟踪子弹的,觉得效果不是很好,说下具体思路,望高手指教
点此参与论坛讨论
点击浏览该文件

首先敌人是定时创建的,创建时push入一个数组objectInScene内储存,并给每个敌人一个属性exist=true
当每个子弹发射时,先随机从objectInScene数组中引用一个目标
在每个子弹移动的过程中,循环检测
目标是否存在
#存在
跟踪目标,遍历objectInScene,检测是否有打到敌人
#打到
清除敌机,清除objectInScene相对应元素,清除子弹
次序不能颠倒,如果交换前两项,数组一变动,索引也就变动了,被打敌机的元素索引可能就不对了.而子弹如果一清除,后面的程序都不执行了.
#不存在
根据自定义路线飞行,并查找objectInScene是否为空
#不为空
随机再找一个元素为目标跟踪

代码如下

//- ATTACH AIM INTO THE CONTAINER -//
var scene:MovieClip = this.createEmptyMovieClip ("scene", 1);
scene.depth = 1;
var objectsInScene:Array = new Array ();
function addEnemy ()
{
for (var i = 0; i < 5; i++)
{
var aim:MovieClip = scene.attachMovie ("aim", "aim" + i, scene.depth++);
aim._x = random (500);
aim._y = random (400);
aim.exist = true;
objectsInScene.push (aim);
}
}
setInterval (addEnemy, 2500);
//- ATTACH BULLET -//
onMouseDown = function ()
{
var b:MovieClip = scene.attachMovie ("bullet", "bullet" + scene.depth, scene.depth++);
b._x = _root._xmouse;
b._y = _root._ymouse;
b.radian = 0;
b.dir = (random (2) ? 1 : -1);
b.oldy = b._y;
b.oldx = b._x;
b.aim = objectsInScene[random(objectsInScene.length)];
b.onEnterFrame = shoot;
};
//- BULLET SHOOT -//
function shoot ()
{
if(this._x > 500) this.removeMovieClip();
else if(this._x < 0) this.removeMovieClip();
if(this._y > 400) this.removeMovieClip();
else if(this._y < 0) this.removeMovieClip();

var x, y;
var oa = objectsInScene;
if (!this.aim.exist)
{
if(oa.length)
this.aim = oa[random(oa.length)];
if (this.radian < 2)
{
this.radian += 0.1;
}

x = Math.cos (this.radian) * 15 * this.dir;
y = -Math.sin (this.radian) * 15;
}
else
{
var i = oa.length;
while(--i > -1)
{
if(this.hitTest(oa[i]))
{
oa[i].removeMovieClip();
oa.splice(i, 1);
this.removeMovieClip();
}
}
var r = Math.atan2 (this.aim._y - this._y, this.aim._x - this._x);
x = Math.cos (r) * 15;
y = Math.sin (r) * 15;
}
this._x += x;
this._y += y;
this._rotation = Math.atan2 (this._y - this.oldy, this._x - this.oldx) * 57.3;
this.oldy = this._y;
this.oldx = this._x;
}

smia

这个问题我看是要综合全局权衡一下的
过于僵硬问题我以前是这样解决的:
如果 导弹确定目标-按角度移动,保存角度
如果 导弹无目标-按上次角度移动(等于一发导弹只能定位一个目标)
这其实是一个逃避方法。我也考虑过以判断角度变化范围为依据触发平滑转向的效果,不过并没着手实现。
另外我所说的第二点,其实在游戏里还是要综合考虑的。
如果发射的导弹不是一束,那么可以设想一下。N多导弹在突然转换目标的效果。
另外参考一下一些飞行游戏,跟踪武器的威力,速度/频率,数量和其他武器需要有一个平衡是应该的吧?所以对于武器的设定是需要结合整个游戏考虑的...
我个人觉得,跟踪作为副武器的威力可以大些,速度必然要慢些(考虑到平滑转向),发射频率也不会快。
当然如果把跟踪性武器作为主武器的话又要另外考虑...
总之呢,个人感觉根据敌人判断导弹目标是有些必要的...(设想一下打BOSS的时候,无数导弹不打BOSS只打小PP....)

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。