0

好的,所以我知道可以在渲染语句中渲染图像。不过,我确实有一个问题。有没有一种方法可以动态创建对象(例如平面类)并通过称为纹理的字符串创建和渲染图像?例如,如果我有一个名为 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,当我声明它并将它的更新语句添加到 BasicGame 文件中的 update() 循环时,如何制作这个类的称为纹理渲染的图像?包杂项;

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 类在玩家处于其中时将其向左移动。但是,我怎么能通过调用上面所说的

Current myCurrent = new Current(100, player);
4

2 回答 2

0

在我看来,当您加载 Bullet 对象时,请在构造函数中加载图像并将其保存在变量中。也就是说,如果文件不是太大而无法保存在内存中。

public Bullet(){
    //Load image here
}

据我所知,更新方法是循环调用的。假设您的问题在子弹类中,只需执行以下操作:

@Override
public void update(GameContainer gc, int delta) throws SlickException {
    bullet.update()
}

如果您在更新方法中调用循环,那么它只会在游戏的任何内容可以执行、更新或应用之前循环子弹。您要确保整个游戏可以公平更新。

编辑 1

我现在明白你的意思了。为了渲染对象的图像,这就是我所做的。我不知道这是否是最好的方法,但我就是这样做的。

首先,我应该向对象添加一个绘制方法;确保添加了 Slick 的图形实现。

public void paint(Graphics g){
    g.drawImage(image, X, Y);
}

在渲染方法中,您将调用您的对象并对其进行绘制。

public void render(GameContainer gc, Graphics g){
    bullet.paint(g);
}

这将允许您将对象渲染到屏幕上。现在请记住,当您需要在屏幕上绘制多个东西时,您需要将它们按顺序排列,否则它们会重叠。

于 2013-06-02T10:36:58.717 回答
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 内置了循环。

于 2016-03-11T21:01:03.260 回答