Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.05.2011, 21:08
Chuvak вне форума Посмотреть профиль Отправить личное сообщение для Chuvak Найти все сообщения от Chuvak
  № 1  
Ответить с цитированием
Chuvak
[+1 24.06.11]

Регистрация: May 2011
Сообщений: 36
По умолчанию вопрос Про рендеринг bitmapData

по адресу http://rew89.nichost.ru/barabans.html
лежит то что я пытаюсь сделать.

по адресу http://rew89.nichost.ru/barabans.fla - исходник (CS5)


Вопрос в том, можно ли убрать "блики" которые появляются время от времени на барабанах и ползут вверх. Если подождать из секунд 10 то они обязательно появятся даже на быстрой машине. как я понимаю это рассинхронизация флешки и винды.

наткнулся на такие вещи как bitmapData.lock(); bitmapData.unlock(); - но документация у меня на английском полная забубённых терминов, не рассшифрует ли кто что это за методы и способны ли они мне помочь. Либо может ли мне помечь что-то другое.

Старый 25.05.2011, 21:14
XoJlToH вне форума Посмотреть профиль Отправить личное сообщение для XoJlToH Найти все сообщения от XoJlToH
  № 2  
Ответить с цитированием
XoJlToH
 
Аватар для XoJlToH

Регистрация: 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

Старый 25.05.2011, 23:50
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 3  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Смотрел минуты 3 подряд - никаких бликов не увидел. стабильно 60 фпс.
На счет синхронизации - выложите код, может его можно ускорить. Ну или хотя бы принцип изложите.
__________________
...вселенская грусть

Старый 26.05.2011, 00:58
Chuvak вне форума Посмотреть профиль Отправить личное сообщение для Chuvak Найти все сообщения от Chuvak
  № 4  
Ответить с цитированием
Chuvak
[+1 24.06.11]

Регистрация: May 2011
Сообщений: 36
Цитата:
Сообщение от XoJlToH Посмотреть сообщение
до или после многочисленных вызовов метода setPixel() или setPixel32().
а если это вызовы copyPixels() и не многочисленный а 20 их всего на 5 барабанах по 2 действия в 2-х буферах имеет ли смысл его использовать?
Код AS3:
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.
Старый 26.05.2011, 08:48
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Chuvak, перед выкладкой кода, убирайте за собой все пустые строки, нами они не к чему.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:59.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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