Actionscript 3 将对象移动到另一个对象位置

Actionscript 3 将对象移动到另一个对象位置,actionscript-3,containers,flash-cs6,flashdevelop,Actionscript 3,Containers,Flash Cs6,Flashdevelop,大家好,所以我在试着让它正常工作时遇到了一些麻烦。我有一个叫做character的MC对象,还有一个叫做“points”。我有一个名为planetContainer的容器对象,我将角色添加到planetContainer该角色正在围绕同样添加到容器中的行星旋转。我遇到的主要问题是,当点通电激活时,我希望点离开其他行星并移动到角色的中心位置。它工作正常,但必须更新一些代码,将点从planetContainer中移除,并将其连接到planets。我知道我可能必须使用localToGlobal,但不太

大家好,所以我在试着让它正常工作时遇到了一些麻烦。我有一个叫做
character
的MC对象,还有一个叫做“points”。我有一个名为
planetContainer
的容器对象,我将
角色
添加到
planetContainer
该角色正在围绕同样添加到容器中的
行星旋转。我遇到的主要问题是,当点通电激活时,我希望点离开其他行星并移动到角色的中心位置。它工作正常,但必须更新一些代码,将
planetContainer
中移除,并将其连接到
planets
。我知道我可能必须使用localToGlobal,但不太确定

以下是我如何设置角色:

    private function newCounterClockWise():void 
    {
        planetContainer.addChild(character);
        character.rotation = (Math.atan2(character.y - planetHit.y, character.x - planetHit.x) * 180 / Math.PI);
    }
如何将点添加到行星:

private function addPoints():void 
    {
        points = new mcPoints();
        var planetPosition:Point = planetContainer.parent.localToGlobal(new Point(0, 0));  
        points.x = planetPosition.x;
        points.y = planetPosition.y;
        outerPlanets.addChild(points);
        aPointsArray.push(points);
    }
现在,这是处理移动到角色的点的主要函数,但它不能正常工作。积分会移动,但它们会从屏幕上移开,或者导致游戏进行一些调整,并做不同的事情。“magnetHandler();也在我的EnterFRame事件中:

private function magnetHandler():void 
    {
        for (var i:int = 0; i < aPointsArray.length; i++)
        {
            var currentPoints:mcPoints = aPointsArray[i];
            var characterPosition:Point = planetContainer.parent.globalToLocal(new Point(character.x, character.y));  

            if (currentPoints.hitTestObject(playScreen.mcPointsHit))
            {
                trace("POINTS MID STAGE");
                currentPoints.x -= (currentPoints.x - characterPosition.x);
                currentPoints.y -= (currentPoints.y - characterPosition.y);
                //currentPoints.x = character.x;
                //currentPoints.y = character.y;
                //TweenMax.to(currentPoints, 0.5, {x:characterGlobalPosition.x, y:characterGlobalPosition.y , ease:Power1.easeInOut } );
            }
        }
    }
private函数magnetHandler():void
{
for(变量i:int=0;i

有人能看出我做错了什么吗?

很难完全理解你的问题(或者理解为什么你要把彼此相关的东西放在不同的容器中),但很可能这一行就是问题的症结所在:

var characterPosition:Point = planetContainer.parent.globalToLocal(new Point(character.x, character.y)); 
您要做的是获取
currentPoints
父空间中的字符x/y坐标。为此,您可以执行以下操作:

//first, find the global position of character:
var globalCharacterPoint:Point = character.localToGlobal(new Point());

//then, convert that to the currentPoints parent local space:
var localCharacterPoint:Point = currentPoints.parent.globalToLocal(globalCharacterPoint);
此外,在您的代码中:

    points = new mcPoints();
    var planetPosition:Point = planetContainer.parent.localToGlobal(new Point(0, 0));  
    points.x = planetPosition.x;
    points.y = planetPosition.y;
您将获得planetContainer父对象的全局空间,这可能不是您想要的。您可能想要:

planetContainer.localToGlobal(new Point());  //this gives you the global location of the planet container's top left corner
而且,由于要将
对象添加到
外部平面
,因此可能需要转换到其局部空间(除非全局定位为0,0,否则这并不特别重要)


不用说,对于游戏来说,最好将所有东西都放在全局坐标空间中,除非它们是真正封装的资产(如火箭上的烟雾等)

好的,我现在理解得好多了。谢谢你清理了它。对于你说的最后一部分转换“可能要转换到它的局部空间”仍然有点困惑“此外,您的方法工作得很好,点最终会移向角色。唯一的问题是,在角色前往另一个星球,并且有更多点落在他身上之后,我会收到以下错误:“无法访问空对象引用的属性或方法。”对于此行,“var localCharacterPoint:Point=currentPoints.parent.globaltocal”(globalCharacterPoint);”有什么想法吗?等着NVM弄清楚发生了什么。当我正在设置一个游戏时,我完全忘记了一个功能,那就是破坏了点,编辑了答案,试图清理你仍然困惑的部分。如果你说这回答了你的问题,考虑把它标记为被接受的答案。好的,我明白你的意思。非常感谢你的帮助
var outerPoint:Point = outerPlanets.globalToLocal(planetPosition);
points.x = outerPoint.x;
points.y = outerPoint.y;