所以我一直在寻找一种方法来围绕中心点进行背景轨道。我遇到了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));
}
}