2013-12-22 3 views
0

В моей игре я пытаюсь сделать анимированную последовательность хождения, поэтому я стараюсь, чтобы изображение изменилось, на каком анимационном кадре оно включено. Когда нажимается пробел, изображение меняется, но вместо получения следующего изображения из моего спрайта я получаю следующее изображение и предыдущее изображение. У меня есть скриншоты проблемы ниже, а также код.Получение неправильного фрагмента из java


Перед пространством нажимается

before
После пространства нажимается

after


Код

private static BufferedImage image; 
private static BufferedImage[] cropped = new BufferedImage[15]; 
private static byte frame = 0; 

public Player(){ 
    try { 
     image = ImageIO.read(new File("DownWalking.png")); 

    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 


} 

public void drawPlayer(int x,int y,Graphics2D g2){ 
    if (frame == 0){ 
     cropped[0] = image.getSubimage(2, 1, 23, 43); 
    } 
    if (frame == 1){ 
     cropped[1] = image.getSubimage(34, 1, 54, 45); 
    } 

g2.drawImage(cropped[frame],x * Tile.tileSize, y * Tile.tileSize, cropped[frame].getWidth(), cropped[frame].getHeight(), null); 
+1

Метод подписи getSubimage (х, у, ш , h) похоже, что у вас могут быть (x1, y1, x2, y2) при аварии? image.getSubimage (34, 1, 54, 45); -> image.getSubimage (34, 1, 23, 43); если ваш 2-й кадр больше, чем вдвое больше, чем ваш первый –

+0

Большое вам спасибо! Я действительно думал, что это обрезание из точки А в точку Б, и ваше объяснение помогло многое! @ ns47731 – user2318396

+0

@ ns47731: Я думаю, что вы на месте. Пожалуйста, отредактируйте и опубликуйте в качестве ответа, чтобы мы могли задать вопрос как ответ. :-) – haraldK

ответ

1

Метод подписи для getSubImage является:

getSubimage(int x, int y, int w, int h) 

Вы имели getSubimage(x1,y1,x2,y2) вызывая изображение, чтобы получить 2 плитки вместо 1.

Source

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