Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Video на таймлайне ест fps после удаления (http://www.flasher.ru/forum/showthread.php?t=161172)

vinch 21.07.2011 15:17

Video на таймлайне ест fps после удаления
 
Здраствуйте.

Столкнулся со странным поведением экземпляра класса Video (которое я импортировал с внешнего flv файла в библиотеку Flash CS5.5). Он размещен на таймлайне одного клипа с классом TvSprite. Экземпляр TvSprite лежит внутри клипа-фона для меню. Все происходит так - грузится меню, создается фон, после нажатия на кнопку меню удаляется.

Проблема в том, что при каждом переходе видео на начало фпс падает с 30 до 25. Впрочем, важно не это, а то, что после удаления меню видео все равно отьедает фпс. Вставил на первый кадр клипа с видео trace("here", parent); - после удаления выводит here, null. Т.е., видео удаляется. Но все равно трейс выводится и видео крутится.

Как обьяснить такое поведение и как удалить видео?

UP: похоже, я где-то ошибся и дело не в видео :)
После его удаления все равно видет trace. Буду искать ошибку.

Rzer 21.07.2011 16:05

а ты останавливаешь видео перед удалением? Попробуй видео со звуком. Если звук не пропадает, значит видео где-то играется.

vinch 21.07.2011 16:13

Вообще не понимаю, что творится :(
Оказывается, дело не в видео. У меня в TVSprite несколько слоев, один из них - для flv видео, а на одном - трейс. Так вот, после удаления слоя с видео все равно трейс виден.

Все ссылки зануляю; у меня есть класс меню с "деструктором" - проверял, он вызывается. Само меню зануляется.
И спрайт с видео, и его родитель удаляются.

Почему же видео не удаляется сборщиком мусора и все равно крутится на фоне, с периодом в несколько секунд понижая фпс?

Rzer, если написать stop в "деструкторе" меню для спрайта, на таймлайне которого есть видео, снижение фпс прекращается, но меня все равно такое пугает.

silin 21.07.2011 16:57

я думал прошли уже времена, когда люди пугались, что GC в AS такой не совсем понятный..
есть способы повлиять на него, вот такой, например http://silin.su/#AS3/utils/gc

vinch 21.07.2011 20:22

Так, новый неожиданный поворот.

После закрытия меню несколько секунд счетчик фпс показывает 500-1000 :)
Все как будто на быстрой прокрутке - короче, фпс невероятно растет.

Это что, глюки плеера такие?
Тестировал на разных компьютерах/плеерах.

Я сделал так - выделил таймлайн с видео в отдельный клип и поместил его в последний кадр телевизора. А по окончанию меню перехожу на кадр, где нету видео, и они перестают создаваться.

КорДум 21.07.2011 20:26

FPS больше 120 быть не может. Это ваш счетчик неверно считает в какие-то моменты.
Я бы все делал кодом и не использовал кадры. В данном случае это более чем актуально.

vinch 21.07.2011 20:32

Да я все делаю кодом, кроме графики. Тут такой случай - для игрового туториала сделал видеоподсказки (спрайт телевизора, а внутри него видео), а потом экспортирую изображения телевизора с видео в swc.

Вод код счетчика:
Код AS3:

package
{
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.system.System;
  import flash.text.TextField;
  import flash.utils.Timer;
 
  import game.*;
 
  public class FPS extends Sprite
  {
      private var counter:uint;
      private var counterDisplay:TextField;
 
    public function FPS()
      {
        counter=0;
        counterDisplay = new TextField();
        GameConst.STAGE.addChild(counterDisplay);
        addEventListener(Event.ENTER_FRAME, onEnterFrameEvent);
 
        var theTimer:Timer = new Timer(1000, 0);
        theTimer.addEventListener('timer',onTimerEvent);
        theTimer.start();
 
      }
 
      private function onEnterFrameEvent(event:Event):void
      {
        counter++;
      }
      private function onTimerEvent(event:Event):void
      {
        counterDisplay.text='FPS : '+ counter.toFixed(1);
        counter=0;
      }
  }
}

Удивительно, но все действительно выглядит, как будто фпс очень большой - анимация меняется и обьекты движутся с невероятной скоростью. Через 2-3 секунды фпс уменьшается до 30.

КорДум 21.07.2011 20:39

Код AS3:

GameConst.STAGE.addChild(counterDisplay);

Какая жесть.

Счетчик правильный. Вероятно там что-то адобовцы намудрили с видео. Какой плеер? Релиз-дебаг? Стандалон, плагин, activeX? А как выглядит в другом плеере?

vinch 21.07.2011 20:50

И тот, и тот плеер. И стандалон, и плагин. 10.3 и 10.1 (вроде бы).
На разных компьютерах.
Удаляю видео с "телевизора" - все нормально. Еще пару часов назад и с видео было все нормально; вроде бы, никаких существенных изменений не делал.
Так выглядит туториал (текст даже в ворде не проверял :)): http://habrastorage.org/storage1/cd2...5/3bf67f75.png
После его закрытия - несколько секунд такого (слева вверху счетчик): http://habrastorage.org/storage1/7a4...c/73c67506.png

КорДум 21.07.2011 20:55

Хм. Интересно. Почитайте эту темку с комментариями и просто попробуйте сделать другой FPS метер.
ЗЫ. очень симпатичная графика.


Часовой пояс GMT +4, время: 17:33.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.