|
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
Двойная буферизация, возможно ли?
Доброго!
В игре есть раздражающий момент, у меня большой задний фон и он состоит из нескольких кадров(7 кадров). Во время старта игры происходит загрузка каждого кадра в память (как я понимаю) и я получаю 7 рывков (у меня кадр мувика сменяется через каждые 10 кадров флеша), дальше всё идёт гладко. Но потом, переодически снова эти 7 рывков, после начала игры заново (когда как, чаще всго после того, как сделал перерыв в несколько секунд), ссылку на фон не удаляю, так что GC не должен убивать, да и фон не меняется, просто игрок оказывается в другом месте на этом же фоне. Думал как решить проблему, теперь при старте, до начало игры сделал окно загрузки, в это время как раз полностью проигрывается мувик заднего фона и тормоза при первом старте пропали, но что делать, когда периодически при рестарте игры тормоза снова |
|
|||||
Что ты имеешь в виду под двойной буферизацией здесь?
Твой фон, очевидно, глючит из-за ошибки в коде. Рестарт у тебя не правильно делается, вот и все.
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
Цитата:
Не думаю, что ошибка в коде, у мувика размеры 4к на 2.7к пикселей, состоит из 7 картинок. Тормоза появляются при начале проигрывание этого мувика, пока не пройдут все кадры по очереди, потом всё отлично. Но стоит перестать играть на 20-30 сек и начать сначала, то снова будет ровно столько же тормозов, пока кадры не сменят друг друга. Если сменить мувик на меньший размер или вставить пустой, то проблем нету |
|
|||||
Никогда не встречал подобного. У меня анимация из 40 кадров, каждый кадр размером 1024х1024, размер картинки огромный, режу её на кадры и просто меняю bitmapdata у bitmap никаких рывков никогда нет. Аналогичные результаты и с любыми другими размерами, никакая буферизация здесь не нужна.
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
Цитата:
|
|
|||||
Какая еще глубина отображения? Просто менять битмапдату у битмап. Баг явно в коде, либо корявой реализации. Никаких рывков не должно быть.
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
Цитата:
Добавлено через 3 минуты package classesGame.addActionUnits.addAction { import classesGame.options.OptionsUnits; import classesGame.userEvent.UserEvent; import flash.events.Event; import nape.phys.Body; import singleton.sFloor.SFloor; public class AddActionCover extends IParentCommon { public function AddActionCover() { } private var cover1:cover_mc = new cover_mc(); private var cover2:cover_mc = new cover_mc(); override public function init(e:Event):void { super.init(e); stage.addEventListener(UserEvent.START_FLAG_1, userEvent); stage.addEventListener(UserEvent.START_FLAG_3, userEvent); stage.addEventListener(UserEvent.PAUSE, userEvent); stage.addEventListener(UserEvent.PLAY, userEvent); stage.addEventListener(UserEvent.EMERGING_WALL, userEvent); stage.addEventListener(UserEvent.SHOT_WALL, userEvent); this.addChild(cover1); this.addChild(cover2); this.addEventListener(Event.ENTER_FRAME, driveAway); } private function driveAway(e:Event):void { if (cover1.totalFrames > cover1.currentFrame) stage.dispatchEvent(new UserEvent(UserEvent.CREATE_SEGMENT, true, false)); else { stage.dispatchEvent(new UserEvent(UserEvent.CREATE_ALL, true, false)); this.removeEventListener(Event.ENTER_FRAME, driveAway); cover1.visible = cover2.visible = false; } } private function userEvent(e:UserEvent):void { switch (e.type) { case "startFlag1": case "emergingWall": this.removeEventListener(Event.ENTER_FRAME, updateCover); startFlag1(); break; case "shotWall": case "startFlag3": this.addEventListener(Event.ENTER_FRAME, updateCover); break; case "pause": this.removeEventListener(Event.ENTER_FRAME, updateCover); break; case "play": this.addEventListener(Event.ENTER_FRAME, updateCover); break; } } private function updateCoverOffset(e:Event):void { cover1.y = cover2.y = bodyFloor.position.y - 2651.4; } private function startFlag1():void { cover1.visible = cover2.visible = true; cover1.gotoAndStop(1); cover2.gotoAndStop(1); //!!! OptionsUnits.positionWall_1 = cover1.width * 2; // cover1.y = cover2.y = -cover1.height + stage.stageHeight; cover1.x = 0; cover2.x = cover1.x + cover1.width; this.addEventListener(Event.ENTER_FRAME, updateCoverOffset); } private var bodyFloor:Body = SFloor.getSFloor.getFloor.getBody; private var step:uint = 0; private function updateCover(e:Event):void { cover1.x -= OptionsUnits.tempGameSpeed ; cover2.x -= OptionsUnits.tempGameSpeed; if (cover1.x < -cover1.width) cover1.x = cover2.x + cover2.width; if (cover2.x < -cover2.width) cover2.x = cover1.x + cover1.width; if (step < 51) { ++step; cover1.gotoAndStop(uint(step / 10 + 1)); cover2.gotoAndStop(uint(step / 10 + 1)); } else step = 0; } } } |
|
|||||
.
|
Тормоза из-за растеризации могут быть. Попробуйте cacheAsBitmap, если не предполагается менять мувику цветовую и геометрическую трансформацию.
|
|
|||||
Цитата:
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
Bletraut покажите как, ни разу не задумывался
|
Часовой пояс GMT +4, время: 18:33. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|