gpt4 book ai didi

java - 使用图像序列和数组绘制动画?

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:27 25 4
gpt4 key购买 nike

作为一个像你们这些出色的堆栈 super 英雄一样经验不足的程序员,我正在为一些我认为可能非常简单的事情而烦恼。

我的目标是为我正在创建的游戏的标题屏幕提供动画背景。 (使用 Slick2D)就像《我的世界》的标题屏幕上有一个动画背景一样。在寻找答案后,我一直在尝试使用有人在论坛上建议的这种方法。但我似乎无法理解它。

代码如下:

package com.polython.game;

import org.lwjgl.input.Mouse;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;

public class Menu extends BasicGameState{
Image[] bg;
Image logo;

public Menu(int State){}

public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{
//Bit of code that generates a .png sequence.
//A.K.A. The magic of the Main Menu.

final int bgFrames = 251;

Image[] bg = new Image[bgFrames];
String fileLocation = new String();
for (int i = 1; i < bgFrames; i++){
fileLocation = "res/img/bg/" + i + ".png";
bg[i] = new Image(fileLocation);
}
}

public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
logo.draw(145, 25, .5f); //Centering the logo
g.drawRect(100, 100, 200, 50);
g.drawString("Play", 180, 115);
}

public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
int posX = Mouse.getX();
int posY = Mouse.getY();

//Not sure why this is here so early.
if((posX > 100 && posX<311) && (posY > 209 && posY < 260)){
if(Mouse.isButtonDown(0)){
sbg.enterState(1);
}
}
}
public int getID(){
return 0;
}
}

图片全部在“/res/img/bg”中,从1.png到250.png

我经常遇到的错误是这样的:

Sat Nov 08 21:08:35 CST 2014 INFO:Slick Build #237 Sat Nov 08 21:08:35 CST 2014 INFO:LWJGL Version: 2.9.0 Sat Nov 08 21:08:35 CST 2014 INFO:OriginalDisplayMode: 768 x 1360 x 32 @60Hz Sat Nov 08 21:08:35 CST 2014 INFO:TargetDisplayMode: 640 x 360 x 0 @0Hz Sat Nov 08 21:08:35 CST 2014 INFO:Starting display 640x360 Sat Nov 08 21:08:35 CST 2014 INFO:Use Java PNG Loader = true Sat Nov 08 21:08:35 CST 2014 INFO:Controllers not available [Lorg.newdawn.slick.Image;@26d0fffc [Lorg.newdawn.slick.Image;@46446e0c Sat Nov 08 21:08:37 CST 2014 ERROR:null java.lang.NullPointerException at com.polython.game.Menu.render(Menu.java:35) at org.newdawn.slick.state.StateBasedGame.render(StateBasedGame.java:199) at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:688) at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411) at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321) at com.polython.game.Game.main(Game.java:29) Sat Nov 08 21:08:37 CST 2014 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:691) at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411) at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321) at com.polython.game.Game.main(Game.java:29)

希望我能尽快得到一些帮助,我们将不胜感激:)多谢你们,-初学者

最佳答案

首先,我建议你使用ArrayList来代替。另外,看起来错误来自 g.drawString()。尝试删除该行并查看是否有效,如果有效,则原因是 X 和 Y 使字符串在 JFrame 之外绘制。这是一件愚蠢的事情,但我总是从中得到错误。这是主要问题,因为您甚至没有绘制 bg[] 图像。此外,您还在 init() 方法中创建另一个 Image[] bg 变量。那是没有必要的。首先在方法外部创建私有(private)变量。

private static List<BufferedImage> bg = new ArrayList<BufferedImage>();
private static Integer time = 0;

ArrayList 更好。然后在 init() 方法中,将其添加到将图像添加到列表的位置。

public void init() {
Integer max = 250;
for (int i = 0; i < max; i++) {
try {
bg.add(ImageIO.read(new File("res/img/bg/" + i + ".png")));
catch (IOException e) {
e.printStackTrace();
}
}
}

然后在您的 render() 方法中执行此操作

public void render(Graphics g) {
Graphics2D g2;
if (g instanceof Graphics2D) {
g2 = (Graphics2D) g;
}
// The stuff you already had
g.drawImage(g.get(time), X, Y, null);
}

然后在您的 update() 方法中将其添加到时间相加的位置。

public void update() {
if (time < bg.size()) {
time++;
}
else {
time = 0;
}
}

然后这应该创建动画。现在,如果您没有设置 FPS 系统,则在调用 update()render() 方法的主类文件中,键入

try {
Thread.sleep(1000/FPS);
catch (Exception e) {}

您应该将 FPS 设置为 60。然后这应该可以工作。如果有问题,抱歉,因为我只是在没有 Eclipse 的情况下输入代码。我只是凭内存这样做,因为我总是编写这些类型的程序/游戏。

关于java - 使用图像序列和数组绘制动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26824636/

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