2012-05-17 30 views
0

通過按d,我堅持讓我的精靈字符執行2個動畫幀(link_frame_2,後面跟着link_frame_1)。它只執行一個動畫幀(link_frame_2_face_right.png)。使動畫與Java KeyEvent正常工作

下面的代碼:

import java.awt.Point; 
import java.awt.event.KeyEvent; 
import java.awt.event.MouseEvent; 

import acm.graphics.GImage; 
import acm.graphics.GPoint; 
import acm.program.GraphicsProgram; 


public class LinkGame extends GraphicsProgram { 

    public void run(){ 
     setSize(APPLICATION_WIDTH, APPLICATION_HEIGHT); 
     addLink(); 
     addKeyListeners(); 
     addMouseListeners(); 
    } 
    private void addLink(){ 
     linkCharacter = new GImage("link sprites/link_frame_1_face_right.png"); 
      add(linkCharacter,link_Location_XCoord,link_Location_YCoord); 
    } 
    public void keyPressed(KeyEvent e){ 
     char linkMoveRightKey = e.getKeyChar(); 
     if(linkMoveRightKey == 'd'){ 
      // y should not change so goku moves in a straight line 
       link_Location_YCoord = 0; 
       linkCharacter.move(link_Location_XCoord,link_Location_YCoord); 
        set_Link_Anim_Frame_2_face_left(); 
      } 
    } 
    public void set_Link_Anim_Frame_2_face_left(){ 
     linkCharacter.setImage("link sprites/link_frame_2_face_right.png");   
    } 
    public void set_Link_Anim_Frame_1_face_left(){ 
     linkCharacter.setImage("link sprites/link_frame_1_face_right.png"); 
    } 
    private GImage linkCharacter; 
    private int link_Location_XCoord = 50; 
    private int link_Location_YCoord = 50 ; 
    private final int APPLICATION_WIDTH = 600; 
    private final int APPLICATION_HEIGHT = 600; 
} 
+0

您的遊戲是否不斷進行,或者只有在按下某個鍵時纔會移動/更改? –

回答

2

目前顯示未更新哪一幀,當您移動。如果您使用圖像陣列並循環播放,那麼您將可以在動畫中使用任何數字。我在下面的代碼中提供了更新,以便您可以試用。我添加了一個速度,而不是使用初始位置進行移動,因此您可以單獨更改這兩個值。移動速度越慢,您就越容易看到框架的變化。

import java.awt.event.KeyEvent; 

import acm.graphics.GImage; 
import acm.program.GraphicsProgram; 

public class LinkGame extends GraphicsProgram { 

    public void run(){ 
     setSize(APPLICATION_WIDTH, APPLICATION_HEIGHT); 
     addLink(); 
     addKeyListeners(); 
     addMouseListeners(); 
    } 

    private void addLink(){ 
     linkCharacter = new GImage("link sprites/link_frame_1_face_right.png"); 
      add(linkCharacter,link_Location_XCoord,link_Location_YCoord); 
    } 

    public void keyPressed(KeyEvent e){ 
     char linkMoveRightKey = e.getKeyChar(); 
     if(linkMoveRightKey == 'd'){ 
       linkCharacter.move(xSpeed,ySpeed); 
       linkCharacter.setImage(images[frame]); 
       frame++; 
       if(frame>=images.length){ 
        frame = 0; 
       } 
      } 
    } 
    private GImage linkCharacter; 
    private int link_Location_XCoord = 50; 
    private int link_Location_YCoord = 50 ; 
    private final int APPLICATION_WIDTH = 600; 
    private final int APPLICATION_HEIGHT = 600; 
    private String[] images = {"link sprites/link_frame_1_face_right.png","link sprites/link_frame_2_face_right.png"}; //Add in as many images as you want for your animation 
    private int frame = 0; 
    private int xSpeed = 1; //the number of pixels to move in x 
    private int ySpeed = 0; //0 so you only move horizontally 
} 
+0

當我按d鍵時,我確實希望多個幀依次播放。出於某種原因,它只設置frame_2的圖像,但不設置frame_1。我嘗試在frame_2上使用set_image,然後在keyPressed方法中在frame_1上使用set_image,但是之後它只會設置frame_1的圖像。 –

+0

你的意思是你想讓動畫在d被按下時繼續播放?您的圖片是否在屏幕上移動或僅移動一次? – n00begon

+0

我貼出的代碼執行以下操作:在按下d鍵時允許精靈移動,並且還會更改動畫的一個幀(frame_2),但不會在frame_2之後更改回frame_1。我想要它做的是在播放frame_2之後改變frame_1。 –