As3三角学和数学

时间:2014-09-28 19:12:03

标签: actionscript-3 flash math trigonometry

我正在尝试使用围绕圆圈旋转的圆圈创建一个迷你游戏 然而,我有一个问题,当我拍摄圆圈,它击中第二个圆圈,它没有继续角度,但“跳跃”到另一边我确定它的角度var应该重置或东西。你可以帮助我在这里变得紧张...... :( check the example

这是我处理圈子的输入框架功能的代码

public function UpdateCircles(e:Event):void
    {
        for (var i:int = 0; i < EnemySpriteVector.length; i++) 
        {
            EnemySpriteVector[i].rotation += EnemySpriteVector[i].enemyspeed;
        }

        var rad:Number = angle * (Math.PI / 180); // Converting Degrees To Radians
        if (IsplayerShoot)
        {
            playerSprite.x += Math.cos(rad) * PlayerCircleShootSpeed;  
            playerSprite.y += Math.sin(rad) * PlayerCircleShootSpeed; 

            for (var j:int = 0; j < EnemySpriteVector.length; j++) 
            {
                if (EnemySpriteVector[j].hitTestPoint(playerSprite.x,playerSprite.y) && (EnemySpriteVector[j].IsCircleHit == false))
                {
                    trace("hit");
                    EnemySpriteVector[j].IsCircleHit = true;
                    removeChild(EnemySpriteVector[0]);
                    EnemySpriteVector.splice(0, 1);

                    var EnemySprite:Sprite = new EnemySpriteClass();
                    EnemySpriteVector.push(EnemySprite);
                    addChild(EnemySprite);
                    EnemySprite.x = Math.random() * stage.stageWidth;
                    EnemySprite.y = Math.random() * stage.stageHeight;
                    IsplayerShoot = false;
                }
            }
        }
        else
        {   
            playerSprite.x = EnemySpriteVector[0].x + EnemySpriteVector[0].radius * Math.cos(rad); // Position The Orbiter Along x-axis
            playerSprite.y = EnemySpriteVector[0].y + EnemySpriteVector[0].radius * Math.sin(rad); // Position The Orbiter Along y-axis
            angle += EnemySpriteVector[0].enemyspeed; // Object will orbit clockwise
            playerSprite.rotation = (Math.atan2(playerSprite.y - EnemySpriteVector[0].y, playerSprite.x - EnemySpriteVector[0].x) * 180 / Math.PI); //only rotates the player circle itself
        }
    }

1 个答案:

答案 0 :(得分:1)

粉红色圈子击中绿色时,看起来只是从它离开的地方继续旋转。一个快速的解决方案是向角度添加180度。请记住,这仅适用于静态对象。如果你想要一个更动态的环境,我建议使用矢量(线性代数)。矢量数学很容易理解,它隐藏了很多复杂的三角学。 You can start here:)