Суббота, 23 Ноября 2024, 16:40

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Немогу победить желтые полосы поверх окна AS3 ...[Решено]
b_earДата: Понедельник, 25 Августа 2014, 19:08 | Сообщение # 1
Покорители космоса
Сейчас нет на сайте
Делаем игру на Adobe Flash CS6 (ресурсы и небольшая часть кода) и Flash Develop (весь основной код).
В игре используется Stage3D под управлением Starling для фона космоса.

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

Сами полосы по моему опыту очень похожи на выделение некоторого объекта, когда по нему ходят кнопкой TAB. Я уже отключил во всех классах в игре эту функцию, tabEnable и tabChildren установил в False для всех спрайтов и мувиков. Лагает только всего в паре мест в игре, на спрайте где есть некоторые движущиеся объекты, корабли, планета, порталы и т.д.

Полосы убираются по клику в игру или по кнопке Alt+TAB, возможно есть и другие варианты.
В игре есть движение фона по нажатию стрелок на клавиатуре, если таким образом двигать фон, то есть спрайты и фон в Stage3D, то эти полосы начинают меняться как-то интересно, если по кнопке вызвать окно которое ложится поверх всего прямо на Stage, эти полосы оказываются выше чем новое окно.

Может кто-то сталкивался, уже перебрал некоторые варианты, погуглил, ничего не помогает.

Ссылка на основную тему в ГЦУП по проекту, переход на саму игру и т.д.

Буду благодарен за любую помощь.







Сообщение отредактировал b_eat - Среда, 27 Августа 2014, 21:54
AssasinДата: Понедельник, 25 Августа 2014, 19:23 | Сообщение # 2
web-coder
Сейчас нет на сайте
Возможно это система частиц (particles), т.к. при полете корабля за ним появляются просто фиолетовые точки, если сдвинуть карту, то за ним уже тянется красивый шлейф от реактора.

Ан нет, это просто такая функция пробела.

При наведении на свой корабль появляется иногда такая полоса, может все же в каком то файле не отключен tab?
b_earДата: Вторник, 26 Августа 2014, 17:56 | Сообщение # 3
Покорители космоса
Сейчас нет на сайте
Assasin, да я пока тоже на это грешу, что не отключен таб, найти не могу никак... уже тупо все классы перебрал, вставил. Но ведь есть много подводных камней, классы внутри флешроликов, которые полностью закатаны через ресурсы.
вот проблема как найти такой объект у которого таб включен.
Понятно даже место и момент когда это бывает, вроде все вот бери и хватай, а никак не найти) будь оно не ладно.
Как бы это дело вообще глобально отключить...

Добавлено (26.08.2014, 13:17)
---------------------------------------------
Сейчас попробовал вставить в проекте строки
Код

if (stage) stage.tabChildren = false;
if (stage) stage.tabEnabled = false;


При выполнении выдает ошибку: Класс Stage не реализует этот метод или свойство.
Пробовал зайти через "root", но он не имеет таких свойств...

А как тогда еще можно глобально отключить TAB ?

Добавлено (26.08.2014, 13:42)
---------------------------------------------
Так появилась одна мысль...
Нашел в документации, точнее обратил внимание на то что раньше почему-то не замечал:

Цитата
tabEnabled:Boolean [чтение и запись]
Определяет, включен ли этот объект в последовательность перехода с помощью клавиши Tab. Если объект включен в последовательность перехода с помощью клавиши Tab, значение — true; в противном случае — false. По умолчанию используется значение false, за исключением следующих случаев.
Для объекта TextField с type = "input" используется значение true.
Для объекта Sprite или MovieClip с buttonMode = true используется значение true.


А я в процессе выполнения меняю свойства текстовых полей type = "input" и присваиваю налету различным спрайтам и мувикам "buttonMode = true"
И есть теперь у меня такое подозрение, что при назначении этих свойств, флеш автоматом ставит им tabEnabled=true ...

Вот это я должен проверить пожалуй)

Добавлено (26.08.2014, 17:56)
---------------------------------------------
Сделал по кнопке специальную рекурсивную функцию, которая по активации ищет от головного объекта все вложенные объекты и проверяет их на включенный режим TAB для себя и для дочерних объектов.
К моему глубокому удивлению, эта функция нашла порядка 100 таких объектов, вот займусь пока, почищу им свойство табуляции, надеюсь поможет)

Код

    private function find_tab_bug(main_obj:DisplayObjectContainer):void
    {
     if (!main_obj) return;
     if (main_obj.tabEnabled || main_obj.tabChildren)
      trace(Proc.log('Loader Main test_f12A name=' +String(main_obj.name)+' type='+String(main_obj) +' tab=' + String(main_obj.tabEnabled) +' tabCH=' + String(main_obj.tabChildren)));
     var i:int;
     var obj:InteractiveObject;
     for (i = 0; i < main_obj.numChildren; i++)
     {
      obj = main_obj.getChildAt(i) as InteractiveObject;
      if (obj && obj.tabEnabled)
       trace(Proc.log('Loader Main test_f12B name=' +String(obj.name)+' type='+String(obj) +' tab=' + String(obj.tabEnabled)));
     }
       
     var obj2:DisplayObjectContainer;
     var i:int;
     for (i = 0; i < main_obj.numChildren; i++)
     {
      obj2 = main_obj.getChildAt(i) as DisplayObjectContainer;
      find_tab_bug(obj2);
     }
    }


Еще добавлю что если по кнопке сделать головному объекту флеш ролика visible=!visible и нажать два раза, то после пропадания объекта желтые полосы исчезают, а при обратном появлении их тоже нет, то есть они исчезают.




Сообщение отредактировал b_eat - Вторник, 26 Августа 2014, 18:01
j_uliaДата: Среда, 27 Августа 2014, 21:48 | Сообщение # 4
частый гость
Сейчас нет на сайте
хм cry , да неприятный глюк, надеюсь справитесь
b_earДата: Среда, 27 Августа 2014, 21:51 | Сообщение # 5
Покорители космоса
Сейчас нет на сайте
Итак, исправив большую часть объектов/классов с включенной табуляций, найденных с помощью функции приведенной выше, я безусловно снизил количество глюков (желтых полос) до минимума. Но не искоренил. Ошибка продолжала бить меня "фэйсом об тейбл". Даже после того как я все зачистил этой же функцией, поменяв вывод сообщений на прямое присвоение свойства tabEnabled=false.

Решающим в разгадке этой ошибки стало то, что я загнал ситуацию в одну единственную сцену в игре и уже четко видел где оно проявляется при каких условиях и если что-то убрать, оно пропадает, вставить - снова появляется.

В результате несложного перебора, это оказалось строчка вида
Код
stage.focus=XXXX;


Я применяю такие в игре в паре тройке мест, но вот в одном месте оно и не нужно было, осталось после каких то тестовых манипуляций.
Суть в том что эта строка устарела, и передавала фокус толи не вовремя толи неверно как-то. Я ее просто убрал и все пришло в норму) Чего и вам желаю!

Всем спасибо кто помогал) Ну или хотя бы просто читал))


  • Страница 1 из 1
  • 1
Поиск:

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