代码之家  ›  专栏  ›  技术社区  ›  Nathan

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

  •  1
  • Nathan  · 技术社区  · 7 年前

    嘿,大家好,我在试着让它正常工作时遇到了一些麻烦。我有一个MC对象,叫做 character 还有一个叫做“点”。我有一个容器对象,名为 planetContainer 性格 飞机容器 planets 也会添加到容器中。我面临的主要问题是,当点通电激活时,我希望点离开其他行星并移动到 Points 超出 并将其连接到

    以下是我如何设置角色:

        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 回复  |  直到 7 年前
        1
  •  1
  •   BadFeelingAboutThis    7 年前

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

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

    currentPoints

    //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;