2011-11-11 31 views
0

首先赞叹尼古拉斯的伟大引擎。得到错误的孩子精灵坐标

我一个做的是什么... 1)我创建了一个精灵,让调用父精灵 2)我创造了另一个精灵,让我们把它的孩子精灵 3)我将孩子并主张用convertLocalToSceneCoordinates 4 )我将这个子精灵旋转到-90度 5)我将这个精灵添加到父精灵,并最终将父精灵添加到场景中

现在它看起来很好,并且随父母一起移动,但是当我尝试添加另一个精灵时小孩精灵的位置给了我错误的坐标。即X和Y.

请告诉我如何解决?

代码:

mRocketPod = new RocketPod(0, 0, this.mTRRocketPod); 
float points[] = mRocketPod.convertLocalToSceneCoordinates(119, 10); 
mRocketPod.setPosition(points[0], points[1]); 
mRocketPod.setRotation(-90); 
mBossEarth.attachChild(mRocketPod); 

它会给我mRocketPod错误的坐标。

link to forum

+1

我很困惑你的问题。您是否按照上述步骤1-5将子Sprite成功添加到了您的父Sprite中,并且mRocketPod是唯一错误的子Sprite?你是什​​么意思给你错误的坐标?你的意思是mRocketPod没有显示在正确的位置? – yjw

+0

是的,我的意思是它不会在写入位置添加。如果我使它成为某个精灵的子节点,它会在父节点的特定位置添加我的子精灵,但是我希望我的子精灵可以添加到父节点上的某个特定位置。 –

+0

pelase查看此错误以供参考http://www.andengine.org/forums/bugs/coordinate-conversion-t5699.html –

回答

3

让我确认我的理解这里。我将你的问题解释为mBossEarth和mRocketPod作为2个不同的精灵,并且2之间的关系是mRocketPod是mBossEarth下的子精灵,就像我从mBossEarth.attachChild(mRocketPod)中看到的那样。

我认为错误的说法是这样的:

float points[] = mRocketPod.convertLocalToSceneCoordinates(119, 10); 

1)如果您有现场坐标,其mRocketPod应该连接到,但你想建立它作为mBossEarth,你的孩子应该获取mBossEarth的局部坐标,然后将mRocketPod设置为该位置,然后将其附加到mBossEarth。你所做的就是将你的精灵mRocketPod(119,10)转换成场景坐标,当你错误地将这个场景坐标应用到setPosition并附加到父对象上时,你会在你想要的位置开始挥手。正确的代码应该是这样的:

mRocketPod = new RocketPod(0, 0, this.mTRRocketPod); 
    float points[] = mBossEarth.convertSceneToLocalCoordinates(119, 10); 
    mRocketPod.setPosition(points[0], points[1]); 
    mRocketPod.setRotation(-90); 
    mBossEarth.attachChild(mRocketPod); 

在提出的解决方案,我在做什么是转换的场景坐标你必须进入内mBossEarth的坐标系。这样,当你附加孩子时,它将被设置为mBossEarth中的位置。 2)在不太可能发生的情况下,您实际上拥有mBossEarth中的坐标,您希望将mRocketPod放置在(119,10)位置,实际上可以直接在构造函数中将其设置,而无需执行任何坐标转换。正确的代码可能是这样的:

mRocketPod = new RocketPod(119, 10, this.mTRRocketPod); 
mRocketPod.setRotation(-90); 
mBossEarth.attachChild(mRocketPod);