TLDR:我需要一个可以从2个类中接收对象的变量。
我正在开发一个Java 2D游戏,仍然有基础工作,这里我有一个问题:在类Actor中,在构造函数中,actor生成其hitbox(4个XY坐标对象)然后将该hitbox添加到需要检查冲突的事物列表中。
但是现在我已经完成了所有这些工作,我创建了一个新课程,平台,这样我的角色就可以在其他东西上行走,而不是玷污它的敌人。但是在Rect构造函数中,我有一个变量(Parent
),它将自己设置为调用构造函数的对象(在参数中使用自身),所以我会得到hitbox.parent()= player。
但是由于Platform对象来自另一个类(我不想从Actor类继承),我怎样才能使它成为Rect并给自己一个不同类型的父类?
现在的课程
package misc;
import item.Platform;
import npc.Actor;
public class Rect {
int x,y,wdt,hgt;
public Rect(Actor a){
x = a.x;
y = a.y;
wdt = a.wdt;
hgt = a.hgt;
}
public Rect(Platform p){
parent = p;
x =p.x;
y =p.y;
wdt =p.wdt;
hgt =p.hgt;
}
}
这里是我无法调用它的地方
private static void collision(Rect r1,Rect r2){
if (r1.y -r2.y <= r2.hgt && r1.y -r2.y >= -r2.hgt){
r1.parent.yCol = true;
}else{
r1.parent.yCol = false;
}
if (r1.x -r2.x <= r2.wdt && r1.x -r2.x >= -r2.wdt){
r1.parent.xCol = true;
}else{
r1.parent.xCol = false;
}
}
答案 0 :(得分:1)
您需要使用继承,这是面向对象编程的最重要方面之一。您需要对其进行一些阅读,以便了解它的工作原理以及如何使用它:https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
答案 1 :(得分:1)
除了继承之外,您还可以使用基于接口的方法。
public interface GameRect {
int getX();
int getY();
int getHeight();
int getWidth();
}
public class Actor implements GameRect {
// implementation
}
public class Platform implements GameRect {
// implementation
}
public class Rect {
// implementation
private GameRect parent;
// constructor works for all classes that implement GameRect interface
public Rect(GameRect gr) {
parent = gr;
x = gr.getX();
y = gr.getY();
// etc
}
}
像这样的解决方案的问题是,每次要调用非GameRect接口方法的parent
对象上的类方法时,需要回退到原始类型(Actor和Platform)