![]() |
|
||||||||||
|
|||||
|
[+1 24.06.11]
Регистрация: May 2011
Сообщений: 36
|
по адресу http://rew89.nichost.ru/barabans.html
лежит то что я пытаюсь сделать. по адресу http://rew89.nichost.ru/barabans.fla - исходник (CS5) Вопрос в том, можно ли убрать "блики" которые появляются время от времени на барабанах и ползут вверх. Если подождать из секунд 10 то они обязательно появятся даже на быстрой машине. как я понимаю это рассинхронизация флешки и винды. наткнулся на такие вещи как bitmapData.lock(); bitmapData.unlock(); - но документация у меня на английском полная забубённых терминов, не рассшифрует ли кто что это за методы и способны ли они мне помочь. Либо может ли мне помечь что-то другое. |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 145
|
lock ()
Блокирует изображение, чтобы любые объекты, ссылающиеся на объект BitmapData, например объекты Bitmap, не обновлялись при изменении данного объекта BitmapData. Чтобы повысить производительность, используйте этот метод вместе с методом unlock() до или после многочисленных вызовов метода setPixel() или setPixel32(). unlock () Разблокирует изображение, чтобы любые объекты, ссылающиеся на объект BitmapData, например объекты Bitmap, обновлялись при изменении данного объекта BitmapData. Чтобы повысить производительность, используйте этот метод вместе с методом lock() до или после многочисленных вызовов метода setPixel() или setPixel32(). Русский хелп не спасет отца русской демократии? http://help.adobe.com/ru_RU/AS3LCR/F...itmapData.html |
|
|||||
|
Смотрел минуты 3 подряд - никаких бликов не увидел. стабильно 60 фпс.
На счет синхронизации - выложите код, может его можно ускорить. Ну или хотя бы принцип изложите.
__________________
...вселенская грусть |
|
|||||
|
[+1 24.06.11]
Регистрация: May 2011
Сообщений: 36
|
Цитата:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; //////////////////////////// 1 буфер var bar1symbol:BitmapData = new bmp1 ; var bar2symbol:BitmapData = new bmp1 ; var bar3symbol:BitmapData = new bmp1 ; var bar4symbol:BitmapData = new bmp1 ; var bar5symbol:BitmapData = new bmp1 ; //////////////////////////// 2 буфер var bar6symbol:BitmapData = new bmp1 ; var bar7symbol:BitmapData = new bmp1 ; var bar8symbol:BitmapData = new bmp1 ; var bar9symbol:BitmapData = new bmp1 ; var bar10symbol:BitmapData = new bmp1 ; //////////////////////////// 1 буфер var barab1:BitmapData = new BitmapData(116,390,true,0x000000); var barab2:BitmapData = new BitmapData(116,390,true,0x000000); var barab3:BitmapData = new BitmapData(116,390,true,0x000000); var barab4:BitmapData = new BitmapData(116,390,true,0x000000); var barab5:BitmapData = new BitmapData(116,390,true,0x000000); //////////////////////////// 2 буфер var barab6:BitmapData = new BitmapData(116,390,true,0x000000); var barab7:BitmapData = new BitmapData(116,390,true,0x000000); var barab8:BitmapData = new BitmapData(116,390,true,0x000000); var barab9:BitmapData = new BitmapData(116,390,true,0x000000); var barab10:BitmapData = new BitmapData(116,390,true,0x000000); /// шаг номер 1 var step:int = 1; //шагов на картинку 4 var shagov:int = 4; //пикселей на шаг var inStep:int = 130 / shagov; //randomы картинок var newRand1:int; var newRand2:int; var newRand3:int; var newRand4:int; var newRand5:int; ///bitmapData символов var SYMBOLS = new Array(new bmp1 ,new bmp2 ,new bmp3 ,new bmp4 ,new bmp5 ,new bmp6 ,new bmp7 ,new bmp8 ,new bmp9 ,new bmp10 ); //////////присвоение битмап даты к битмапам //////////////////////////// 1 буфер var bar1:Bitmap = new Bitmap(barab1); var bar2:Bitmap = new Bitmap(barab2); var bar3:Bitmap = new Bitmap(barab3); var bar4:Bitmap = new Bitmap(barab4); var bar5:Bitmap = new Bitmap(barab5); //////////////////////////// 2 буфер var bar6:Bitmap = new Bitmap(barab6); var bar7:Bitmap = new Bitmap(barab7); var bar8:Bitmap = new Bitmap(barab8); var bar9:Bitmap = new Bitmap(barab9); var bar10:Bitmap = new Bitmap(barab10); //////////вывод битмапов 1 буфер this.addChild(bar1).x = 88; this.addChild(bar2).x = 215; this.addChild(bar3).x = 342; this.addChild(bar4).x = 469; this.addChild(bar5).x = 596; //////////вывод битмапов 2 буфер this.addChild(bar6).x = 88; this.addChild(bar7).x = 215; this.addChild(bar8).x = 342; this.addChild(bar9).x = 469; this.addChild(bar10).x = 596; ///расположение по y bar1.y = 84; bar2.y = 84; bar3.y = 84; bar4.y = 84; bar5.y = 84; bar6.y = 84; bar7.y = 84; bar8.y = 84; bar9.y = 84; bar10.y = 84; ////////Кэширование (Надо ли? вопрос к знатокам!) bar1.cacheAsBitmap = true; bar2.cacheAsBitmap = true; bar3.cacheAsBitmap = true; bar4.cacheAsBitmap = true; bar5.cacheAsBitmap = true; bar6.cacheAsBitmap = true; bar7.cacheAsBitmap = true; bar8.cacheAsBitmap = true; bar9.cacheAsBitmap = true; bar10.cacheAsBitmap = true; var rect1:Rectangle; var rect2:Rectangle; var point1:Point; var point2:Point; ///////меняльщик ФПС FS.minimum = 1,FS.maximum = 120,FS.stepSize = 1,FS.value = 30; FS.addEventListener(Event.CHANGE, changeRate); function changeRate(e:Event):void { stage.frameRate = FS.value; } ///////меняльщик шагов SS.minimum = 1,SS.maximum = 100,SS.stepSize = 1,SS.value = 30; SS.addEventListener(Event.CHANGE, changeStep); function changeStep(e:Event):void { shagov = SS.value; inStep = 130 / shagov; step = shagov; } ///////счётчик ФПС var fpsTimer:Timer = new Timer(2000,1000); var col:int = 0; fpsTimer.addEventListener(TimerEvent.TIMER, countFps); fpsTimer.start(); addEventListener(Event.ENTER_FRAME, countForFPS); var nn:Boolean; function countFps(e:TimerEvent):void { fpsCounter.text = col / 2 + ""; col = 0; } /////////////основная функция ENTER_FRAME function countForFPS(e:Event):void { //номер шага умноженный на кол-во пикселей за шаг var stepinstep:int = step * inStep; ///////взять дату барабана без нижних inStep пикселей rect1 = new Rectangle(0,0,116,390 - inStep); ////////взять у нового символа прямоугольник высотой inStep rect2 = new Rectangle(0,130 - stepinstep,116,stepinstep); point1 = new Point(0,inStep); point2 = new Point(0,0); /////скопировать пиксели большого куска барабана сверху вниз в самого же себя barab1.copyPixels(barab1, rect1,point1); ///////////скопировать кусочек из нового символа на макушку барабана barab1.copyPixels(bar1symbol, rect2, point2); barab2.copyPixels(barab2, rect1, point1); barab2.copyPixels(bar2symbol, rect2, point2); barab3.copyPixels(barab3, rect1, point1); barab3.copyPixels(bar3symbol, rect2, point2); barab4.copyPixels(barab4, rect1, point1); barab4.copyPixels(bar4symbol, rect2, point2); barab5.copyPixels(barab5, rect1, point1); barab5.copyPixels(bar5symbol, rect2, point2); barab6.copyPixels(barab6, rect1,point1); barab6.copyPixels(bar1symbol, rect2, point2); barab7.copyPixels(barab7, rect1, point1); barab7.copyPixels(bar2symbol, rect2, point2); barab8.copyPixels(barab8, rect1, point1); barab8.copyPixels(bar3symbol, rect2, point2); barab9.copyPixels(barab9, rect1, point1); barab9.copyPixels(bar4symbol, rect2, point2); barab10.copyPixels(barab10, rect1, point1); barab10.copyPixels(bar5symbol, rect2, point2); if (nn) { nn = false; //лочим и закрываем первый буфер barab6.lock(); barab7.lock(); barab8.lock(); barab9.lock(); barab10.lock(); bar6.visible = false; bar7.visible = false; bar8.visible = false; bar9.visible = false; bar10.visible = false; //анлочим и открываем второй буфер barab1.unlock(); barab2.unlock(); barab3.unlock(); barab4.unlock(); barab5.unlock(); bar1.visible = true; bar2.visible = true; bar3.visible = true; bar4.visible = true; bar5.visible = true; } else { ////////////и наоборот nn = true; barab1.lock(); barab2.lock(); barab3.lock(); barab4.lock(); barab5.lock(); bar1.visible = false; bar2.visible = false; bar3.visible = false; bar4.visible = false; bar5.visible = false; barab6.unlock(); barab7.unlock(); barab8.unlock(); barab9.unlock(); barab10.unlock(); bar6.visible = true; bar7.visible = true; bar8.visible = true; bar9.visible = true; bar10.visible = true; } /////для фпс каунтера col++; ///////если номер шага уже сколько всего шагов на символ то установить новые символы и сбросить счётчик if (step == shagov) { step = 0; newRand1 = Math.random() * 10; newRand2 = Math.random() * 10; newRand3 = Math.random() * 10; newRand4 = Math.random() * 10; newRand5 = Math.random() * 10; bar1symbol = SYMBOLS[newRand1]; bar2symbol = SYMBOLS[newRand2]; bar3symbol = SYMBOLS[newRand3]; bar4symbol = SYMBOLS[newRand4]; bar5symbol = SYMBOLS[newRand5]; } step++; } Последний раз редактировалось iNils; 26.05.2011 в 08:44. |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|