2013-02-15 4 views
0

У меня есть KeyboardEvent, который переключает логическое значение, если true, FR var падает -2/frame до нижней части 10, если false, он поднимается + 2/frame до вершины 60. Он работает нормально и вниз, но всякий раз, когда я добавляю «stage.frameRate = FR;» к функции ENTER_FRAME и воспроизвести ее, она заморозит управление над окном. Анимация по-прежнему играет, но я не могу отключить ее, если только Ctrl-Alt-Del.AS3 проблема смены частоты кадров

1. Почему это происходит?

2. Можно ли изменить frameRate каждый кадр?

3.Если да, как?

+0

У вас есть анимация на временной шкале? – abnvp

ответ

1

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

Это общее предположение, но, возможно, когда вы устанавливаете частоту кадров на сцену, она инициализирует «что-то» в фоновом режиме. Затем, поскольку вы выполняете каждый кадр, он будет пытаться инициализировать каждый кадр, в результате чего он будет заблокирован.


Обновление ответа включать пример использования объекта Timer:

import flash.utils.Timer; 
import flash.events.TimerEvent; 

// the timer takes in milliseconds, so for 30 frames/second, you would have a frame tick at every 1000/30, or 33.333ms 
var tickSpeed:int = 1000/30; 
var frameTick:Timer = new Timer(tickSpeed, 0); 


function enterFrameListener(inputEvent:Timer):void { 
    // this method will run on every timer tick 
} 
frameTick.addEventListener(TimerEvent.TIMER, enterFrameListener); 

// can change the tick speed of the timer like so (setting it to 1000 means 1 frame tick every second) 
frameTick.delay = 1000; 

// according to the api doc however, a tickspeed of less then 20ms is not recommended 
// 20ms would be equal to 60 fps 

По разгружая его к таймеру, вам не нужно возиться с общей частотой кадров с другим преимущества других Одновременно на объекты могут влиять разные таймеры. Класс Timer также имеет несколько полезных методов сам по себе: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Timer.html

+0

Я думал о замедленном движении. Один из способов - взять весь код на этапе и изменить значения один за другим. Другим является определение всех значений переменных, которые будут изменены сразу. Но если мне нужен плавный переход, он по-прежнему будет иметь огромное дополнение к коду. И изменение frameRate показалось мне хорошим способом: установите более высокую скорость, 60, и сделайте разницу в 6 раз до достаточно высокой скорости для кажущейся гладкой анимации. Таким образом, я получил бы весь «мир», замедляющий или ускоряющий, и ему нужно было бы только отрегулировать скорость контролируемого символа. Есть идеи?^_^' – SherWood

+0

И это довольно просто, просто значение, которое я меняю и отображаю в текстовом поле. Я уверен, что это не «более 9000», чтобы замедлить работу ПК. Сначала я сделал это, а затем добавил 1 строку выше. Это заставило его заморозить, но не анимацию движущихся объектов. Кажется, что они все еще идут со скоростью 60 к/с. Я увидел пример в сети, где анимация изменила скорость, когда вы нажимаете кнопку, изменяя frameRate. Они использовали 1 строку либо ... Нажатие кнопки -> frameRate + = 1 – SherWood

+0

Hm, все ваши анимации основаны на событиях frame/ENTER_FRAME? Если да, возможно, вы можете изменить его, чтобы стрелять по таймеру, и контролировать скорость этого. Я обновлю свой ответ, чтобы привести пример этого. – mitim

0

Я думаю, что ваше приложение замерзает, потому что вы пытаетесь установить частоту кадров на каждом кадре, я бы предложил вам проверить частоту кадров в разделе ENTER_FRAME , если ваша частота кадров увеличивается/уменьшается с нужной частоты кадров, тогда вы должны установить частоту кадров в FR.

Попробуйте это может вам помочь.

Смежные вопросы