得到儿童精灵的错误坐标

时间:2011-11-11 11:36:56

标签: android andengine

首先赞同Nicolas的伟大引擎。

我在做什么...... 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 个答案:

答案 0 :(得分: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);