好的,所以我理解图像可以在render语句中呈现。不过,我确实有一个问题。有没有办法可以动态创建一个对象(例如Plane类),并通过一个名为Texture的String创建和渲染一个Image?例如,如果我有一个名为Bullet的类,如何在运行时动态创建图像
Bullet myBullet = new Bullet();
?我真的很感激一些帮助。
示例:
class Bullet
{
public float x, y = 0;
public float rotation = 0;
public void bullet(posX, posY)
{
x = posX;
y = posY;
}
另外,如何让它自动循环一个方法(我已经在主类中运行了循环,但是如何将其附加到块?)?
public void update() {
x += 2 * Math.cos((Math.PI / 180) * rotation);
y += 2 * Math.sin((Math.PI / 180) * rotation);
}
}
谢谢,
乔
编辑:通过创建图片,我的意思是也渲染它。
或者,对于我正在处理的游戏,其行为有点像Frogger,当我声明它并将它的update语句添加到BasicGame文件中的update()循环时,如何使这个类的图像称为纹理渲染? 包misc;
import mobile.MobileOctopus;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
public class Current {
public Image texture;
public float x, y = 0;
MobileOctopus player;
public Current(int posY, MobileOctopus character) throws SlickException
{
texture = new Image("res/current.png");
x = 0;
y = posY;
player = character;
}
public void update()
{
x -= 3;
if(x < -380)
{
x = 0;
}
if(player.y + 32 > y && player.y + 32 < y + 32)
{
player.x -= 3;
}
}
}
当他在里面时,当前课程将玩家向左移动。但是,我怎么能通过调用
来说明Current myCurrent = new Current(100, player);
答案 0 :(得分:0)
在我看来,当你加载Bullet对象时,在构造函数中加载图像并将其保存在变量中。也就是说,如果文件不是太大而无法保留在内存中。
public Bullet(){
//Load image here
}
据我所知,在循环中调用update方法。在你的子弹类中填充你的问题只需这样做:
@Override
public void update(GameContainer gc, int delta) throws SlickException {
bullet.update()
}
如果你在更新方法中调用一个循环,那么只有在任何游戏可以执行,更新或应用之前,它才会循环。你想确保整个游戏能够公平地更新。
编辑1
我明白你的意思。为了渲染对象的图像,这就是我所做的。我不知道这是不是最好的方法,但我就是这样做的。
首先,我应该为Object添加一个paint方法;确保添加Slick的图形实现。
public void paint(Graphics g){
g.drawImage(image, X, Y);
}
在渲染方法中,您可以调用对象并绘制它。
public void render(GameContainer gc, Graphics g){
bullet.paint(g);
}
这将允许您将对象渲染到屏幕上。现在记住,当你需要在屏幕上绘制多个东西时,你需要将它们按顺序排列,否则它们会重叠。
答案 1 :(得分:0)
当你制作游戏时,Slick2D将自动调用游戏的更新方法和渲染方法。您所要做的就是让游戏的更新/渲染调用对象的更新/渲染。
以下是一个例子:
import org.newdawn.slick.*;
public class ExampleGame extends BasicGame {
public static void main(String[] args) throws SlickException {
//creates and starts the game
AppGameContainer g = new AppGameContainer(new ExampleGame("Title"));
g.start();
}
public ExampleGame(String title) {
super(title);
}
public void render(GameContainer container, Graphics g)
throws SlickException {
// This code automatically runs on a loop
System.out.println("render");
}
public void init(GameContainer container) throws SlickException {
// This code runs once
System.out.println("init");
}
public void update(GameContainer container, int delta)
throws SlickException {
// This code automatically runs on a loop:
System.out.println("update");
}
}*
这是输出到日志的内容:
init
render
update
render
update
render
render
render
update
render
...
如您所见,示例代码没有循环调用渲染或更新。 Slick2D内置了循环。