- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
作为一个像你们这些出色的堆栈 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/
我正在阅读 Python 文档以真正深入了解 Python 语言,并遇到了 filter 和 map 函数。我以前使用过过滤器,但从未使用过映射,尽管我在 SO 上的各种 Python 问题中都见过这
当我尝试打印 BST 的级别顺序时,这个问题提示了我。 这是一个 Pre-Order Sequence: 4, 1, 2, 3, 5, 6, 7, 8 In_order Sequence : 1, 2
我的代码在 main(序列测试;)的第一行出现错误,指出它是对 sequence::sequence() 的 undefined reference 。我无法更改 main 中的代码。有谁知道我该如何
这可能很简单,但我在通常的 latex 指南中找不到任何相关内容。在这句话中: {\em hello\/} “\/”的目的是什么? 最佳答案 这就是所谓的斜体校正。其目的是确保斜体文本后有适当的间距。
当我从 Postgresql 表中删除所有记录,然后尝试重置序列以在插入时开始一个编号为 1 的新记录时,我得到不同的结果: SELECT setval('tblname_id_seq', (SELE
在版本10.0.3中,MariaDB引入了一种称为序列的存储引擎。 其ad hoc为操作生成整数序列,然后终止。 该序列包含正整数,以降序或升序排列,并使用起始,结束和递增值。 它不允许在多个查询中
如何在 Groovy 中获取给定数字的序列,例如: def number = 169 // need a method in groovy to find the consecutive number
基本上,如果这是 .NET,它看起来像这样: ISomething { string A { get; } int B { get; } } var somethings = new List
说以下代码部分(同一块): A <= 1 A <= 2 变量 A 总是被赋值为 2 吗?还是会出现竞争条件并分配 1 或 2? 我对非阻塞赋值的理解是,由硬件在 future 分配变量 A,因此它可能
在运行 WiX 设置时,我正在寻找操作列表及其顺序。不知何故,官方网站似乎没有提供任何信息。 基本问题是我想正确安排我的自定义操作。通常我需要使用 regsvr32.exe 注册一个 DLL,而这只能
F#初学者在这里 我想创建一个类型,它是具有至少一个元素的另一种具体类型(事件)的序列。任何其他元素都可以在以后随时添加。通常在 C# 中,我会创建一个具有私有(private) List 和公共(p
作为构建过程和不断发展的数据库的一部分,我试图创建一个脚本,该脚本将删除用户的所有表和序列。我不想重新创建用户,因为这将需要比所允许的更多的权限。 我的脚本创建了一个过程来删除表/序列,执行该过程,然
我想恢复两个向量的第一个日期和相同向量的第二个日期之间的日期序列,.... 这是一个例子: dates1 = as.Date(c('2015-10-01', '2015-03-27', '2015-0
这个问题已经有答案了: sql ORDER BY multiple values in specific order? (12 个回答) 已关闭 9 年前。 我有一个 sql 语句,我想要ORDER
我想恢复两个向量的第一个日期和相同向量的第二个日期之间的日期序列,.... 这是一个例子: dates1 = as.Date(c('2015-10-01', '2015-03-27', '2015-0
在用java编写代码时,我需要用“],[”分割字符串。下面是我的代码。 try (BufferedReader reader = new BufferedReader(new InputStreamR
这个问题已经有答案了: Project Euler Question 14 (Collatz Problem) (8 个回答) 已关闭 9 年前。 我正在尝试查找数字的 Collatz 序列。以下
我有一个例程函数process_letter_location(const char& c, string &word)。 在我的 main 中,我声明了一系列字符串变量,如下所示: string s
我需要找到最长的多米诺骨牌链,给定一组 12 个随机挑选的多米诺骨牌。我已经递归地生成了多米诺骨牌的所有可能性(使用 0 到 12 的面值有 91 种可能性)。多米诺骨牌由一 block “砖 blo
我有这个数据结构 Seq,它继承了类 vector 但有一些额外的功能。使用这个数据结构 Seq 我有这个预定义的数据结构: typedef Seq > MxInt2d; 我现在想要一个包含多个 Mx
我是一名优秀的程序员,十分优秀!