首页 > 解决方案 > 如何将 LinkedList addObject 添加到我的游戏中

问题描述

我正在尝试使用 GameEngine 制作游戏。我正在关注本教程示例,在该视频中,他很好地解释了 LinkedList,我理解了这个概念,但我想使用GameEngine.java我拥有的(链接如下)。handler.addObject(new Box(200, 100));所以在我的代码中实现代码,但我在我的游戏中看不到结果。

这是游戏画面的截图。

在此处输入图像描述

蓝色矩形示例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);


    }


}

游戏对象.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

    }



}

盒子.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);

    }
}

处理程序.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);
    }


}

这是结果。应该是来自 game.java 的 2 个蓝色框之一,来自 box.java 的第二个

标签: javagame-engine

解决方案


据我所知,您只在 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 进行图形处理,因为它已被高度弃用。更现代的游戏开发工具是 LWJGL 2-3 或 OpenGL。如果您对 OOP 编程不是那么精通,那么像 Linked Lists 这样的杂技真的不需要学习。我发现简单的基于文本的项目,比如这个文本冒险教程更基础,可以教授多态性和其他概念。

此外,您的代码中有太多可用空间。编程时不要过多使用回车栏,或者至少在 Stack Overflow 上将其缩小到大小。


推荐阅读