试着做了一个跟踪子弹的,觉得效果不是很好,说下具体思路,望高手指教 点此参与论坛讨论 点击浏览该文件
首先敌人是定时创建的,创建时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....)
|
|