2016-08-11 3 views
0

Я хочу, чтобы четыре спрайта вывели одну точку происхождения. Но если я использую как этотКак применить круговое движение для спрайтов в libgdx

 sprite_p1_avatar = new Sprite(dummyText); 
     sprite_p1_avatar.setPosition(200, 200); 
     sprite_p1_avatar.setOrigin(100, 100); 

     sprite_p2_avatar = new Sprite(dummyText); 
     sprite_p2_avatar.setPosition(300, 300); 
     sprite_p2_avatar.setOrigin(100, 100); 

     sprite_p3_avatar = new Sprite(dummyText); 
     sprite_p3_avatar.setPosition(400, 400); 
     sprite_p3_avatar.setOrigin(100, 100); 

     sprite_p4_avatar = new Sprite(dummyText); 
     sprite_p4_avatar.setPosition(500, 500); 
     sprite_p4_avatar.setOrigin(100, 100); 

     sprite_p1_avatar.rotate(40 * delta); 

     sprite_p1_avatar.draw(batch); 

     sprite_p2_avatar.rotate(40 * delta); 
     sprite_p2_avatar.draw(batch); 

     sprite_p3_avatar.rotate(40 * delta); 
     sprite_p3_avatar.draw(batch); 

     sprite_p4_avatar.rotate(40 * delta); 
     sprite_p4_avatar.draw(batch); 

спрайт инвертируются в то время как вращается, так как эти спрайты профильные фотографии пользователей, которые я хочу, чтобы они оставались прямыми, а орбитальный в каждой точке. Есть ли способ перемещать спрайты по круговой траектории без вращения.

enter image description here enter image description here

+0

вы можете предоставить скриншоты? – ronscript

+0

добавил скриншоты –

+0

Я не могу предоставить вам ответ n, но вот ссылка на формулу. http://www.physicsclassroom.com/calcpad/circgrav – ronscript

ответ

3

Вы можете создать «хелпер-вектор», представляющий расстояние от вашей точки начала.

Как что:

private Vector2 origin; 
private Vector2 distance; 

void ctor(){ 
    origin = new Vector2(); 
    distance = new Vector2(0, 100); 
} 

public void update(float Delta){ 
    origin.set(200, 200); 
    distance.rotate(40 * Delta); 
    Vector2 newPos = origin.add(distance); 
    sprite.setPosition(newPos.x - sprite.width/2, newPos.y - sprite.height/2); 
} 
+0

, но как изменить положение спрайта каждый раз? и какая здесь «степень». –

+0

Вы меняете положение спрайта в методе обновления. Значение «степень» - это нужный угол вашего спрайта относительно точки начала. – Draz

+0

Я отредактировал свой ответ, теперь это более правдоподобно? – Draz

3

Из кода ясно, что вы только вращающаяся отдельные спрайты, а их происхождение устанавливается на 100,100

Вы должны двигаться спрайты вокруг центра (100,100), изменяя их позиции, такие как земля, движутся вокруг Солнца.

изначальный для спрайт вращение центр.

Так дать радиус вашей форме, как г = 50, центр окружности (сх, су) = (100,100)

точки рассчитайте по периметру круга применения геометрии

double radianDegrees = Math.toRadians(d); 
double updatedX = cx + r * Math.cos(radianDegrees); 
double updatedY = cy + r * Math.sin(radianDegrees); 

и увеличьте угол на a, на который вы хотите переместить спрайты.

+0

Спасибо за ваш ответ. Можете ли вы быть более конкретным, например, как это применять? –

+0

Какой угол d здесь и как его найти? –

+0

d - это угол, который вы хотите увеличить в каждом кадре, начиная с 0 и сбрасывая на 360. –

Смежные вопросы