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

Организация структуры объектов - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Объясните про поля класса http://www.cyberforum.ru/android-dev/thread1045263.html
Всем привет. Объясните, пжл., почему когда я в полях класса идентифицирую какую-нибудь view (например, вот так): EditText edTexEnterInterval = (EditText) findViewById(R.id.edTexEnterInterval); то приложение всегда вылетает с ошибкой, даже не запустившись. А если я view определяю в каком-нибудь методе, то всё нормально, всё работает. Почему так?
Android Остановка зацикленого потока Есть активити. Из него запускается сервис. В методе onStartCommand сервиса, запускается поток, в котором присутствует бесконечный цикл. При остановке сервиса из активити, поток продолжает работать. Как его остановить из активити. http://www.cyberforum.ru/android-dev/thread1044763.html
GPS Tracker Android
Функционал: шлёт GPS координаты по UDP. Струкутра: Activity - запускает и останавливает сервис, отображает кол-во отправленных и принятых пакетов, позволяет менять некоторые настройки (частота отправки, сервер) Service - Запускает LocationListener, UDP и по получению обновления от GPS или истечению некоторого (keep Alive) периода отсылает пакет. Уже написанный код на моём телефоне (Samsung...
Android Авторизированное http соединение (coockies)
Здравствуйте, на сервере авторизация проверяется так: - проверяется есть ли куки (login & pass) - если есть присваивается статус "авторизованный" и more actions.. - если нет то присваивается статус "гость" и more actions.. Суть в том что к скриптам обслуживающим android-приложение будет доступ только для авторизованного пользователя, поэтому при каждом запросе клиент должен посылать куки...
Android Ошибка потока в сервисе http://www.cyberforum.ru/android-dev/thread1043842.html
Создаю сервис, он должен выполнять парсинг сайта, загрузку звука с сайта, сохранение этого звука на флешку и воспроизведение. Написал код который все это выполняет в Активити. Но нужно чтобы это все делалось в фоне. Для этого решил использовать сервис. Чтобы не грузило основной поток приложения, которое запускает сервис, решил все эти задачи поместить в отдельный поток в сервисе. Но не работает....
Android Кнопка ответа на звонок из приложения Всем привет! У меня возникла следующая проблема: в приложении хочу сделать кнопку ответа на входящий звонок, при этом чтобы стандартный экран ответа ОС на звонок не отображался поверх моей программы. Как можно реализовать? подробнее

Показать сообщение отдельно
GukZiLLA
 Аватар для GukZiLLA
35 / 35 / 2
Регистрация: 30.11.2013
Сообщений: 102
18.12.2013, 20:14     Организация структуры объектов
Ну, массив классов - это массив родительских объектов.
Все остальные объекты мира наследуются всегда от родительского.
В родительском классе описаны самые основные методы и переменные.

Объявите в родительском классе переменную type и у вас будут разные типы объектов по их именам.
У кирпича String type = "brick", у монстра, например, "monster" и т.п.

Если грамотно делать, то расчеты и отрисовка должны происходить в одном цикле.
А чтобы при тормозах отрисовки не возникало замедления - юзайте deltaTime (разница по времени между двумя ближайшими кадрами) - она должна быть равна единице, и все рассчеты умножайте на deltaTime.

Создайте в каком-нибудь из базовых классов метод draw и отрисовывайте персонажей в потомках.
Также у каждого персонажа живого свои методы переопределяются.

Не нужно создавать отдельные массивы для отрисовки. просто в цикле прогона по всем объектам детектите их по типу(type), о котором говорил выше.

Если type == brick, то его можно привести под (Brick) и вытянуть все методы и переменные.


Например вот так:
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
List<Obj> listObj = new ArrayList<Obj>();
    
    class Obj {
        String type;
        
    }
    
    class Brick extends Obj {
 
        int x;
        int y;
        int width;
        int height;
        
        Brick(String name, int x, int y, int width, int height) {
            this.type = name; // parent type
            this.x = x;
            this.y = y;
            this.width = width;
            this.height = height;
        }
        
        public void draw(Canvas c) {
            // .........
            Log.i("brick", "draw");
        }
        
        
        
    }
    
    
    class Monster extends Obj {
 
        int x;
        int y;
        int width;
        int height;
        float speed;
        int damage;
        
        Monster(String name, int x, int y, int width, int height, float speed, int damage) {
            this.type = name; // parent type
            this.x = x;
            this.y = y;
            this.width = width;
            this.height = height;
            this.speed = speed;
            this.damage = damage;
        }
        
        public void move(float deltaTime) {
            // .......
            Log.i("monster", "move");
        }
        
        public void draw(Canvas c) {
            // .........
            Log.i("monster", "draw");
        }
        
    }
Проверим, сработает ли))

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// for example
        for(int i = 0; i <= 10; i++) {
            listObj.add(new Brick("brick", i*10, i*10, 100, 100));
            listObj.add(new Monster("monster", i*10, i*10, 20, 40, 5, 10));
        }
        
        // main loop
        for(Obj o : listObj) {
            if(o.type.hashCode() == "brick".hashCode()) {
                Brick b = (Brick) o;
                b.draw(null);
            }
            if(o.type.hashCode() == "monster".hashCode()) {
                Monster m = (Monster) o;
                m.draw(null);
                m.move(1);
            }
        }
На выходе видим:

brick: draw
monster: draw
monster: move
brick: draw
monster: draw
monster: move
brick: draw
monster: draw
monster: move
brick: draw
monster: draw
monster: move
brick: draw
monster: draw
monster: move
brick: draw
monster: draw
monster: move
brick: draw
monster: draw
monster: move
brick: draw
monster: draw
monster: move
brick: draw
monster: draw
monster: move
brick: draw
monster: draw
monster: move
brick: draw
monster: draw
monster: move
Как-то так. Везде есть нюансы и лучше делать конечно все через движок, например LibGDX.

Добавлено через 12 минут
Вообще для динамического удаления монстров надо будет юзать Iterator

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    Iterator<Obj> iter = listObj.iterator();
        while(iter.hasNext()) {
            Obj o = iter.next();
            if(o.type.hashCode() == "brick".hashCode()) {
                Brick b = (Brick) o;
                b.draw(null);
            }
            if(o.type.hashCode() == "monster".hashCode()) {
                Monster m = (Monster) o;
                m.draw(null);
                m.move(1);
                
                // удаляем монстра
                if(m.life <= 0) {
                    iter.remove();
                }
            }
        }
 
Текущее время: 16:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru