Java 在一行中调用所有相同的命名方法
我想在我的游戏引擎(用JavaSE编写)中创建类似“行为逻辑”的东西,但我没有创建,因此我不知道如何确保自动调用所有子类方法。它的工作原理与Unity3D的行为(如Update()、Start()…)类似,但用于逻辑。在这里,我提供了实现它的尝试Java 在一行中调用所有相同的命名方法,java,game-engine,lwjgl,Java,Game Engine,Lwjgl,我想在我的游戏引擎(用JavaSE编写)中创建类似“行为逻辑”的东西,但我没有创建,因此我不知道如何确保自动调用所有子类方法。它的工作原理与Unity3D的行为(如Update()、Start()…)类似,但用于逻辑。在这里,我提供了实现它的尝试 public abstract class Behaviour { void Start(){} abstract void Update(){} } 该类由DaturaBehavior类继承 public class Dat
public abstract class Behaviour {
void Start(){}
abstract void Update(){}
}
该类由DaturaBehavior类继承
public class DaturaBehaviour extends Behaviour{
public void AppInit()
{
Start();
System.out.println("foo");
}
public void AppRun()
{
Update();
OnGUI();
}
}
从这里我定义了将被调用的方法(例如在引擎初始化中的AppInit方法,在绘制的每个帧中AppRun)
所以这些就是这个系统的基础。我还上了一堂测试课:
public class TestBehaviour extends DaturaBehaviour {
@Override
void Start()
{
System.out.println("bar");//this isn't called dunno why
}
}
这是我第一次尝试用Java制作游戏,如果这是一个显而易见的东西,请不要生气。谢谢
I don't know how to make sure that all the subclass methods are called automatically
您必须知道调用什么以及在方法中使用哪些参数。在代码中的某个时刻,您必须手动编写要调用的方法和顺序
编辑:
啊,我可能知道你在想什么。这就是如何做到这一点的方法:
private class Something {
public void yeah() {
System.out.println("");
}
}
private class Something2 extends Something{
@Override
public void yeah(){
super.yeah();
}
}
EDIT2:好吧,这只是猜测,但我想你可能想要的是:
private static abstract class Animal{
abstract void sound();
}
private static class Dog extends Animal{
@Override
void sound() {
System.out.println("haf");
}
}
private static class Cow extends Animal{
@Override
void sound() {
System.out.println("mooooo");
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
List<Animal> animals = new ArrayList<>();
animals.add(new Dog());
animals.add(new Cow());
animals.add(new Dog());
animals.add(new Dog());
animals.add(new Dog());
animals.add(new Cow());
animals.add(new Cow());
animals.add(new Cow());
animals.add(new Dog());
animals.add(new Cow());
animals.add(new Dog());
animals.add(new Dog());
animals.add(new Cow());
animals.add(new Dog());
animals.add(new Cow());
animals.add(new Dog());
animals.add(new Dog());
for (Animal animal : animals){
animal.sound();
}
}
我知道,我想调用,因此您会看到AppInit,它将(但不)调用我计划覆盖的子类方法,而不带参数。上面的例子不起作用的问题,我给出了我想要如何实现它的见解,但不幸的是它失败了:(那么你必须更具体地说明你到底想要实现什么,以及它在哪里没有像你认为的那样起作用。我试着调用示例Start()一次所有的子类都会自动调用Start()方法(但只有在它们重写了Start()方法的情况下)我想我找到了答案,签出了编辑过的答案:)好吧,足够接近了,但在扩展类中,我想定义该对象的行为并从超类调用,所以你的答案是可以的,但我想要的是完全相反的:D(从某个东西调用yeah,这将触发子类yeah方法的自动调用)
haf
mooooo
haf
haf
haf
mooooo
mooooo
mooooo
haf
mooooo
haf
haf
mooooo
haf
mooooo
haf
haf