首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java2D游戏编程-SpriteSheet动画

Java2D游戏编程-SpriteSheet动画
EN

Stack Overflow用户
提问于 2014-08-06 02:21:30
回答 1查看 6.8K关注 0票数 1

我目前正在做一个小的2D Java游戏,我刚刚完成了修复所有的bug/错误等等,这些都是我从CodeNMore的YouTube教程中学到的。

在我的游戏中,他的一切都是最新的,我一直在努力扩展我的游戏。所以,我为一个面向不同方向的角色创建了一个精灵。不幸的是,我一点也不知道该如何展示这些图像。

为了进一步解释,CodeNMore使用了以下代码行:来自SpriteSheet.java

代码语言:javascript
复制
public BufferedImage crop(int col, int row, int w, int h){
        return sheet.getSubimage(col * 16, row * 16, w, h);
}

我现在面临的问题是,我不知道如何在spritesheet上动画/更改字符sprite,只要它们向某个方向移动。

也就是说,如果玩家是向右的,我需要图像(默认情况下,在0列,0行)更改为第1列,第3行。

一旦完成,我就得弄清楚如何给玩家动画。(希望我能自己想清楚)。

您需要看到的所有内容都可以从这个媒体火下载:

20.zip

这正是CodeNMore一直在处理的文件,只是在/res中使用了我的spritesheet。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-06 03:34:59

下面是我使用的动画类

代码语言:javascript
复制
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中的图像之间的滴答数。然后,在你的刻度方法(或者你用什么勾选对象)中,调用run动画,在你的渲染方法中,当你想渲染动画时调用drawAnimation方法。如果将翻转参数添加为true,它将自动反转图像序列。你给它Img1,Img2,Img3,Img4,Img5。它将处理为Img1,Img2,Img3,Img4,Img5,Img4,Img3,Img2。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25151300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档