在一行中调用所有相同的命名方法

时间:2014-02-26 12:01:32

标签: java game-engine lwjgl

我想在我的游戏引擎(用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制作游戏,所以请不要生气,如果这是一个明显的东西。谢谢!

1 个答案:

答案 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