我的游戏中有一个精灵,我想得到它的中心坐标。精灵可以旋转,所以我不能只是得到它的x / y坐标然后加上精灵的宽度/高度的一半,因为getWidth和getHeight方法返回原始的,未旋转的精灵的尺寸。
我尝试了getSceneCenterCoordinates(),但由于某些原因,即使它们彼此不在一起,也会为所有精灵返回相同的坐标。
这是描述我想要的图形,红点是我想要的坐标,右侧图上的宽度/高度标签表示我想要返回的getWidth / Height方法(但它们没有) :
答案 0 :(得分: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)
答案 1 :(得分:1)
获取所有角的最小值和最大值(对于-x和y组件)。 然后取最大值和最小值的平均值得到中间值:
middleX = (maxX + minX) / 2
对y组件重复相同的操作。
答案 2 :(得分: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()值 - BTW也不会仅仅因为它而改变应用setRotate()
答案 3 :(得分:1)
我想出了如何正确使用getSceneCenterCoordinates(),即将它交给float []。这是我的解决方案:
float[] objCenterPos = new float[2];
obj.sprite.getSceneCenterCoordinates(objCenterPos);
Log.d(this.toString(), "Coordinates: ("+objCenterPos[0]+","+objCenterPos[1]+")");