2015-08-21 2 views
0

У меня есть карточная игра, которая использует программно установить GridView с настраиваемой ArrayAdapter подключили к массиву «карты», чтобы оживить листать карты при работе через getView(). Мне нужно знать, когда все карты сделаны с переворачиванием, так что игра может снова или снова выполнить или, возможно, выполнить другое действие, если это необходимо на основе текущего состояния карт. Это должно произойти после последней анимации текущего флип, конечно (я уже знаю состояние карт, но я хочу иметь дело или другие действия, чтобы произойти «в порядке» после того, как карты перевернуты и до того, как пользователь сможет внести какие-либо изменения на экран). Я знаю, что могу подсчитать и установить глобальную переменную и/или опрос для состояния, но я бы предпочел, чтобы это было «правильным» способом - если такой способ лучше, чем глобальный счет/опрос. Я не могу понять, как лучше это делать. Предложения оценены!изменения Android вида OnComplete

ответ

1

Если вы хотите, чтобы отслеживать подробные состояния карт через вашу игру, я хотел бы предложить вам установить один объект для каждого из cards.ie

public class Card { 
    public enum CardState { 
     CARD_FACE, CARD_FLIPPING, CARD_BACK 
    } 
    private CardState cardState; 
    //other card object variables 

    public Card(){ 
     cardState = CardState.CARD_BACK; 
     //other card object variables default status 
    } 

    public CardState getCardState() { 
     return cardState; 
    } 

    public void setCardState(CardState cardState) { 
     this.cardState = cardState; 
    } 

    //other getters and setters 
} 

Используйте массив для хранения всех объектов карты в вашем игровом контроллере. Проверяя массив, вы можете определить следующее действие.

+0

Спасибо @VoidExplorer, я думаю, что понял то же самое, чем больше думал об этом. Я пытался избежать опроса состояния карт, но поскольку они анимированы, на самом деле не существует способа опроса. Даже если было событие onComplete lifecycle для ArrayAdapter или представления (кажется, нет), анимации происходят в их собственных потоках. Я буду использовать ваше решение благодаря! – htk

+0

Если вы действительно заинтересованы в создании игр, попробуйте некоторые игровые движки, такие как Unity, LibGDX. Они обрабатывают много сложных процессов для вас, например, анимации, входные и выходные данные, звуковые эффекты и т. Д. – VoidExplorer

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