0

所以我一直在寻找一种方法来围绕中心点进行背景轨道。我遇到了greensock blitmask,它在包装位图数据以实现无限滚动效果方面做得非常出色。但是,我想不出一种方法来使用这个 blitmask 来旋转位图数据并且仍然具有环绕效果。下面是我的 SWF 的链接。

移动的图像是我希望包装并具有无限滚动效果的图像。问题是处理图像在旋转后从屏幕上移开后的重新定位。

编辑:我完全忘记了这个问题,并决定把它放在我的游戏的次要位置,因为它需要很长时间才能弄清楚。我最近回到了这个概念,因为我有一个让它发挥作用的想法。下面是一个指向 .SWF 的链接,它显示了我想要完成的工作。虽然这个例子有效,但我觉得它不是最好的解决方案。

“WASD”控制运动

轨道背景

我使用了一些三角函数来计算星星与玩家之间的距离。如果那颗星超出该距离,则使用它的角度 * -1 重新定位它。此代码在链接下。

var travelVal:Number = 0;
var turnVal:Number = 0;
var currentChild:DisplayObject;
var currentStar:Star;
var childIndex:int = 0;
var angle:Number = 0;
var distance:Number = 0;

if (controller.isKeyDown(Keyboard.A))
        {
            turnVal += TURN_SPEED;
        }

        if (controller.isKeyDown(Keyboard.D))
        {
            turnVal -= TURN_SPEED;
        }

        if (controller.isKeyDown(Keyboard.W))
        {
            travelVal += PLAYER_SPEED;
        }

        if (controller.isKeyDown(Keyboard.S))
        {
            travelVal -= PLAYER_SPEED
        }

        for (childIndex = 0; childIndex < numChildren; childIndex++)
        {
            currentChild = getChildAt(childIndex);

            //if (currentChild != player && currentChild != debugOutput && currentChild != blackBkgd)
            if(currentChild is Star)
            {
                currentStar = currentChild as Star;

                //move this child based on the travel value
                currentChild.y += travelVal * currentStar.speed;

                //calculate the orbiting
                distance = Math2.distanceBetweenObjects(player, currentChild);
                angle = Math.atan2(currentChild.y - player.y, currentChild.x - player.x);

                if (distance > STAGE_WIDTH ) angle = angle * -1; 
                //get orginal angle in radians
                //angle = Math.atan2(currentChild.y - player.y , currentChild.x - player.x);
                angle = Math2.radiansToDegress(angle);
                angle += turnVal;
                //currentStar.rotation = angle;

                angle = Math2.degreesToRadians(angle);

                currentChild.x = player.x + (distance * Math.cos(angle));
                currentChild.y = player.y + (distance * Math.sin(angle));
            }
        }
4

1 回答 1

1

为了绕某个中心点旋转,首先平移 (-centerpoint.x,-centerpoint.y),然后绕 (0,0) 旋转,然后再平移 (centerpoint.x,centerpoint.y)。

于 2012-09-20T05:23:06.213 回答