2012-06-07 2 views
1

У меня есть спрайт в моей игре, и я хочу получить его координаты центра. Спрайт можно вращать, так что я не могу просто получить его координаты x/y, затем добавьте половину ширины/высоты спрайта, потому что методы getWidth и getHeight возвращают размеры исходного, невращаемого спрайта.AndEngine - Получение центра Координаты спрайта

Я попробовал getSceneCenterCoordinates(), но почему-то возвращает одинаковые координаты для всех спрайтов, даже если они нигде не находятся рядом друг с другом.

Это рисунок для описания того, что я хочу, красная точка - это координата, которую я хочу, а метки ширины/высоты справа изображают то, что я ХОЧУ возвращать методы getWidth/Height (но они не): enter image description here

+0

я не мог решить эту проблему с помощью каких-либо заранее определенных функций. Я использовал другой поворот с помощью функций SIN и COS, пожалуйста, скажите мне, нужны ли вам дополнительные классификации. –

ответ

1

Я выяснил, как правильно использовать getSceneCenterCoordinates(), чтобы передать его поплавком []. Вот мое решение:

float[] objCenterPos = new float[2]; 
obj.sprite.getSceneCenterCoordinates(objCenterPos); 
Log.d(this.toString(), "Coordinates: ("+objCenterPos[0]+","+objCenterPos[1]+")"); 
+0

вы должны принять свой собственный ответ, а затем – jmroyalty

+0

вам все равно придется найти новую ширину или высоту после выполнения вращения. Я думаю, что этого ответа недостаточно, так как вы его приняли ?! –

+0

Мне также необходимо снять размер спрайта, float center [] = pelota.getSceneCenterCoordinates(); центр [0] - = pelota.getWidthScaled()/2; центр [1] - = pelota.getHeightScaled()/2; – vrunoa

1

Получите минимальное и максимальное значение всех углов (для компонентов - x и y). Затем возьмите среднее от макс и мин, чтобы получить среднюю:

middleX = (maxX + minX)/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() не будет влиять на «center» point location

те «центральные» точки относительно объекта, поэтому, если вам нужны фактические координаты экрана, вам нужно будет добавьте их в значения getX() и getY(), которые BTW также не изменятся, основываясь только на применении setRotate()

+0

Когда вы вызываете getX() и getY(), это возвращает верхний левый угол спрайта? Итак, если он повернут, он вернет фиолетовые координаты точек из моего примера выше? –

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) 
Смежные вопросы