2014-09-26 2 views
0

Я сделал игру с космическим кораблем, но у меня есть проблема с ее перемещением. это сценарий:Java игра вращает изображение и ось

public class spaceship { 

private final local_client local_client; 

private final int startX; 
private final int startY; 
private final int startR; 

private double x,y,r; 
public static double rotation; 
public static double velo; 

общественности статической AffineTransform на;

public spaceship(local_client local_client,int startX,int startY,int startR) { 
    this.local_client = local_client; 
    this.startX = startX; 
    this.startY = startY; 
    this.startR = startR; 
    x=200; 
    y=200; 
    r=90; 
} 

public void drawImage(Graphics2D g2d) { 
    g2d.drawImage(local_client.spaceship_img,200,200, local_client.game); 
    at = g2d.getTransform(); 

       at.translate(x , y); 
         at.rotate(Math.toRadians(r)); 
      at.translate(-(local_client.spaceship_img.getWidth()/2),-(local_client.spaceship_img.getHeight()/2)); 
    System.out.println(at.getTranslateX() + " - " + at.getTranslateY()); 
       g2d.setTransform(at); 
    g2d.drawImage(local_client.spaceship_img,0,0, local_client.game); 

} 

Так с этим сценарием я могу повернуть изображение (см экран): http://gyazo.com/c982b17afbba8cdc65e7786bd1cbea47

Моя проблема заключается в том, что если я приращение X или Y двигаться по нормальной оси (экран): http://gyazo.com/1fb2efb5aff9e95c56e7dddb6a30df4a и не по диагонали

ответ

0

at.translate(x , y);

Эта строка кода перемещает ваш корабль вокруг, правильно? Приращение x и y будет только перемещать их вверх и вниз в соответствии с осью.

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

Ниже приведен пример приблизительного псевдокода, который должен помочь вам в правильном направлении. Может или не может быть точным в зависимости от вашего r.

//drive along the ship's nose line 
void moveAlongShipAxis(int magnitude) { 
    x += magnitude * Math.cos(Math.toRadians(r)); 
    y += magnitude * Math.sin(Math.toRadians(r));  
} 
//strafe left and right, if you have that, otherwise you can skip this one 
void moveYAlongTransverseAxis(int magnitude) { 
    y += magnitude * Math.cos(Math.toRadians(r)); 
    x += magnitude * Math.sin(Math.toRadians(r));  
} 
+0

Привет, что это величина, и когда мне нужно называть этот метод? –

+0

@terzi_matte Скажем, автомобиль - это автомобиль. Когда вы нажимаете на педаль газа, это происходит в 100 км/ч мгновенно или постепенно ускоряется до 100 км/ч? Добавляя величину, вы можете определить, насколько быстро корабль идет. Таким образом, величина в вашей игре будет равна 100 долларов в секунду. Величина 10 будет означать 10px в секунду. – Compass

+0

Да, спасибо большое, я понял это через 1 час, но спасибо, я думаю, что вы изменили сон и грех :) –

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

  • Нет связанных вопросов^_^