首先对一些英语错误感到抱歉。葡萄牙语是我的第一语言(我来自巴西)
我试图在 AS3 中从头开始制作太空游戏,而移动飞船的方式就像在游戏 Air Traffic Chief 中一样。
我在某个时候成功了。但是,当船非常快时,它开始摇晃,并且不像我想要的那样非常光滑和干净。
这是我所做的:http: //megaswf.com/s/2437744
由于代码非常大,所以我粘贴在 pastebin:pastebin.com/1YVZ23WX 我还写了一些英文文档。
这是我的第一场比赛,也是我在这里的第一篇文章。我真的希望你们能帮助我。
提前致谢。
编辑:由于代码非常大,我将在这里尝试澄清。
当用户 MouseDown 和 MouseMove 船舶时,每个坐标都被传递给一个数组。当用户 MouseUP 时,这个数组被传递给一个修复数组的函数。
例如:如果两个坐标之间的距离大于 5px,函数会在两个坐标的中间创建一个坐标。
如果我取消这个功能,问题就会被解决。但是如果用户移动鼠标非常慢,它仍然会发生。它还产生了一个我试图用该功能解决的问题。由于两个坐标的距离很大,当船到达一个坐标时,大部分线路路径消失。
我上传了一个没有修复数组功能的版本。http://megaswf.com/s/2437775
我认为有两种方法可以解决这个问题
1- 尝试修复坐标数组中的噪声 2- 去掉在两点之间创建坐标的功能,尝试修复线路径消失的问题。
这是两个重要的功能:
这个函数移动船
private function mover():void
{
if (caminhoCoords[0]!=null) // caminhoCoords is the array that contain the path
{
var angulo:Number = Math.atan2(this.y - caminhoCoords[0][1], this.x - caminhoCoords[0][0]);
this.rotation = angulo / (Math.PI / 180);
this.x = this.x - velocidade * (Math.cos(angulo));
this.y = this.y - velocidade * (Math.sin(angulo));
var testex:Number = Math.abs(this.x - caminhoCoords[0][0]); //test to see the distance between the ship and the position in the array
var testey:Number = Math.abs(this.y - caminhoCoords[0][1]);
if (testey<=velocidade+2 && testex<=velocidade+2) // if is velocidade+2 close then go to the next coordnate
{
caminhoCoords.shift();
}
}
}
这个函数画线:
private function desenhaCaminho():void //draw the black Path
{
if(caminhoCoords.length>=1)
{
caminho.graphics.clear();
caminho.graphics.lineStyle(1, 0x000000, 1,true);
caminho.graphics.moveTo(caminhoCoords[0][0],caminhoCoords[0][1]);
for (var i:int = 1; i < caminhoCoords.length; i++)
{
caminho.graphics.lineTo(caminhoCoords[i][0], caminhoCoords[i][1]);
}
}else
{
caminho.graphics.clear();
}
}
每次船到达一个坐标时,都会将该坐标从数组中取出并重新绘制数组。
有没有更好的方法来做到这一点?