我正在尝试用GameEngine制作游戏。我紧跟着本教程example,在该视频中,他很好地解释了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);
}
}
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
答案 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上将其缩小到合适的大小。