Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Biostasis
0 / 0 / 0
Регистрация: 23.08.2016
Сообщений: 1
#1

Обновление элементов интерфейса через промежутки времени - Программирование Android

23.08.2016, 10:53. Просмотров 233. Ответов 0

Итак, решил я написать свою игру по типу шариков (просто для самообразования). Есть поле 9х9, каждая клетка кнопка (знаю, не продуктивно, может подскажете как умнее реализовать?), есть методы для генерирования математической модели поля и метод для применения математической модели на кнопочках (обновление Drawable). Сейчас я воюю с A* алгоритмом. Решил в нем сразу запилить обновление кнопок, чтобы путь показывался в реальном времени. Использовал компонент Timer, но он работает совсем не так как задумано изначально. Я понимаю в чем проблема, но совсем не понимаю как можно её решить... Никаких идей.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
private void assignPathfinder(Logic logic, final CellType startCell, CellType endCell) {
        class PathCell extends CellType {
            private CellType parent;
            private CellType end;
            private int g;
            private int h;
            private int f;
 
            public PathCell(int x, int y, int type, CellType p, CellType e, int c) {
                super(x, y, type);
                parent = p;
                end = e;
 
                switch (c) {
                    case 1:
                        g = 10;
                        break;
                    case 2:
                        g = 14;
                        break;
                }
                h = (Math.abs(this.x - e.getX()) + Math.abs(this.y - e.getY())) * 10;
                f = g + h;
            }
 
            public void setByParent(CellType parent) {
                x = parent.getX();
                y = parent.getY();
            }
 
            public int getF() {
                return f;
            }
 
            public void setParent(CellType parent) {
                this.parent = parent;
                h = (Math.abs(this.x - end.getX()) + Math.abs(this.y - end.getY())) * 10;
                f = g + h;
            }
 
            public CellType getParent() {
                return parent;
            }
 
            public CellType getEnd() {
                return end;
            }
        }
        int price = 1000;
        int back = -1;
        gameLogics.setCell(startCell.getX(), startCell.getY(), startCell.getType());
        x = startCell.getX();
        y = startCell.getY();
        type = startCell.getType();
 
        gameTime.schedule(new TimerTask() {
            @Override
            public void run() {
                TimerMethod();
                System.out.println("I'm done");
            }
        }, 5000); //Задолбался. Фурычить не изволит...
 
        ArrayList<PathCell> open = new ArrayList<PathCell>();
        final PathCell critical = new PathCell(startCell.getX(), startCell.getY(), startCell.getType(), startCell, endCell, 0);
        open.add(critical);
        Cell backup = new Cell();
        boolean r = true;
        while(r) {
            for(int i = critical.getX()-1; i < critical.getX()+2; i++) {
                for(int j = critical.getY()-1; j < critical.getY()+2; j++) {
                    if(logic.getCell(i, j) == 0) {
                        PathCell c = new PathCell(i, j, logic.getCell(i, j), critical.getParent(), critical.getEnd(), 1);
                        if((i == critical.getX()-1 && (j == critical.getY()-1 || j == critical.getY()+1)) || (i == critical.getX()+1 && (j == critical.getY()-1 || j == critical.getY()+1))) {
                            c = new PathCell(i, j, logic.getCell(i, j), critical.getParent(), critical.getEnd(), 2);
                        }
                        open.add(c);
                    }
                }
            }
            for (int i = 0; i < open.size(); i++) {
                if (open.get(i).getF() < price) {
                    price = open.get(i).getF();
                    back = i;
                }
            }
            time.schedule(new TimerTask() {
                @Override
                public void run() {
                    TimerMethod();
                    System.out.println("I'm done");
                }
            }, 5100); //Ну и чего тебе надо, удотище?
 
            backup.setX(critical.getX());
            backup.setY(critical.getY());
 
            critical.setParent(open.get(back));
            critical.setByParent(open.get(back));
            gameLogics.setCell(backup.getX(), backup.getY(), 0);
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    TimerMethod();
                    System.out.println("I'm done");
                }
            }, 5200); //Сжечь в костре святой Инквизиции!
 
            price = 1000;
            back = -1;
            open.clear();
            gameLogics.setCell(critical.getX(), critical.getY(), critical.getType());
 
            x = critical.getX();
            y = critical.getY();
            type = critical.getType();
            gtime.schedule(new TimerTask() {
                @Override
                public void run() {
                    TimerMethod();
                    System.out.println("I'm done");
                }
            }, 5300); //Не изволит запускаться-с
 
            if(critical.getX() == critical.getEnd().getX() && (critical.getY() == critical.getEnd().getY() || critical.getY() == critical.getEnd().getY()+1)) {
                r = false;
            }
        }
    }
Мне нужно, чтобы цикл while словно "приостанавливался" и терпеливо ждал пока приложение не применит метод assignLogics(). Но по мере загугливания проблемы, я понял, что это скорее всего невозможно. А как реализовать это по умному - пока не знаю...
Заранее благодарю за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2016, 10:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Обновление элементов интерфейса через промежутки времени (Программирование Android):

Обновление времени через Runnable
Я решил облегчить алгоритм обновления времени, который делается через Timer. ...

Выполнение метода интерфейса через инстанс класса
Добрый день. Есть такой вопрос. Допустим у меня есть интерфейс: ...

Наложение элементов интерфейса
Вопрос вот в чем: можно ли расположить элементы интерфейса, чтобы их области...

Динамическое создание элементов интерфейса
Здравствуйте. Мне интересно знать, как динамически создавать элементы...

Динамическое создание элементов интерфейса
Здравствуйте. Есть небольшая проблема с динамическим созданием элементов...

Таймер и изменение элементов интерфейса
Необходимо, чтобы через определенный промежуток времени после клика на...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2016, 10:53
Привет! Вот еще темы с решениями:

Создание элементов интерфейса в Java коде
Здравствуйте! У меня есть класс PuzzleView, реализующий собственный View. В...

Самозапуск макроса через промежутки времени
Как можно сделать, чтобы макрос самозапускался через определенные промежутки...

Самозапуск модуля через промежутки времени
Подскажите ,пож-ста, 1.как можно сделать самозапуск модуля через определенные...

Вылетают игры через разные промежутки времени
Проблема следующая. Вылетают игры через некоторое время игры. Время варьируется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru