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

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

04.02.2014, 13:29. Показов 1797. Ответов 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.
Как быть?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.02.2014, 13:29
Ответы с готовыми решениями:

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

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

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

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

Не по теме:

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

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

А если попробовать, не создавать нового игрока, а только изменить координаты текущему,
т.е. вместо
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  [ТС]
Netscape, не помогло
стектрейс останавливается на
Java
1
ViewRootImpl.deliverInputEvent(ViewRootImpl$QueuedInputEvent) line: 3546
0
 Аватар для Netscape
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.02.2014, 17:13
Ну я уже и не знаю в какую сторону гадать.
В общем, если хотите, давайте полностью проект, в личку например, ну, если нет, то нет.
1
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
04.02.2014, 23:25  [ТС]
Netscape,
спасибо буду разбираться.

Добавлено через 6 часов 8 минут
разобрался, спасибо за просмотры
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.02.2014, 23:25
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 17.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 14.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru