Пятница, 13 Декабря 2024, 19:28

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Большой вопрос для профи. Систем переключения между уровнями
ggmanДата: Среда, 31 Августа 2011, 23:17 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Прежде чем перейти к вопросу, опишу свою систему переключения между уровнями.
Есть две переменные:
level и level_max
В окне выбора уровня программа провеняет какой сейчас level_max и дает доступ ко всем уровням от первого и до level_max.
Все уровни находяться на одном кадре. При Входе на кадр программа проверяет какой сейчас level выбран и расставляет елементы. по прохождению уровня появляется кнопка Next со следующим кодом внутри:
Code
switch (level)
{case 10:
if (level_max == 10){level_max = 11;};level = 11;load_lvl();
break;
case 9:
if (level_max == 9){level_max = 10;};level = 10;load_lvl();
break;
case 8:
if (level_max == 8){level_max = 9;};level = 9;load_lvl();
break;
case 7:
if (level_max == 7){level_max = 8;};level = 8;load_lvl();
break;
case 6:
if (level_max == 6){level_max = 7;};level = 7;load_lvl();
break;
case 5:;
if (level_max == 5){level_max = 6;};level = 6;load_lvl();
break;
case 4:
if (level_max == 4){level_max = 5;};level = 5;load_lvl();
break;
case 3:
if (level_max == 3){level_max = 4;};level = 4;load_lvl();
break;
case 2:
if (level_max == 2){level_max = 3;};level = 3;load_lvl();
break;
case 1:
if (level_max == 1){level_max = 2;};level = 2;load_lvl();
break;
}

load_lvl(); - тот процесс, который в зависимомти от level все расставляет.
Если проходить уровни один за другим, то все в порядке. Нажал next перешел дальше, level_max тоже увеличилось на единицу.
НО, если, например дойти до четвертого уровня, затем вернуться в меню и перейти на первый, то при нажатии на next игра перескакивает на третий, да и вобще вся система начинает глючить. Например, по прохождении уровня 5 - получаешь доступ к седьмому.
И собственно вопрос, кто может сказать с чем связан этот глюк и как от него избавится? Буду ооочень благодарен за ответ.


Сообщение отредактировал ggman - Среда, 31 Августа 2011, 23:27
froexДата: Среда, 31 Августа 2011, 23:25 | Сообщение # 2
Руководитель Froexilize team
Сейчас нет на сайте
ggman,


Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее.
Алгоритмы, программирование, оптимизация, тестирование, ведение проектов.
Ищу художника, дизайнера, тестера, программистов С и С++
Обучаю процессам разработки и программированию.


Сообщение отредактировал froex - Среда, 31 Августа 2011, 23:28
ggmanДата: Среда, 31 Августа 2011, 23:29 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Недавно изменил систему на другую. Создал массив из 30 елимнтов. При нажатии next пишу level = level + 1; Доступ из меню к уровню открываеться при загрузке смого уровня. level_max[n] = true;
Но проблем никуда не пропала. Помогите пожалуйста.

Добавлено (31.08.2011, 23:29)
---------------------------------------------
froex
Наверное я слишком мало общаюсь с программистами, так-ка юмора не понял.

froexДата: Среда, 31 Августа 2011, 23:35 | Сообщение # 4
Руководитель Froexilize team
Сейчас нет на сайте
Code
for(int i=1;i<=10;++i)
      if(level==i)
          if(level_max==i)
          {
              ++level_max;
              level = level_max;
              load_lvl();
              break;
          }

Пожалуйста, убери спаггети!
Вроде то же самое.


Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее.
Алгоритмы, программирование, оптимизация, тестирование, ведение проектов.
Ищу художника, дизайнера, тестера, программистов С и С++
Обучаю процессам разработки и программированию.


Сообщение отредактировал froex - Среда, 31 Августа 2011, 23:36
KornivalДата: Среда, 31 Августа 2011, 23:40 | Сообщение # 5
The Witcher
Сейчас нет на сайте
ggmanДата: Среда, 31 Августа 2011, 23:47 | Сообщение # 6
постоянный участник
Сейчас нет на сайте

KornivalДата: Среда, 31 Августа 2011, 23:48 | Сообщение # 7
The Witcher
Сейчас нет на сайте
что происходит с переменной level когда ты переходишь в меню?
ggmanДата: Среда, 31 Августа 2011, 23:53 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Ничего. Смысла с ней что-то делать - нету. При нажатии на кнопку выбора уровня в меню level меняется на тот что прописан.
Пример:
Code
lvl_2_btn.addEventListener(MouseEvent.CLICK, function(){level = 2; gotoAndStop("lvl");});


Сообщение отредактировал ggman - Четверг, 01 Сентября 2011, 00:01
noTformaTДата: Четверг, 01 Сентября 2011, 00:01 | Сообщение # 9
Ukrainian independent game developer
Сейчас нет на сайте
Quote (ggman)
Большой вопрос для профи.

ggman, я вообще не понял всю структуру переключения между уровнями, вот например возмем вот это:
switch (level)
{
case 10:
if (level_max == 10){level_max = 11;};level = 11;load_lvl();
break;
case 9:
if (level_max == 9){level_max = 10;};level = 10;load_lvl();
break;
.... и т.д.

Да тут чисто логически понятно что все эти спагети можно заменить вот на этот блок кода:

level_max = level + 1;
level = level + 1;
load_lvl();

Теперь давай проверим, правильно ли все заменено.
Начнем с level = 10;
в твоих спагети при case 10: значение переменной level_max равно 11, значение переменной level тоже равно 11.
в том коде что привел я - все тоже самое smile

Если я что то не так понял, то скажи что не так.


@noTformaT
KornivalДата: Четверг, 01 Сентября 2011, 00:08 | Сообщение # 10
The Witcher
Сейчас нет на сайте
noTformaT, froex привел код на С, в AS он скомпилится?
ggmanДата: Четверг, 01 Сентября 2011, 00:08 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
в твоих спагети при case 10: значение переменной level_max равно 11, значение переменной level тоже равно 11.
Ну... В оригинале уровней 30 smile Я просто весь код ставить не хотел))

А вот за
Code
level_max = level + 1;  
level = level + 1;  
load_lvl();

спасибо. Сейчас буду проверять))
noTformaTДата: Четверг, 01 Сентября 2011, 00:16 | Сообщение # 12
Ukrainian independent game developer
Сейчас нет на сайте
Quote (Kornival)
froex привел код на С, в AS он скомпилится?

у ас3 практически все алгоритмически структуры похожи на структуры с++. if, switch, for, while и т.д все как в с++


@noTformaT
ggmanДата: Четверг, 01 Сентября 2011, 00:26 | Сообщение # 13
постоянный участник
Сейчас нет на сайте
Заменил код в nextна этот:
Code
if (level_max == level){level_max = level + 1;};    
level = level + 1;    
load_lvl();

Захожу на первый уровень, прохожу его, второй, третий, дохожу до четвертого, возвращаюсь в меню.
Снова захожу на превый, прохожу его и после нажатия next меня переносит на четвертый.
Кто знает, что за глюки???


Сообщение отредактировал ggman - Четверг, 01 Сентября 2011, 00:28
iLORdДата: Четверг, 01 Сентября 2011, 11:34 | Сообщение # 14
заслуженный участник
Сейчас нет на сайте
Quote (ggman)
Захожу на первый уровень, прохожу его, второй, третий, дохожу до четвертого, возвращаюсь в меню. Снова захожу на превый, прохожу его и после нажатия next меня переносит на четвертый.

У тебя номер текущего уровня обновляется только в конце, что ли? По всему видно, что при выходе в меню и повторном заходе на первый уровень у тебя level остаётся таким, каким был до этого. Меню-то у тебя как работает - с обращением к level или без?


Bread Games - пилим ураганный экшен!
ggmanДата: Четверг, 01 Сентября 2011, 21:13 | Сообщение # 15
постоянный участник
Сейчас нет на сайте
Выход в меню рабоает без обращения к level.
кнопка входа на првый уровень.
Code
lvl_1_btn.addEventListener(MouseEvent.CLICK, function(){level = 1; gotoAndStop("lvl");});

Kнопка перхода на следующий уровень:
Code
next_btn.addEventListener(MouseEvent.CLICK, function() {
          switch (level)
    {case 31:
     stage.removeEventListener(Event.ENTER_FRAME, movePlayer); gotoAndStop('choose_lvl');
     break;
     }
    level = level + 1;
    load_lvl();
});


Я вот думаю, может где-то здесь нужно написать return level; ?


Сообщение отредактировал ggman - Четверг, 01 Сентября 2011, 21:16
iLORdДата: Пятница, 02 Сентября 2011, 09:43 | Сообщение # 16
заслуженный участник
Сейчас нет на сайте
Может, ты обращаешься к разным level? Тем более, что окно выбора уровней у тебя на другом кадре, как я понял.

Bread Games - пилим ураганный экшен!
ggmanДата: Пятница, 02 Сентября 2011, 11:36 | Сообщение # 17
постоянный участник
Сейчас нет на сайте
Разве можно чтоб было две переменные содинаковым названием?
iLORdДата: Пятница, 02 Сентября 2011, 19:48 | Сообщение # 18
заслуженный участник
Сейчас нет на сайте
В разных областях видимости - да.

Bread Games - пилим ураганный экшен!
ggmanДата: Воскресенье, 04 Сентября 2011, 11:09 | Сообщение # 19
постоянный участник
Сейчас нет на сайте
Перекопал весь код. Увы, проблема не в этом.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг