Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Biostasis
0 / 0 / 0
Регистрация: 23.08.2016
Сообщений: 1
#1

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

23.08.2016, 10:53. Просмотров 178. Ответов 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):

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

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

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

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

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

Самозапуск модуля через промежутки времени - VBA
Подскажите ,пож-ста, 1.как можно сделать самозапуск модуля через определенные промежутки времени (аналог Application.Ontime в Excel)? ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2016, 10:53
Привет! Вот еще темы с ответами:

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

Вызов функции через равные промежутки времени - C++
Привет. Нужно передавать принимать данные через usb hid устройство. Для этого нужно через равные промежутки времени (допустим 1 сек.)...

.NET 4.x Показывать MessageBox через заданные промежутки времени - C#
Приветь всем, как можно в Visual studio 2012 через указанному время таймера (например через 10 секунду ) показывать message box

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


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

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

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