-1

我在返回并添加到我的游戏的主循环时遇到问题,如果我可以从我不知道的类创建对象,这个任务将被消除。

现在我有:

if (Monesers.Zombie.canBeCreated(world,objects)){
    Zombie.add(new Monster())
}

if (Monesers.Sceleton.canBeCreated(world,objects)){
    objects.add(new Monster())
}

我正在寻找可以循环到所有类而不提及类名称的东西,这样我就不必为游戏中的每一个新事物一遍又一遍地复制相同的代码。

4

1 回答 1

1

反射会把你带到某个地方......我不知道它是否是首选方法。

你可以做这样的事情。让每个怪物类型实现一个接口,如下所示:

public interface Monster {

    public boolean canBeCreated ( );

}

然后你可以有一个怪物创造者,像这样:

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class MonsterCreator {

    private Monster[] monsterTypes;

    public MonsterCreator ( ) {
        monsterTypes = new Monster[2];
        monsterTypes[0] = new Zombie ( );
        monsterTypes[0] = new Skeleton ( );
    }

    public void tick ( ) {
        for ( Monster m : monsterTypes ) {
            if ( m.canBeCreated ( ) ) {
                try {
                    Constructor< ? >[] constr = m.getClass ( )
                        .getConstructors ( );
                    Monster toAdd = ( Monster ) constr[0].newInstance ( );
                    MonsterContainer.add ( toAdd );
                } catch ( InstantiationException | IllegalAccessException
                    | IllegalArgumentException | InvocationTargetException e ) {
                    e.printStackTrace ( );
                }
            }
        }
    }

}

值得一试... :)

当然,怪物类型的事情可以通过类似于链接到类类型的枚举常量映射来更整洁地完成......再次,这只是为了示例。只是想在问题结束之前发布这个!

于 2013-06-02T16:28:11.257 回答