如何将LinkedList addObject添加到游戏中

时间:2019-01-29 04:45:24

标签: java game-engine

我正在尝试用GameEngine制作游戏。我紧跟着本教程example,在该视频中,他很好地解释了LinkedList,我理解了这个概念,但是我想使用我拥有的GameEngine.java(在下面链接)。因此,请在代码中实现代码,但是在游戏中看不到handler.addObject(new Box(200, 100));的结果。

这是游戏屏幕的屏幕截图。

enter image description here

蓝色矩形示例来自drawRectangle(100,100,32,32); game.java

所以我的问题是如何在不更改GameEngine.java的情况下如何查看handler.addObject结果

这是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 :(得分:0)

据我所知,您仅在main方法中创建了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();。两次。

如果您想学习OOP,并且已经对Java基础有了扎实的了解,那么您不应该使用java.awt来做Graphics,因为它已经过时了。更现代的游戏开发工具是LWJGL 2-3或OpenGL。如果您不熟悉OOP编程,则实际上不需要学习诸如链表之类的杂技。我发现简单的基于文本的项目(例如this text adventure tutorial)更加基础,并且可以教授多态性和其他概念。

此外,您的代码中的可用空间过多。编程时,请勿过多使用输入栏,或者至少在Stack Overflow上将其缩小到合适的大小。