1

我的游戏中有一个精灵,我想得到它的中心坐标。虽然精灵可以旋转,所以我不能只得到它的 x/y 坐标然后添加精灵宽度/高度的一半,因为 getWidth 和 getHeight 方法返回原始未旋转精灵的尺寸。

我尝试了 getSceneCenterCoordinates() 但由于某种原因,即使它们彼此相距不远,它也会为所有精灵返回相同的坐标。

这是一个描述我想要的图形,红点是我想要的坐标,右侧图上的宽度/高度标签代表我想要 getWidth/Height 方法返回的内容(但它们没有): 在此处输入图像描述

4

4 回答 4

2

您可以使用坐标转换器

final float[] spriteCoordinates = sprite.convertLocalToSceneCoordinates(x,y);
        final float canonX = spriteCoordinates[VERTEX_INDEX_X];
        final float canonY = spriteCoordinates[VERTEX_INDEX_Y];
Sprite sprite_in_fixedpoint_of_the_first_sprite=new Sprite(canonX,canonY,textureregion)
于 2012-11-18T13:44:03.650 回答
1

获取所有角的最小值和最大值(对于 - x 和 y 分量)。然后取最大值和最小值的平均值得到中间值:

middleX = (maxX + minX) / 2

对 y 分量重复相同的操作。

于 2012-06-07T00:05:16.310 回答
1

考虑这样的事情

    Rectangle test = new Rectangle(100, 100, 50, 100, vboManager);
    mainScene.attachChild(test);

    System.out.println("Before RotCtrX = " + test.getRotationCenterX());
    System.out.println("Before RotCtrY = " + test.getRotationCenterY());

    test.setRotation(45);
    System.out.println("After RotCtrX = " + test.getRotationCenterX());
    System.out.println("After RotCtrY = " + test.getRotationCenterY());

结果是

System.out(4526): Before RotCtrX = 25.0
System.out(4526): Before RotCtrY = 50.0
System.out(4526): After RotCtrX = 25.0
System.out(4526): After RotCtrY = 50.0

AndEngine 实体围绕中心旋转(除非您更改 RotationCenter 值),因此应用 setRotate() 不会影响“中心”点位置

那些“中心”点是相对于实体的,所以如果你需要实际的屏幕坐标,你需要将它们添加到 getX() 和 getY() 值——顺便说一句,这也不会仅仅基于应用 setRotate 而改变()

于 2012-06-07T13:04:14.643 回答
1

我想出了如何正确使用getSceneCenterCoordinates(),也就是给它一个float[]。这是我的解决方案:

float[] objCenterPos = new float[2];
obj.sprite.getSceneCenterCoordinates(objCenterPos);
Log.d(this.toString(),  "Coordinates: ("+objCenterPos[0]+","+objCenterPos[1]+")");
于 2012-06-07T21:38:00.110 回答