将对象移动到另一个对象位置
Moving Object to another Objects position
大家好,我在尝试使其正常工作时遇到了一些问题。我有一个名为 character
的 MC 对象和另一个名为 "points" 的对象。我有一个名为 planetContainer
的容器对象,我将 character
添加到 planetContainer
角色围绕 planets
旋转,该 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 } );
}
}
}
谁能看出我做错了什么?
很难完全理解您的问题(或理解您为什么将相互关联的事物放在单独的容器中),但很可能这条线就是它落下的地方:
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 中,除非它是真正封装的资产(如火箭上的烟雾等)
大家好,我在尝试使其正常工作时遇到了一些问题。我有一个名为 character
的 MC 对象和另一个名为 "points" 的对象。我有一个名为 planetContainer
的容器对象,我将 character
添加到 planetContainer
角色围绕 planets
旋转,该 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 } );
}
}
}
谁能看出我做错了什么?
很难完全理解您的问题(或理解您为什么将相互关联的事物放在单独的容器中),但很可能这条线就是它落下的地方:
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 中,除非它是真正封装的资产(如火箭上的烟雾等)