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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 421
#1

Динамическое создание динамических обьектов - Android

04.02.2014, 13:29. Просмотров 1137. Ответов 16
Метки нет (Все метки)

Пишу игру. Есть уровни. В каждом уровне заданное количество обьектов-соперников.
Есть класс Соперник, который содержит функции перемещения, отображения и т д. Есть класс, который всем этим управляет.
Надо реализовать метод в котором бы создавались Соперники в зависимости от уровня, причем их количество не зависит от уровня.
Есть идея такая . Создаю переменную LEVEL целого типа.
У меня максимальное количество соперников ограничено шестью.
Обьявляю в главном классе 6 Сопреников и присваюю им null.
Java
1
2
3
4
5
6
Rival rival1=null;
Rival rival2=null;
Rival rival3=null;
Rival rival4=null;
Rival rival5=null;
Rival rival6=null;
Первый уровень задается в конструкторе (для начала пойдет)
Далее в функции проверки завершения уровня делаю
Java
1
2
3
4
5
6
7
8
9
10
11
12
if(isWin()) // если победил
        {
LEVEL=LEVEL+1;
            switch (LEVEL) //
            {
            case '2':  // уровень 2
                 // и тут допустим в первом уровне у меня был 1 Соперник
                 // я делал так, создаю сколько мне надо соперников, допустим 3
                
 Rival rival1=new Rival(параметры);
 Rival rival2= new Rival (параметры);
 Rival rival3= new Rival (параметры);
Но, в главном классе у меня идет управление соперниками, функции Перемещения, Отрисовки, которые вызывают соответствующие функции Соперников.
Допустим функция Перемещения будет выглядеть так
Java
1
2
3
4
5
6
7
8
9
10
public void Move()
{
rival1.move();
rival2.move();
rival3.move();
rival4.move();
rival5.move();
rival6.move();
 
}
Но, в первом уровне создан только один соперник, а остальные null.
Как быть?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 13:59     Динамическое создание динамических обьектов #2
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Обьявляю в главном классе 6 Сопреников
Java
1
List<Rival> rivals;
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Далее в функции проверки завершения уровня делаю
Java
1
2
3
4
5
6
7
8
9
if(isWin())  {
LEVEL=LEVEL+1;
switch (LEVEL) {
            case '2':
                 rivals = new ArrayList<Rival>(3);
        for (int i = 0; i < 3; i++) {
            Rival rival = new Rival(параметры);
            rivals.add(rival);
        }
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Допустим функция Перемещения будет выглядеть так
Java
1
2
3
4
5
6
    public void Move() {
        for (int i = 0; i < rivals.size(); i++) {
            Rival rival = rivals.get(i);
            rival.move();
        }
    }
LighterV
4 / 4 / 0
Регистрация: 08.08.2013
Сообщений: 48
04.02.2014, 13:59     Динамическое создание динамических обьектов #3
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Rival rival1=null;
Rival rival2=null;
Rival rival3=null;
Rival rival4=null;
Rival rival5=null;
Rival rival6=null;
Похоже, что вы не знаете, что такое массивы или списки.
Ваш код из 6 объектов Ruval можно представить как
Java
1
Rival[] rivals = new Rival[6];
А ещё лучше
Java
1
List<Rival> rivals = new ArrayList<Rival>();
Читайте про коллекции Java в интернете или книгах.
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 421
04.02.2014, 15:58  [ТС]     Динамическое создание динамических обьектов #4
Netscape, почему после создание нового уровня не работает onTouchEvent()
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
 public boolean onTouchEvent(MotionEvent e) 
    {
        Log.d(tag,"Touch");
        for(int i=0; i<boxs.size(); ++i)
        {
            Box box=boxs.get(i);
            box.MoveBox((int)e.getX(),(int) e.getY());
        }
                
                
        
        player.MovePlayer((int)e.getX(),(int) e.getY());
        
        if(isWin())
        {
            Log.d(tag, "isWin():true");
            switch ( level_ )
            {
            
            
            case 2:
                Log.d(tag, "switch");
        
        // затираю маску
                Log.d(tag, "clear Mask");
                canvas_Mask.drawBitmap(fon_white, 0, 0, null);
        // создаю Player і задану кількість Box
                player= new Player(this, photo_player,367,613);
                boxs=new ArrayList<Box>(3);
                Box box1= new Box (this, photo_box, 288, 534);
                boxs.add(box1);
                Box box2= new Box (this, photo_box, 288, 613);
                boxs.add(box2);
                Box box3= new Box (this, photo_box, 446, 534);
                boxs.add(box3);
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 16:05     Динамическое создание динамических обьектов #5
Исходя из этого кода, сказать ничего не могу. Выглядит вполне нормально.
Единственное, я бы разделил onTouchEvent на типы (ACTION_UP, ACTION_DOWN, etc).
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 421
04.02.2014, 16:09  [ТС]     Динамическое создание динамических обьектов #6
Netscape, класс управления наследовал от SurfaceView
рисую так, в отдельном потоке
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
public void run()
        {
            
            while (running)
            {
                                            
                Canvas canvas = null;
             
                
                try
               {
                    // подготовка Canvas-а
             
                    canvas = view.getHolder().lockCanvas();
                    synchronized (view.getHolder())
                    {
                        // собственно рисование
                        
                        Draw(canvas);
                
                       
                        
                    }
                }
                catch (Exception e) { }
                finally
                {
                    if (canvas != null)
                    {
                        view.getHolder().unlockCanvasAndPost(canvas);
                        
                    }
                }
            }
Когда то слышал что onTouchEvent прикреплен к поверхности, может быть он ее каким то образом теряет?
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 16:18     Динамическое создание динамических обьектов #7
Цитата Сообщение от ASDFD12 Посмотреть сообщение
canvas_Mask.drawBitmap(fon_white, 0, 0, null);
этот метод работает?
в куске кода invalidate не наблюдаю.

Добавлено через 1 минуту
Java
1
super.onTouchEvent(event);
тоже не вижу.
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 421
04.02.2014, 16:31  [ТС]     Динамическое создание динамических обьектов #8
Цитата Сообщение от Netscape Посмотреть сообщение
этот метод работает?
Все команды в операторе switch выполняються - заменяеться фон, выводяться новые соперники обновляеться положение Player, и потом не работает onTouch.
Цитата Сообщение от Netscape Посмотреть сообщение
в куске кода invalidate не наблюдаю.
я его не вызываю у меня прорисовка происходит автоматически
Сейчас попробую добавить
Java
1
super.onTouchEvent(event);
Добавлено через 3 минуты
ничего не изменилось
verylazy
04.02.2014, 16:31
  #9

Не по теме:

Цитата Сообщение от ASDFD12 Посмотреть сообщение
выполняються - заменяеться выводяться обновляеться

не читать

Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 16:39     Динамическое создание динамических обьектов #10
Покажите мне класс Player.
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 421
04.02.2014, 16:43  [ТС]     Динамическое создание динамических обьектов #11
verylazy, пишу гибридом украинский+русский

Добавлено через 4 минуты
Netscape, основные функции
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
 
public class Player {
    
public GameView gameView;
    
    //спрайт
public Bitmap bmp;
final String tag="TAG";
//х и у координаты рисунка
public int x1;
public int y1;
 
Canvas canvas_bitmap;
Bitmap bitmap;
 
public boolean moving=false;
 
 
private boolean isYacheyka=false;
private int coord_yachejki[]={0,0};
private boolean YacheykaIsSosedWithPlayer=false;
 
 public void MovePlayer(int cordinat_X, int cordinat_Y)
 {
     // проверка положения ящиков
     
     
     
     
    
     this.isYacheyka(cordinat_X, cordinat_Y);
     this.isYacheykaSosedWithPlayer(this.coord_yachejki[0], this.coord_yachejki[1]);
     if (this.YacheykaIsSosedWithPlayer)
     {
         if(this.moving==true){
             Log.d(tag,"Player, moving:true, minayu koordinatu");
         this.x1=this.coord_yachejki[0];
         this.y1=this.coord_yachejki[1];
         this.moving=false;
         Log.d(tag,"Player, koordinatu pominalu, moving:"+this.moving);
         }
         
     }
    public Player(GameView gameView, Bitmap bmp1, int x, int y)
{
    bitmap=gameView.bitmap;
    canvas_bitmap = new Canvas(bitmap);
    this.bmp = bmp1;                    //возвращаем рисунок
    this.gameView = gameView;
 
    
    this.x1 = x;                      
    this.y1 =y ; 
    
    
} 
 }
public void Draw()
{
    //Log.d(tag, "player.ondraw"+"x1="+this.x1+"y1="+this.y1);
    canvas_bitmap.drawBitmap(bmp, this.x1, this.y1, null);
}
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 16:51     Динамическое создание динамических обьектов #12
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Canvas canvas_bitmap;
никак не могу понять, зачем здесь канвас?
Он должен быть только один.
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 421
04.02.2014, 16:57  [ТС]     Динамическое создание динамических обьектов #13
я рисую в два bitmapa c помощью двух canvas. Один используется для маски, второй для вывода на экран.
На экран вывожу с помощью канваса прикрепленного к поверхности
Java
1
 canvas = view.getHolder().lockCanvas();
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 17:02     Динамическое создание динамических обьектов #14
Окей, я не понимаю зачем это, всегда рисовал на одном, и мне хватало.

А если попробовать, не создавать нового игрока, а только изменить координаты текущему,
т.е. вместо
Java
1
player= new Player(this, photo_player,367,613);
написать как-то так:
Java
1
2
player.setX(367);
player.setY(613);
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 421
04.02.2014, 17:09  [ТС]     Динамическое создание динамических обьектов #15
Netscape, не помогло
стектрейс останавливается на
Java
1
ViewRootImpl.deliverInputEvent(ViewRootImpl$QueuedInputEvent) line: 3546
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 17:13     Динамическое создание динамических обьектов #16
Ну я уже и не знаю в какую сторону гадать.
В общем, если хотите, давайте полностью проект, в личку например, ну, если нет, то нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 23:25     Динамическое создание динамических обьектов
Еще ссылки по теме:

Динамическое создание элементов интерфейса Android
Динамическое создание интерфейса Android
Динамическое создание drawable-ресурса Android
Android Динамическое создание элементов на активити
Android Динамическое создание таблиц SQLite

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

Или воспользуйтесь поиском по форуму:
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 421
04.02.2014, 23:25  [ТС]     Динамическое создание динамических обьектов #17
Netscape,
спасибо буду разбираться.

Добавлено через 6 часов 8 минут
разобрался, спасибо за просмотры
Yandex
Объявления
04.02.2014, 23:25     Динамическое создание динамических обьектов
Ответ Создать тему
Опции темы

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