Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
1

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

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

Author24 — интернет-сервис помощи студентам
Пишу игру. Есть уровни. В каждом уровне заданное количество обьектов-соперников.
Есть класс Соперник, который содержит функции перемещения, отображения и т д. Есть класс, который всем этим управляет.
Надо реализовать метод в котором бы создавались Соперники в зависимости от уровня, причем их количество не зависит от уровня.
Есть идея такая . Создаю переменную 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.
Как быть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2014, 13:29
Ответы с готовыми решениями:

Создание динамических таблиц
Столкнулась с проблемой при создании таблицы. Мне нужно, чтобы после того как пользователь ввел в...

динамическое создание обьектов и их обработка XE2 C++
Помогите пожалуйста, обработать событие в XE2 C++ ...

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

Динамическое создание обьектов и обработка событий в них
вот такое дело перехожу на си шарн с языка дельфай, и вот интересует динамическое создание обьектов...

16
374 / 361 / 52
Регистрация: 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();
        }
    }
1
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 в интернете или книгах.
1
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
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);
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 16:05 5
Исходя из этого кода, сказать ничего не могу. Выглядит вполне нормально.
Единственное, я бы разделил onTouchEvent на типы (ACTION_UP, ACTION_DOWN, etc).
1
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
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 прикреплен к поверхности, может быть он ее каким то образом теряет?
0
374 / 361 / 52
Регистрация: 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);
тоже не вижу.
1
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
04.02.2014, 16:31  [ТС] 8
Цитата Сообщение от Netscape Посмотреть сообщение
этот метод работает?
Все команды в операторе switch выполняються - заменяеться фон, выводяться новые соперники обновляеться положение Player, и потом не работает onTouch.
Цитата Сообщение от Netscape Посмотреть сообщение
в куске кода invalidate не наблюдаю.
я его не вызываю у меня прорисовка происходит автоматически
Сейчас попробую добавить
Java
1
super.onTouchEvent(event);
Добавлено через 3 минуты
ничего не изменилось
0
verylazy
04.02.2014, 16:31
  #9

Не по теме:

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

0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 16:39 10
Покажите мне класс Player.
0
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
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);
}
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 16:51 12
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Canvas canvas_bitmap;
никак не могу понять, зачем здесь канвас?
Он должен быть только один.
1
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
04.02.2014, 16:57  [ТС] 13
я рисую в два bitmapa c помощью двух canvas. Один используется для маски, второй для вывода на экран.
На экран вывожу с помощью канваса прикрепленного к поверхности
Java
1
 canvas = view.getHolder().lockCanvas();
0
374 / 361 / 52
Регистрация: 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);
1
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
04.02.2014, 17:09  [ТС] 15
Netscape, не помогло
стектрейс останавливается на
Java
1
ViewRootImpl.deliverInputEvent(ViewRootImpl$QueuedInputEvent) line: 3546
0
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 17:13 16
Ну я уже и не знаю в какую сторону гадать.
В общем, если хотите, давайте полностью проект, в личку например, ну, если нет, то нет.
1
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
04.02.2014, 23:25  [ТС] 17
Netscape,
спасибо буду разбираться.

Добавлено через 6 часов 8 минут
разобрался, спасибо за просмотры
0
04.02.2014, 23:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2014, 23:25
Помогаю со студенческими работами здесь

Создание динамических события от динамических элементов
Доброго времени суток! В общем беда такая, создаю по циклу, например 10 опендиалогов и 10 баттонов,...

Создание обьектов
Обьясните почему возникает ошибка, и решение. Зарание спасибо. package interface_work; public...

Создание обьектов
Вообщем задача такова: у меня есть сервис, к которому подключена БД, и клиент, который должен...

Создание редактора обьектов
Не знаютуда не туда. Нужно создать редактор обьектов таков. Нажимаем на свойство выпадает окно в...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru