2010-03-04 2 views
0

Я перемещаю свою игру в свой собственный пакет, чтобы сделать его полезным в будущих играх. я Реализован класс строителей, как предложил один из пользователей здесь: Interfaces, static classes problemПредоставление класса Builder для кода клиента

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(); 
} 

ответ

1

Дело в том, ваш строитель как этот

public interface Builder<T> { 
    public T build(); 
} 

Вобще

public interface SpriteBuilder<T extends Sprite> extends Builder<T> { 
    Builder<T> onReceiveKey(Sprite.ReceiveKeys receiver); 
} 

и изменить Строители в

public final class Builders { 
    public static SpriteBuilder newGameObjectBuilder(Point location, int drawable) { 
     return new GameObjectImpl.GameObjectBuilder(location, drawable); 
    } 
} 

и ваш GameObjectBuilder к

class GameObjectImpl extends AbstractSprite { 
    public static class GameObjectBuilder implements SpriteBuilder { 
    ... 
    } 
} 
+0

Когда я делаю Builder Я получаю синтаксическую ошибку. Я поместил этот интерфейс в свой интерфейс Sprite – jax

+0

Я получил эту работу, но мне пришлось объявить, как этот SpriteBuilder extends Builder jax

+0

Да, ваш второй комментарий - это путь. Я отредактирую его! – Lombo

Смежные вопросы