Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   изменение фпс (http://www.flasher.ru/forum/showthread.php?t=66037)

glitchestglitch 25.06.2005 17:37

изменение фпс
 
мульт, создавался двумя персонами, первая фпс 15, а вторая по ошибке 20. теперь надо как нить соеденить их. так вот вопрос:

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

Sh@man 25.06.2005 18:53

фпс можно менять либо до мульта, либо после. во время - никак нельзя.

7thsky™ 25.06.2005 18:57

возможно, загрузить второй мув в _level1 и в нужный момент поменять местами

_level0.swapDepths (_level1);

это уже обсуждалось на риалтайме, что-то темы не смог найти

Fl00r 25.06.2005 19:06

Сталкивался с этой проблемой.
ФПС менять во время проигрывания swf нельзя. Это уже "тактовая" частота самого проигрывателя, а не мовика. И если плеер сначала загрузил мов с фпс=20, то он будет до перезагрузки плеера быть с фпс 20.

7thsky™ 25.06.2005 19:12

Еще раз повторяю, за фпс и размеры проигрователя отвечает мув загруженный в _level0

прочитайте внимательно это

Nirth 25.06.2005 19:13

Оригинал писал C2Plus
Цитата:

...кстати говоря, менять уровни местами можно используя swapDepths. Таким образом, например, можно менять мувик в _level0 без перезагрузки остальных.

В мазиле после этого может глючить загрузка файлов, а именно созданые до замены ссылки на мувиклипы в замененом уровне или что-то вроде этого, точно не помню.

Насчет изменения фпс и размеров ничего не могу сказать, сейчас лень эксперементировать...

а то нельзя, нельзя... Можно! :)
Цитата:

да, именно _level0.swapDepths (_level1);
Эта операция меняет местами сами уровни, после нее все, что было в _level1 будет доступно через _level0 и наоборот.

Вот пример:
http://www.bsmart.ru/archives/misc/swap_levels.rar
смотреть во флеше, т.к. вывод идет через трассировку.
Цитата:

область применения, прямо скажу, специфическая... Допустим, есть набор готовых свфок, предположим, это игра или анимация, и мы хотим показывать поверх нее некий рекламный блок, однако, свфка на это не заточена и более того, не хочет работать в _level1 (или в муве _level0) по принципиальным соображениям. Разумеется, ее исходник не доступен. В таком случае мы можем сделать свой загрузчик, который подгрузит рекламу и свфку в произвольные уровни, а затем свфку поставит на удобное ей место - в _level0. Главное поставить ее в _level0 до ее инициализации, хотя тут возможны варианты.

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

С другой стороны, _level`ам тоже есть применение, хотя, наверное, все, что они позволяют сделать, возможно реализовать и на мувиклипах... Быть может, на мувиклипах даже лучше, не знаю - на мувиках в _level0 - есть родитель для всего, а на левелах общего родителя всего нет, хотя, корневой элемент можно и игнорировать при необходимости, а можно и самому создать корневой элемент... С другой стороны, _level`ы сильнее изолированы друг от друга, чем соседние мувики, которые могут найти друг друга через родителя... Это, наверное, вопрос из разряда: "Разбивать яйцо следует острой стороной или тупой?".
а теперь от себя

Есть еще второй способ менять FPS, это через setInterval()

или через класс FPS
Цитата:

Недавно я писал класс FPS
скачать можно тут, как пользоваться классами можно узнать в документации к флэшу
Код:

import orange.utils.FPS;
var boo:FPS = new FPS(2);
this.createEmptyMovieClip("ball_mc",3);
this.ball_mc.lineStyle(35,0xff0000,100);
this.ball_mc.moveTo(0,0);
this.ball_mc.lineTo(0.2,0);
this.boo.onEnterFrame = function () {
        trace("boo");
        _root.ball_mc._x ++;
        this._fps +=0.5;
}

Второй способ это через setInterval

Или использовать вариант silin'а

Код:

class FPS{
        var onEnterFrame: Function;
        private var _framerate, intID : Number;
        private var listeners:Array;
        function FPS (frameRate){
                _fps = frameRate;
                listeners=[this]
        }
        function get _fps(){
                return _framerate;
        }
        function set _fps (frameRate){
                clearInterval (intID);
                _framerate = frameRate
                intID=setInterval(this,'update',1000 / frameRate)
        }
        function stop (){
                clearInterval (intID);       
        }
        function play (){
                _fps = _framerate;       
        }
        private function update(){
                for(var i in listeners) listeners[i].onEnterFrame();
                updateAfterEvent();
        }
        function addListener(obj){
                listeners.push(obj)
        }
}


Fl00r 25.06.2005 19:16

где ж вы были раньше (.

Штрек 25.06.2005 23:14

Цитата:

Сообщение от Fl00r
где ж вы были раньше (.

Если ещё учесть с какой погрешностью отрабатывается
setInterval......

silin 26.06.2005 20:57

еще нада учесть, что вышепрведенный класс никакого отношения к скорости пригрывания линейки не имеет,
а только определяет периодичность вызова метода, имеющего (по недоразумению, имхо) имя onEnterFrame
для мувиков onEnterFrame (если определена канеш) будет вызываться и при смене кадра плеером и по сетинтрвалу, что есть бардак..

Nirth 26.06.2005 21:02

у меня были идеи создать либо доп событие либо переименовать имеющееся но как то привык, в принципе классом пользоваться не обязательно можно просто посмотреть на то как он работает и сделать аналогичную функцию на setInterval, а класс делался под себя а для себя всегда есть простор для бардака ;)


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

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