Как я могу добавить LinkedList addObject в мою игру - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь сделать игру с GameEngine.Я следую этому уроку пример . В этом видео он очень хорошо объясняет LinkedList, и я понял концепцию, но я бы хотел использовать GameEngine.java (ссылка ниже), который у меня есть.Реализуйте код в моем коде, но я не вижу результат handler.addObject(new Box(200, 100)); в моей игре.

Вот скриншот экрана игры.

enter image description here

Пример с голубым прямоугольником drawRectangle(100,100,32,32); из game.java

Поэтому мой вопрос: как я могу увидеть результат handler.addObject без изменений GameEngine.java

Вот game.java;


import java.awt.Canvas;



public class game extends GameEngine{


    private static Handler handler;

    public static void main(String args[]) {


        handler = new Handler();
        handler.addObject(new Box(200, 100));

        createGame(new game());

    }









    @Override
    public void update(double dt) {
        // TODO Auto-generated method stub

        handler.update(dt);
    }

    @Override
    public void paintComponent() {
        // TODO Auto-generated method stub

        changeBackgroundColor(red);
        clearBackground(500, 500);


        changeColor(blue);
        drawRectangle(100,100,32,32);


        handler.paintComponent(mGraphics);


    }


}

GameObject.java

import java.awt.Graphics;
import java.awt.Rectangle;

public abstract class GameObject extends GameEngine{

    protected int x, y;
    protected float velX = 0, velY = 0 ;


    public GameObject(int x , int y) {

        this.x = x;
        this.y = y;


    }

    public abstract void update(double dt);
    public abstract void paintComponent(Graphics g);
    public abstract Rectangle getBounds();



    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public float getVelX() {
        return velX;
    }

    public void setVelX(float velX) {
        this.velX = velX;
    }

    public float getVelY() {
        return velY;
    }

    public void setVelY(float velY) {
        this.velY = velY;
    }

    @Override
    public void paintComponent() {
        // TODO Auto-generated method stub

    }



}

Box.java

import java.awt.Graphics;
import java.awt.Rectangle;

public class Box extends GameObject{



    public Box(int x, int y) {
        super(x, y);

    }



    public Rectangle getBounds() {

        return null;
    }



    @Override
    public void update(double dt) {
        // TODO Auto-generated method stub

        x += velX;
        y += velY;

    }




    @Override
    public void paintComponent(Graphics g) {
        // TODO Auto-generated method stub

        changeColor(blue);
        drawRectangle(x,y,32,32);

    }
}

Handler.java


import java.awt.Graphics;
import java.util.LinkedList;

public class Handler {

    LinkedList<GameObject> object = new LinkedList<GameObject>();


    public void update(double dt) {

        for(int i = 0; i <object.size(); i++) {

            GameObject tempObject = object.get(i);

            tempObject.update(dt);

        }

    }

    public void paintComponent(Graphics g) {

        for(int i = 0; i <object.size(); i++) {

            GameObject tempObject = object.get(i);

            tempObject.paintComponent(g);

        }

    }

    public void addObject(GameObject tempObject) {
        object.add(tempObject);
    }

    public void removeObject(GameObject tempObject) {
        object.remove(tempObject);
    }


}

Вот результат.Должно быть 2 синих ящика одного из game.java второго из box.java

1 Ответ

0 голосов
/ 29 января 2019

Насколько я вижу, вы создали только 1 коробку в вашем основном методе.Это потому, что

public static void main(String args[]) {


    handler = new Handler();
    handler.addObject(new Box(200, 100));

    createGame(new game());

}

имеет только один вызов handler.addObject ().В результате вы, скорее всего, получите одну коробку.Поскольку я не написал ваш код, я предполагаю, что это действительно так.

public static void main(String args[]) {


    handler = new Handler();
    handler.addObject(new Box(200, 100));
    handler.addObject(new Box(200, 200));

    createGame(new game());

}

Скорее всего, у вас будет два поля, как вы теперь назвали handler.addObject ();дважды.

Если вы пытаетесь изучать ООП и уже хорошо разбираетесь в основах Java, вам не следует заниматься графикой с помощью java.awt, так как она крайне не рекомендуется.Более современными инструментами для разработки игр являются LWJGL 2-3 или OpenGL.Если вы не очень хорошо разбираетесь в программировании ООП, акробатика, такая как связанные списки, действительно не нужна для изучения.Я обнаружил, что простые текстовые проекты, такие как это учебное текстовое приключение , являются более базовыми и могут научить полиморфизму и другим концепциям.

Кроме того, в вашем коде слишком много свободного места,Не слишком часто используйте строку ввода при программировании и, по крайней мере, не уменьшайте ее до размера в переполнении стека.

...