gpt4 book ai didi

java - 如何修复动画 (Java) 需要帮助 =]

转载 作者:行者123 更新时间:2023-12-02 07:37:25 25 4
gpt4 key购买 nike

程序检测左箭头键和右箭头键。如果按下这些键中的任何一个,我的 Knight 对象(GImage 类的实例)将遍历字符串数组(这些字符串是 Knight 对象动画的目录路径。

我的代码的问题是我似乎无法用我想出的java代码找到合适的流体动画。当我按下箭头键时,动画快速循环然后减慢速度,但是当我抬起箭头键并再次按下时,动画仍然快速循环然后减慢速度。

每个 Action 动画有 4 帧动画。

这是我正在使用的库的引用 http://jtf.acm.org/javadoc/student/acm/graphics/GObject.html#pause%28double%29

如有任何提示,我们将不胜感激。

import java.awt.event.KeyEvent;

import acm.graphics.GImage;

import acm.program.GraphicsProgram;



public class Castlevania extends GraphicsProgram {



public void init(){
setGameBackground();
knight = new Knight("knight anim/knightFaceLeft/knight1.png", 500, 500);
add(knight);
setSize(APPLICATION_WIDTH, APPLICATION_HEIGHT);
addKeyListeners();


}


private void setGameBackground() {
// TODO Auto-generated method stub
gameBackgroundImage = new GImage("link sprites/zelda_background.png");
add(gameBackgroundImage);
}



public void keyPressed(KeyEvent e){

/* Knight's Movement
*
*/
int knightMovementKey = e.getKeyCode();
if(knightMovementKey == KeyEvent.VK_LEFT)
{

this.xSpeed = 10;
ySpeed = 0;


knight.setImage(KnightFaceLeft[knightFrame]);
knight.move(-xSpeed, ySpeed);

knightFrame ++;

if(knightFrame >= KnightFaceLeft.length)
{
knightFrame = 0;
}


}

else if(knightMovementKey == KeyEvent.VK_RIGHT){

knight.setImage(KnightFaceRight[knightFrame]);
knight.move(xSpeed,ySpeed);
knightFrame++;

this.xSpeed = 10;
ySpeed = 0;

if(knightFrame>=KnightFaceRight.length){

knightFrame = 0;
}

}
knight.pause(DELAY);
}

private String[] KnightFaceLeft = {"knight anim/knightFaceLeft/knight1.png","knight anim/knightFaceLeft/knight2.png","knight anim/knightFaceLeft/knight3.png","knight anim/knightFaceLeft/knight4.png"}; //Add in as many images as you want for your animation
private String[] KnightFaceRight = {"knight anim/knightFaceRight/knight1.png","knight anim/knightFaceRight/knight2.png","knight anim/knightFaceRight/knight3.png","knight anim/knightFaceRight/knight4.png"};
private GImage gameBackgroundImage;
private Knight knight;
private final int APPLICATION_WIDTH = 1200;
private final int APPLICATION_HEIGHT = 800;
private int knightFrame = 0;
private int xSpeed ; //the number of pixels to move in x
private int ySpeed = 0; //0 so you only move horiontally
private double DELAY = 35;
}

import acm.graphics.GImage.*;

public class Knight extends GImage {

public Knight(String imageDirectory, double knight_Location_XCoord, double knight_Location_YCoord) {
super(imageDirectory,knight_Location_XCoord, knight_Location_YCoord);
}
}

最佳答案

您对 pause() 的调用正在阻止 event dispatch thread 。在此上下文中,使用 acm.util.SwingTimer 调整计时器的 ActionListener 中的动画速度。

关于java - 如何修复动画 (Java) 需要帮助 =],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11999847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com