我想在我的游戏引擎(用Java SE编写)中创建类似“行为逻辑”的东西,但是我没有制作一个,因此我不知道如何确保自动调用所有子类方法。它的工作方式类似于Unity3D的行为(如Update(),Start()...),但是对于逻辑。在这里,我提供了实现它的试验
public abstract class Behaviour {
void Start(){}
abstract void Update(){}
}
此类由DaturaBehaviour类继承
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制作游戏,所以请不要生气,如果这是一个明显的东西。谢谢!
答案 0 :(得分:2)
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();
}
}
输出:
haf
mooooo
haf
haf
haf
mooooo
mooooo
mooooo
haf
mooooo
haf
haf
mooooo
haf
mooooo
haf
haf