java - 如何将 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 的第二个
解决方案
据我所知,您只在 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 上将其缩小到大小。
推荐阅读
- dataframe - 如何将列表列与 pyspark 数据框列相交?
- java - 如何在Java中使用循环将字符串分成字母组?
- apache-spark - 如何使用 pykafka 消费者从主题中获取数据
- django - 清理 request.POST 对象并检查它是否有效
- javascript - 在单击全选按钮后检查/取消选中复选框的减速器功能-redux react
- angular-material - 材料表中的可扩展行,在切换选项卡上的 mat-tab 中使用时扩展所有行
- c# - 在运行时无法找到 dllimports MSTest c#
- python - 编码要在 KMeans 聚类中使用的分类特征
- angular - 如何选择性地显示共享组件的内容
- mysql - mysql order by 不适用于 group by