Java - Slick2D - 动态创建对象

时间:2013-05-31 19:35:37

标签: java graphics lwjgl slick2d spawning

好的,所以我理解图像可以在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);

2 个答案:

答案 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内置了循环。