2014-01-03 2 views
2

Я пытаюсь сделать 2D-игру. У меня есть массив прямоугольников для представления атак. Я пытаюсь заставить их вращаться, чтобы они повернули на 45 градусов. Когда я пытаюсь сделать больше заклинаний после первого, они сталкиваются с случайными местами вокруг экрана. Вот мой код:Вращение Rectangle Arrayed

Rectangle[] waterBolt = new Rectangle[10]; 
float[] wba = new float[10]; 
int wbc = 0; 
Graphics2D[] gwb = new Graphics2D[10]; 

public void renderSpell(Graphics2D g) { 
    for(int i=0; i<10; i++) { 
     if (waterBolt[i] != null) { 
      gwb[i] = (Graphics2D) g; 
      gwb[i].rotate(Math.toRadian(45), waterBolt[i].x, waterBolt[i].y); 
      gwb[i].fill(waterBolt[i]); 
     } 
    } 
} 

public void castSpell(int spellID) { 
    waterBolt[wbc] = new Rectangle(playerX, playerY, 16, 16); 
    wba[wbc] = (float) Math.toRadians(Math.atan2(mouseX - playerX, mouseY - playerY)); 
    wbc++; 
    if (wbc >= 10) { 
     wbc = 0; 
    } 
} 

А вот что происходит с моим экране, когда я бросил их все стоит на месте:

enter image description here

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

ответ

0

Имейте в виду, что когда вы звоните gwb[i] = (Graphics2D) g;, вы не делаете копию g. Вместо этого каждый из ваших прямоугольников поворачивается на совокупную сумму всех ваших предыдущих поворотов. Попробуйте что-то вроде этого:

public void renderSpell(Graphics2D g) { 
    AffineTransform transform = g.getTransform(); 
    for(int i=0; i<waterBolt.length; i++) { 
     if (waterBolt[i] != null) { 
      g.rotate(Math.toRadian(45), waterBolt[i].x, waterBolt[i].y); 
      g.fill(waterBolt[i]); 
      g.setTransform(transform); // back to original orientation 
     } 
    } 
}