我目前正在开发一个小型的2D Java游戏,我刚刚完成了修复我从CodeNMore的YouTube教程中获得的任何错误/错误等。
我的游戏中的所有内容都与他保持同步,我一直致力于扩展我的游戏。 所以,我为一个面向不同方向的角色创建了一个精灵。不幸的是,关于如何显示图像,我几乎没有任何线索。
为了进一步解释,CodeNMore使用以下代码行: [来自SpriteSheet.java]
public BufferedImage crop(int col, int row, int w, int h){
return sheet.getSubimage(col * 16, row * 16, w, h);
}
我遇到的问题是,我不知道如何动画/更改spritesheet上的字符精灵,只要它们朝某个方向移动。
即。如果玩家面向右侧,我需要图像(默认情况下,在第0列,第0行)更改为第1列第3行。
一旦完成,我必须弄清楚如何为玩家制作动画。 (希望我能自己弄明白)。
您需要查看的所有内容都可以从此媒体中心下载:
http://www.mediafire.com/download/dfdkudun91wdup5/tile_rpg_part_20.zip
它是CodeNMore一直在处理的确切文件,只是在/ res中使用我的spritesheet。
答案 0 :(得分:1)
这是我使用的动画类
import java.awt.Graphics;
import java.awt.image.BufferedImage;
public class Animation {
private int speed;
private int frames;
private int index = 0;
private int count = 0;
private BufferedImage[] images;
private BufferedImage currentImg;
public Animation(int speed, BufferedImage... args){
this.speed = speed;
images = new BufferedImage[args.length];
for(int i = 0; i < args.length; i ++){
images[i] = args[i];
}
frames = args.length;
}
public Animation(int speed, boolean flip, BufferedImage... args) {
if (flip) {
this.speed = speed;
images = new BufferedImage[(args.length * 2) - 2];
for (int i = 0; i < args.length; i++) {
images[i] = args[i];
}
BufferedImage[] temp = new BufferedImage[args.length - 2];
for (int i = args.length - 2; i > 0; i--) {
temp[args.length - i - 2] = images[i];
}
for (int i = args.length; i < images.length; i++) {
images[i] = temp[i - args.length];
}
frames = images.length;
}else{
this.speed = speed;
images = new BufferedImage[args.length];
for (int i = 0; i < args.length; i++) {
images[i] = args[i];
}
frames = args.length;
}
}
public void runAnimation(){
index ++;
if(index > speed){
index = 0;
nextFrame();
}
}
private void nextFrame(){
for(int i = 0; i < frames; i ++){
if(count == i)
currentImg = images[i];
}
count ++;
if(count >= frames)
count = 0;
}
public void drawAnimation(Graphics g, int x, int y, int scaleX, int scaleY){
g.drawImage(currentImg, x, y, scaleX, scaleY, null);
}
}
要使用它,只需为每个图像循环创建此类的实例,并在速度参数中为每个帧和args中的图像之间提供多少刻度。然后在你的tick方法中(或你勾选的对象)调用run动画,并在你想渲染动画时在render方法中调用drawAnimation方法。如果将flip参数添加为true,它将自动反转您的图像序列Eg。你给它Img1,Img2,Img3,Img4,Img5。它会将其作为Img1,Img2,Img3,Img4,Img5,Img4,Img3,Img2进行处理。