0

首先对一些英语错误感到抱歉。葡萄牙语是我的第一语言(我来自巴西)

我试图在 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();
        }
    }

每次船到达一个坐标时,都会将该坐标从数组中取出并重新绘制数组。

有没有更好的方法来做到这一点?

4

2 回答 2

0

从口吃的样子来看,我猜你需要把“线”弄平一点。它可能会在线路中拾取大量噪音,然后将其转化为飞机的旋转。要么平滑平面的旋转/位置,要么平滑线本身。

于 2012-05-28T09:42:39.530 回答
0

我相信如果您将飞机的注册点设置为中心并使用.snapto(path),它将改善动作。

于 2014-11-18T05:44:50.180 回答