Я перевожу мою Игру в ее собственный пакет, чтобы сделать ее полезной в будущих играх.
Я реализовал класс Builders, как предложил один из пользователей здесь: Интерфейсы, проблема статических классов
public final class Builders {
public static Builder<? extends Sprite> newGameObjectBuilder(Point location, int drawable) {
return new GameObjectImpl.GameObjectBuilder(location, drawable);
}
}
Проблема теперь в том, что клиентский код не может использовать методы компоновщика (пример ниже). Я получаю следующее:
"The method onReceiveKey(new Sprite.ReceiveKeys(){}) is undefined for the type Builder<capture#4-of ? extends Sprite>"
В принципе, я не могу использовать ни один из методов внутри публичного статического вызова GameObjectBuilder.
onReceiveKey
не работает. Доступен только метод build()
интерфейса Builder
.
public static Sprite newSoldier(int x, int y) {
return Builders.newGameObjectBuilder(new Point(x,y), R.drawable.soldier)
.onReceiveKey(new Sprite.ReceiveKeys() {
@Override
public void onKeyUp(int keyCode, Sprite self, Room room ) {
}
@Override
public void onKeyDown(int keyCode, Sprite self, Room room ) {
if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
self.moveY(room, 1, Direction.S);
}
else if(keyCode == KeyEvent.KEYCODE_DPAD_UP){
self.moveY(room, -1, Direction.N);
}
else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT){
self.moveX(room, -1,Direction.W);
}
else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
self.moveX(room, 1, Direction.E);
}
}
})
.build();
}