Несколько дней назад я начал работать над «простой» 2D-игрой. Я попытался сделать это с помощью системы сущностей. Я получил класс GameObject, который расширяет все другие объекты, такие как деревья, враги (шлам) и так далее. Все эти игровые объекты хранятся в arrayList, называемом «gameObjects». Затем я использую цикл for для итерации всех объектов из списка и вызова их основных функций, таких как update() и draw(). До сих пор все работает, хотя я не на 100% уверен, почему. Проблема в том, что по какой-то причине я не могу сделать то же самое с коллизиями.Java | Slick2D | Сущность системы/игровой системы столкновения системы
Я знаю, что эта тема обсуждалась много раз здесь, но даже после многих дней я не могу решить эту проблему. Может кто-то мне помочь, пожалуйста? Кроме того, я прошу прощения за мой английский.
классигры:
public class Game extends BasicGame
{
public Game()
{
super("Game");
}
public void init(GameContainer gameContainer) throws SlickException
{
World.init();
}
public void update(GameContainer gameContainer, int delta) throws SlickException
{
World.update();
}
public void render(GameContainer gameContainer, Graphics g) throws SlickException
{
World.draw(g);
}
}
GameObject класс:
public abstract class GameObject
{
protected void update()
{
}
protected void draw()
{
}
}
Дерево Класс:
public class Tree extends GameObject
{
public float x, y;
private static Image tree;
public Tree(float x, float y)
{
this.x = x;
this.y = y;
tree = Resources.miscSheet.getSprite(2, 0);
}
public void draw()
{
tree.draw(x, y)
}
}
Слизь класс:
public class Slime extends GameObject
{
public static float x;
public static float y;
private static Animation slimeAnim;
public Slime(int x, int y)
{
this.x = x;
this.y = y;
// My own method for loading animation.
slimeAnim = Sprite.getAnimation(Resources.slimeSheet, 0, 0, 5, 300);
}
public void update()
{
// *Random movement here*
}
public void draw()
{
slimeAnim.draw(x, y);
}
}
мирового класса:
public class World
{
public static List<GameObject> gameObjects = new ArrayList<GameObject>();
public static void init()
{
Tree tree = new Tree(0, 0);
Tree tree2 = new Tree(200, 200);
Slime slime = new Slime(80, 80);
gameObjects.add(tree);
gameObjects.add(tree2);
gameObjects.add(slime);
}
public static void update()
{
for (int i = 0; i < gameObjects.size(); i++)
{
GameObject o = gameObjects.get(i);
o.update();
}
}
public static void draw(Graphics g)
{
g.setBackground(new Color(91, 219, 87));
for (int i = 0; i < gameObjects.size(); i++)
{
GameObject o = gameObjects.get(i);
o.draw();
}
}
}
Основной класс:
public class Main
{
public static AppGameContainer container;
public static void main(String[] args) throws SlickException
{
container = new AppGameContainer(new Game());
container.setDisplayMode(1024, 600, false);
container.setShowFPS(false);
container.start();
}
}
Я удалил все мои предыдущие попытки столкновения, и я пропустил некоторые другие ненужные вещи. Как теперь я могу, например, выполнить столкновения между деревьями и слизнями?
Да, это сработало отлично! Большое спасибо! :) – BlueHouse