0

を押して、スプライト キャラクターに 2 つのアニメーション フレーム (link_frame_2 の後に link_frame_1) を実行させることに行き詰まっていdます。1 つのアニメーション フレーム (link_frame_2_face_right.png) のみを実行します。

コードは次のとおりです。

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;
}
4

1 に答える 1

2

現時点では、移動しても表示するフレームは更新されていません。画像の配列を使用してループスルーすると、アニメーションに任意の数を含めることができます。試してみることができるように、以下のコードに更新を提供しました。移動の初期位置を使用する代わりに速度を追加したので、これら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
}
于 2012-05-17T01:21:23.703 に答える