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

Moving Object to another Objects position

大家好,我在尝试使其正常工作时遇到了一些问题。我有一个名为 character 的 MC 对象和另一个名为 "points" 的对象。我有一个名为 planetContainer 的容器对象,我将 character 添加到 planetContainer 角色围绕 planets 旋转,该 planets 也被添加到容器中。我遇到的主要问题是,当点加电被激活时,我希望点离开其他行星并移动到 character 中心位置。它运行完美,但必须更新一些代码并将 PointsplanetContainer 中删除,并将它们附加到 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 } );
            }
        }
    }

谁能看出我做错了什么?

很难完全理解您的问题(或理解您为什么将相互关联的事物放在单独的容器中),但很可能这条线就是它落下的地方:

var characterPosition:Point = planetContainer.parent.globalToLocal(new Point(character.x, character.y)); 

您想要做的是获取 currentPoints 父 space 中的字符 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 父级的全局 space,这可能不是您想要的。您可能想要:

planetContainer.localToGlobal(new Point());  //this gives you the global location of the planet container's top left corner

而且,由于您要将 points 对象添加到 outerPlanets,您可能希望转换为它的本地 space(除非它在全局位置位于 0,0 - 然后这并不重要)。

var outerPoint:Point = outerPlanets.globalToLocal(planetPosition);
points.x = outerPoint.x;
points.y = outerPoint.y;

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