Quadro9
05.10.2015, 21:54
У меня браузер хром, при тестировании флешки заметил странное поведение при смене вкладок браузера.
Например у меня реализована простейшая пауза, с помощью булевской переменной пропуская циклы энтерфрейма, ра ботает нормально, но если я при нажатой паузе перейду на другую вкладку, потом через какоето время вернусь, и отжимаю паузу, то вижу окно окончания игры типа меня убили.
Расскажите что же происходит при переключении вкладок, потомучто не понимая проблемы, я не могу понять как ее решить.
вот мой код игрового цикла
private function gameLoop(event:Event):void
{
var now:Number = getTimer() / 1000.0;
var delta:Number = now - totalTime;
totalTime = now;
timeSinceLastUpdate += delta;
while (timeSinceLastUpdate > TIME_PER_FRAME)
{
timeSinceLastUpdate -= TIME_PER_FRAME;
if (isPause) return; // паузу поставил здесь чтобы timeSinceLastUpdate не накапливался.
update(TIME_PER_FRAME);
}
render();
}
// а тут я на всякий случай синхронизирую totalTime при отжатии паузы
// это первая попытка фикса - неудачная
private function synchronizeTotalTime():void
{
totalTime = getTimer() / 1000.0;
}
Добавлено через 21 минуту
Пофиксил уже :)
перенес проверку паузы в самое начало, и при отжатии паузы синхронизирую totalTime
private function gameLoop(event:Event):void
{
if (isPause) return;
var now:Number = getTimer() / 1000.0;
var delta:Number = now - totalTime;
totalTime = now;
timeSinceLastUpdate += delta;
while (timeSinceLastUpdate > TIME_PER_FRAME)
{
timeSinceLastUpdate -= TIME_PER_FRAME;
update(TIME_PER_FRAME);
}
render();
}
Например у меня реализована простейшая пауза, с помощью булевской переменной пропуская циклы энтерфрейма, ра ботает нормально, но если я при нажатой паузе перейду на другую вкладку, потом через какоето время вернусь, и отжимаю паузу, то вижу окно окончания игры типа меня убили.
Расскажите что же происходит при переключении вкладок, потомучто не понимая проблемы, я не могу понять как ее решить.
вот мой код игрового цикла
private function gameLoop(event:Event):void
{
var now:Number = getTimer() / 1000.0;
var delta:Number = now - totalTime;
totalTime = now;
timeSinceLastUpdate += delta;
while (timeSinceLastUpdate > TIME_PER_FRAME)
{
timeSinceLastUpdate -= TIME_PER_FRAME;
if (isPause) return; // паузу поставил здесь чтобы timeSinceLastUpdate не накапливался.
update(TIME_PER_FRAME);
}
render();
}
// а тут я на всякий случай синхронизирую totalTime при отжатии паузы
// это первая попытка фикса - неудачная
private function synchronizeTotalTime():void
{
totalTime = getTimer() / 1000.0;
}
Добавлено через 21 минуту
Пофиксил уже :)
перенес проверку паузы в самое начало, и при отжатии паузы синхронизирую totalTime
private function gameLoop(event:Event):void
{
if (isPause) return;
var now:Number = getTimer() / 1000.0;
var delta:Number = now - totalTime;
totalTime = now;
timeSinceLastUpdate += delta;
while (timeSinceLastUpdate > TIME_PER_FRAME)
{
timeSinceLastUpdate -= TIME_PER_FRAME;
update(TIME_PER_FRAME);
}
render();
}