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

时间:2017-07-11 02:15:59

标签: actionscript-3 containers flash-cs6 flashdevelop

嘿大家所以我在尝试让它正常工作时遇到了一些麻烦。我有一个名为character的MC对象和另一个称为“点”的对象。我有一个名为planetContainer的容器对象我将character添加到planetContainer,该字符围绕planets旋转,这些字符也会添加到容器中。我遇到的主要问题是当激活点加电时我希望点移动到其他行星并移动到character中心位置。它工作得很完美但必须更新一些代码并从Points中删除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 } );
            }
        }
    }

谁能看到我做错了什么?

1 个答案:

答案 0 :(得分:1)

很难完全理解你的问题(或者理解你为什么要把彼此相关的东西放在不同的容器中),但这条线很可能就是它倒塌的地方:

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

而且,由于您要将points对象添加到outerPlanets,您可能希望转换为其本地空间(除非它全局定位于0,0 - 然后它并不特别重要。)

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

毋庸置疑,对于游戏而言,除非是真正的封装资产(如火箭上的烟雾等),否则最好将所有内容都放在全球坐标空间中。

相关问题