如何在Actionscript 3中创建无限环绕轨道背景

时间:2012-09-19 23:52:34

标签: actionscript-3

所以我一直在寻找一种围绕中心点的背景轨道的方法。我遇到了greensock blitmask,它可以很好地包装位图数据以进行infinte滚动效果。但是,我无法想出一种方法来使用这个blitmask旋转位图数据并仍然具有包装效果。以下是我的SWF的链接。

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

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

“WASD”控制运动

Orbiting Background

我使用了一些三角法来计算一个星星离玩家的距离。如果该星超出该距离,则使用它的角度* -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));
            }
        }

1 个答案:

答案 0 :(得分:1)

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