这个标题没有很好地表达我的意思,我很抱歉,但是我很难更好地表达它,因为我不太明白由于缺乏面向对象的知识和经验所发生的事情。
我正在构建一个基本的游戏,它将让玩家在一个有“英雄”精灵的棋盘上跑来跑去,被一个'badGuy‘精灵追逐。由于这两个精灵共享5-6个方法,所以我决定创建一个超类'Sprite‘和两个类'Hero’和'BadGuy扩展雪碧‘。对于所有这些超级方法,包括:
getX(); getY(); getBounds(); render();为了工作,我需要一个超级班来追踪“英雄”和“坏家伙”的位置。所以我就这样实现了‘雪碧’
package game.sprites;
import javafx.scene.shape.Rectangle;
import javax.swing.*;
import java.awt.*;
public class Sprite {
public static int x;
public static int y;
private int imageWidth;
private int imageHeight;
public Image image;
public Sprite(int x, int y) {
Sprite.x = x;
Sprite.y = y;
}
public static void render(Graphics g, Image image) {
g.drawImage(image, x, y, null);
}
public Image loadImage(String filePath) {...}
public void getImageDimensions() {...}
public Rectangle getBounds() {
return new Rectangle(x, y, imageWidth, imageHeight);
}
public Image getImage() {
return image;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}当我想给'Hero‘和'BadGuy’对象提供不同的起始坐标时,问题就开始了。目前,如果我将它们设置为不同,第二个调用“Sprite”将覆盖第一个调用,并且两个调用都是在同一个位置开始的(如果您的目标是从‘badGuy’中运行,这将非常令人沮丧)。“英雄”和“BadGuy”目前是这样初始化的:
public class BadGuy extends Sprite {
public BadGuy() {
super(x, y);
initBadGuy();
}
public void initBadGuy() {
loadImage("resources/craft.gif");
getImageDimensions();
x = 860; // Hero x = 20;
y = 560; // Hero y = 20;
}所以我尝试做的是让子类覆盖Sprite的x和y,但是我搜索了它,我知道这是一个非常糟糕的想法,因此它是不可能的。因此,我的问题是:如何使'Sprite‘继承子类'x’和'y‘变量,并在调用某个子类时执行必要的方法。
现在我来看看它--对于子类,构造函数和init<>()都是相同的,所以也许它们可以用'Sprite‘来实现呢?只是一个想法,但我已经很困惑了,所以不知道。
谢谢。
发布于 2016-04-07 12:20:13
您会遇到这个问题,因为x和y在Sprite类中被声明为静态字段。
如果一个字段被声明为静态的,那么不管最终创建了多少个类的实例(可能为零),字段的一个化身都是存在的。当类初始化时,静态字段(有时称为类变量)被具体化(§12.4)。
使用以下代码:
更改您的雪碧类如下:
public class Sprite {
public int x;
public int y;
....
}BadGuy类:
public class BadGuy extends Sprite {
public BadGuy(int x, int y) {
super(x, y);
...
}
....
}英雄班:
public class Hero extends Sprite {
public Hero(int x, int y) {
super(x, y);
...
}
....
}从主类中执行以下操作://从要创建两个类的对象的位置开始
public static void main(String[] args){
Hero hero = new Hero(20,20);
BadGuy badGuy= new BadGuy(860,560);
}https://stackoverflow.com/questions/36475809
复制相似问题