2012-05-17 31 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。 –