Android анимация и выполнениеНажмите, чтобы создать Game AI - PullRequest
0 голосов
/ 28 января 2011

Я пытаюсь создать иллюзию ИИ с помощью автоматического нажатия кнопок.

Я знаю, что могу использовать инфраструктуру анимации и использовать executeClick для представлений Button, но можете ли вы порекомендовать способ добавления вызова executeClick () в последовательность анимации?

Спасибо за любую помощь, которую вы можете оказать!

1 Ответ

0 голосов
/ 21 июля 2011

Мое решение (подход, основанный на MVC):

Мы можем создать стек предопределенных действий: Stack<AIAction> replay = new Stack<AIAction>(); (AIAction - модель)

Затем мы можем добавить каждое новое действие в наш стек для последующего воспроизведения: replay.add(new AIAction(AIAction.SELECT,...)); Вся логика и решения принимаются здесь. (Контроллер)

После того, как у нас есть набор действий, мы можем воспроизвести их и отобразить анимацию для пользователя (просмотр):

    for (int i=0;i<replay.size();i++,start+=pause()){
        AIAction thisAction = replay.get(i);

        switch(thisAction.getAction()){

        case AIAction.SELECT:
            scheduleSelect(start,...);
            break;
        case AIAction.REENABLE_CLICKING:
            scheduleReEnableClicking(start);
            break;
        case AIAction.TOAST:
            if (thisAction.getToast())
                scheduleToast(thisAction.getMessage(),start,true);
            else
                scheduleToast(thisAction.getMessage(),start,false);
            break;
        }
    }

Теперь нам нужны такие функции, как scheduleSelect(), scheduleReEnableClicking() и scheduleToast(): Это создает впечатление «думающего» ИИ и позволяет пользователю следовать за ним.

// for example:
private void scheduleSelect(int start,...){

    Handler handler = null;

handler = new Handler(); 
handler.postDelayed(new Runnable(){
    // select logic after 'start' milliseconds
    ...
}, start);


}

private void scheduleReEnableClicking(int start){
    Handler handler = null;

    handler = new Handler();
    handler.postDelayed(new Runnable(){
         public void run(){
                     // set clickable logic after 'start' milliseconds
            setClickable(true);
         }
    }, start);
}

private void scheduleToast(final String message,int start){
    Handler handler = null;

    handler = new Handler(); 
handler.postDelayed(new Runnable(){
    public void run(){
        toast(message,pause());
        }
    }, start);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...