Animation 二维动画不工作

Animation 二维动画不工作,animation,render,slick2d,Animation,Render,Slick2d,我正在使用Slick2d制作我的第一个游戏,但是我在尝试使用动画时遇到了麻烦 我试图做的是有一个主实体类和运动和渲染组件。我想要的是,当玩家按下箭头键时,该方向的行走动画开始播放,当他们不按下时,动画停止 当我第一次测试组件时,我只对不同方向使用了一张图像,效果很好。这只会让我更加困惑。游戏屏幕出现,只要我不按下任何箭头键。当我这样做,正确的方向明智的精灵动画开始和位置的正确变化,但当它到达最后一帧,游戏窗口关闭,我得到一个错误。这是它在控制台上告诉我的: Wed Mar 21 13:20:47

我正在使用Slick2d制作我的第一个游戏,但是我在尝试使用动画时遇到了麻烦

我试图做的是有一个主实体类和运动和渲染组件。我想要的是,当玩家按下箭头键时,该方向的行走动画开始播放,当他们不按下时,动画停止

当我第一次测试组件时,我只对不同方向使用了一张图像,效果很好。这只会让我更加困惑。游戏屏幕出现,只要我不按下任何箭头键。当我这样做,正确的方向明智的精灵动画开始和位置的正确变化,但当它到达最后一帧,游戏窗口关闭,我得到一个错误。这是它在控制台上告诉我的:

Wed Mar 21 13:20:47 PDT 2012 INFO:Slick Build #274
Wed Mar 21 13:20:47 PDT 2012 INFO:LWJGL Version: 2.0b1
Wed Mar 21 13:20:47 PDT 2012 INFO:OriginalDisplayMode: 1366 x 768 x 32 @60Hz
Wed Mar 21 13:20:47 PDT 2012 INFO:TargetDisplayMode: 750 x 600 x 0 @0Hz
Wed Mar 21 13:20:48 PDT 2012 INFO:Starting display 750x600
Wed Mar 21 13:20:48 PDT 2012 INFO:Use Java PNG Loader = true
Wed Mar 21 13:20:49 PDT 2012 INFO:Controllers not available
Wed Mar 21 13:20:52 PDT 2012 ERROR:null
java.lang.NullPointerException
at bunny.component.render.RenderComponent.render(RenderComponent.java:22)
at bunny.entity.Entity.render(Entity.java:177)
at bunny.game.BunnyGame.render(BunnyGame.java:56)
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:681)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:408)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:318)
at bunny.game.BunnyGame.main(BunnyGame.java:66)
Wed Mar 21 13:20:52 PDT 2012 ERROR:Game.render() failure - check the game code.
org.newdawn.slick.SlickException: Game.render() failure - check the game code.
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:684)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:408)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:318)
at bunny.game.BunnyGame.main(BunnyGame.java:66)
因为它的渲染似乎有问题,我检查以确保无论在哪里使用精灵,它都不会仍然试图将其视为图像而不是动画。我还确保render具有正确的参数,调用draw,当仍然不起作用时,我尝试让它只渲染当前帧,因为我知道render对图像有效。所有这些都没有解决我的问题

我已经在线搜索了很长一段时间了,现在我很确定问题可能出在我的运动组件或渲染组件中。问题是,我发现的唯一一个能解决这个问题的教程是

这是我的渲染组件类:

public class RenderComponent extends Component {    
Image image;

public RenderComponent(String id)
{
    this.id = id;
}

public void render(GameContainer gc, StateBasedGame sb, Graphics gr) 
{
    Vector2f pos = owner.getPosition();
    image.draw(pos.x, pos.y);
}

@Override
public void update(GameContainer gc, StateBasedGame sb, int delta) {
    image = owner.getDirection().getCurrentFrame();
}
}
这是我的箭头键移动类:

public class ArrowKeyMovement extends Component{

float direction;
float speed;

public ArrowKeyMovement( String id )
{
    this.id = id;
}

public float getSpeed()
{
    return speed;
}

@Override
public void update(GameContainer gc, StateBasedGame sb, int delta)
{
    // 0 - up, 1 - down, 2 - left, 3 - right
    Input input = gc.getInput();
    Vector2f position = owner.getPosition();

    if (input.isKeyDown(Input.KEY_UP))
    {
        owner.setSprite(0);
        if (owner.getDirection().isStopped()) {
            owner.getDirection().restart();
        }
        owner.getDirection().update(delta);
        position.y -= delta * 0.2f;
    }
    else if (input.isKeyDown(Input.KEY_DOWN))
    {
        owner.setSprite(1);
        if (owner.getDirection().isStopped()) {
            owner.getDirection().restart();
        }
        owner.getDirection().update(delta);
        position.y += delta * 0.2f;
    }
    else if (input.isKeyDown(Input.KEY_LEFT))
    {
        owner.setSprite(2);
        if (owner.getDirection().isStopped()) {
            owner.getDirection().restart();
        }
        owner.getDirection().update(delta);
        position.x -= delta * 0.2f;
    }
    else if (input.isKeyDown(Input.KEY_RIGHT))
    {
        owner.setSprite(3);
        if (owner.getDirection().isStopped()) {
            owner.getDirection().restart();
        }
        owner.getDirection().update(delta);
        position.x += delta * 0.2f;
    }
    else 
    {
        if (!(owner.getDirection().isStopped())){
            owner.getDirection().stop();
        }
    }

    owner.setPosition(position);
}
}
在我的实体类中,我这样调用RenderComponent:

public void render(GameContainer gc, StateBasedGame sb, Graphics gr)
{
    if(renderComponent != null)
        renderComponent.render(gc, sb, gr);
}

很抱歉,我对我的问题含糊其辞,但我发誓我真的试图自己解决它。如果我没有提供足够的信息,告诉我,我会提供更多。谢谢你抽出时间!如果您有更详细的教程,我非常感谢。

您确定在调用使用image变量的render方法之前,在RenderComponent类中初始化图像吗


换句话说,在调用渲染方法之前,是否确保在RenderComponent中至少调用一次update方法?

加载动画时,是否确保帧列表的大小与加载到内存中的图像/帧数相同?渲染过程中出现空指针异常,我想知道您是否将一个或多个动画帧留空?