2012-05-17 6 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를 누르면 여러 프레임이 차례대로 재생되기를 원합니다. 어떤 이유로 프레임 2의 이미지 만 설정하고 프레임 1의 이미지는 설정하지 않습니다. frame_2에 set_image를 사용하고 key_pressed 메서드에서 frame_1의 set_image를 시도했지만 프레임 1의 이미지 만 설정합니다. –

+0

d를 누르고있는 동안 애니메이션을 계속 재생 하시겠습니까? 이미지가 화면을 가로 질러 이동합니까 아니면 한 번만 움직입니까? – n00begon

+0

내가 쓴 코드는 다음과 같습니다. d 키를 누르면 스프라이트가 움직 이도록하고 애니메이션의 한 프레임 (frame_2)을 변경하지만 frame_2 이후에는 frame_1로 다시 변경하지 않습니다. 내가하고 싶은 것은 그것이 frame_2를 재생 한 후에 frame_1을 바꾸는 것입니다. –

관련 문제