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

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

23.08.2016, 10:53. Просмотров 248. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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


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

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

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