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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.11.2006, 01:19
n0wa вне форума Посмотреть профиль Отправить личное сообщение для n0wa Найти все сообщения от n0wa
  № 1  
Ответить с цитированием
n0wa
[+1.3 16.09.06]

Регистрация: Oct 2006
Сообщений: 13
По умолчанию copyPixels. поиск юзан, хелп читан.

Доброго времени суток.

Продолжая свои экзерсизы с флешем наткнулся на баг не баг, фичу не фичу, даже не знаю как это обозвать

Вообщем ситуация.

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

происходит следующее

если bit создавать без прозрачности (false) то все ок (всмысле картинка собирается как надо, но он не прозрачный =(). а вот если прозрачным, то в битмапе остается только последний скопированый кусочек т.е. рука.

эффект не понятен. почему так? по идее должно быть наоборот. если прозрачность есть то она должна учитываться, если - то нет.

код ниже.
Код:
function CreatePlayer(posx,posy,hands,legs,torso,weapon,pos,sit,sex)
{
var mc:MovieClip = new MovieClip;
var bit:BitmapData = new BitmapData(32, 40);//, true, 0x000000);
var up:Number = 0;
if(pos >= 8)
	return 0;
if(sit){
	sit = 1;up = 3}
if(sex)
	sex  = 1;

mc = createEmptyMovieClip(mc, this.getNextHighestDepth());

if(pos < 4)
	bit.copyPixels(hands,new Rectangle(32*pos,0,32,40),new Point(0,up));
else
	bit.copyPixels(hands,new Rectangle(256 + 32*pos,0,32,40),new Point(0,up));

bit.copyPixels(torso,new Rectangle(32*pos + 256*sex,0,32,40),new Point(0,up));
bit.copyPixels(legs,new Rectangle(32*pos + 256*sit,0,32,40),new Point(0,0));

if(pos >= 4)
	bit.copyPixels(hands,new Rectangle(32*pos,0,32,40),new Point(0,up));
else
	bit.copyPixels(hands,new Rectangle(256+32*pos,0,32,40),new Point(0,up));

mc.attachBitmap(bit,10);//,"auto",true);

return mc; 
}
mytest.zip


Последний раз редактировалось iNils; 16.11.2006 в 02:05.
Старый 16.11.2006, 02:02
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 2  
Ответить с цитированием
lowka

Регистрация: Sep 2006
Сообщений: 256
Код:
var bit:BitmapData = new BitmapData(32, 40, true, 0x00000000);
так попробуйте.
А параметр отвечающий за прозрачность поумолчанию имеет значение true. В хелпе ошибка.

Старый 16.11.2006, 02:05
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

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

Старый 16.11.2006, 02:05
n0wa вне форума Посмотреть профиль Отправить личное сообщение для n0wa Найти все сообщения от n0wa
  № 4  
Ответить с цитированием
n0wa
[+1.3 16.09.06]

Регистрация: Oct 2006
Сообщений: 13
пробовал, эффект тот же. =(
Посмотрите семпл

Старый 16.11.2006, 02:11
n0wa вне форума Посмотреть профиль Отправить личное сообщение для n0wa Найти все сообщения от n0wa
  № 5  
Ответить с цитированием
n0wa
[+1.3 16.09.06]

Регистрация: Oct 2006
Сообщений: 13
Цитата:
Сообщение от iNils
n0wa уже получал устное предупреждение за теги к коду, теперь получает плюс.
Спасибо.

Старый 16.11.2006, 02:19
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 6  
Ответить с цитированием
lowka

Регистрация: Sep 2006
Сообщений: 256
Код:
if(pos < 4)
	bit.copyPixels(hands,new Rectangle(32*pos,0,32,40),new Point(0,up),hands,new Point(0,up),true);
else
	bit.copyPixels(hands,new Rectangle(256 + 32*pos,0,32,40),new Point(0,up),hands,new Point(0,up),true);;

bit.copyPixels(torso,new Rectangle(32*pos + 256*sex,0,32,40),new Point(0,up),torso,new Point(0,up),true);
bit.copyPixels(legs,new Rectangle(32*pos + 256*sit,0,32,40),new Point(0,0),legs,new Point(0,up),true);

if(pos >= 4)
	bit.copyPixels(hands,new Rectangle(32*pos,0,32,40),new Point(0,up),hands,new Point(0,up),true);
else
	bit.copyPixels(hands,new Rectangle(256+32*pos,0,32,40),new Point(0,up),hands,new Point(0,up),true);
Теперь вроде бы все ок.
В хэлпе как всегда все написано (alphaBitmap, alphaPoint и чето там еще mergeAlpha)

Старый 16.11.2006, 02:30
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Кстати
Код:
var mc:MovieClip = new MovieClip;
...
mc = createEmptyMovieClip(mc, this.getNextHighestDepth());
Надо писать так
Код:
var mc:MovieClip = createEmptyMovieClip("mc", this.getNextHighestDepth());
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 16.11.2006, 02:35
n0wa вне форума Посмотреть профиль Отправить личное сообщение для n0wa Найти все сообщения от n0wa
  № 8  
Ответить с цитированием
n0wa
[+1.3 16.09.06]

Регистрация: Oct 2006
Сообщений: 13
ага. спасибо. на примитиве это работает.
На более сложном, на так сказать ingame графике уже сложности. получатся лажа.

Цитата:
В хэлпе как всегда все написано (alphaBitmap, alphaPoint и чето там еще mergeAlpha)
я ж говорю читал хелп. там написано дословно
Цитата:
If include the alphaBitmap and alphaPoint parameters, you can use a secondary image as an alpha source for the source image. If the source image has alpha data, both sets of alpha data are used to composite pixels from the source image to the destination image.
однако не понятно как должна выглядеть эта alphaBitmap и какое значение её пикселя является 100% альфой. Если же следовать логике то 0хFFFFFF, а наличие таких пикселей в картинке-сорсе 100% сомнительно. Я провожу опять же аналогии с другими API, флаш изучаю три дня от силы плотно. А также что если у сорс имадж есть альфа то они работают обе... опять таки как.

Старый 16.11.2006, 09:43
n0wa вне форума Посмотреть профиль Отправить личное сообщение для n0wa Найти все сообщения от n0wa
  № 9  
Ответить с цитированием
n0wa
[+1.3 16.09.06]

Регистрация: Oct 2006
Сообщений: 13
вообщем использование alphaBitmap не помогло. да и зачем оно, если в исходном то есть альфаканал.

Хотя я возможно что то е понимаю

testplayer.zip

Старый 16.11.2006, 13:27
n0wa вне форума Посмотреть профиль Отправить личное сообщение для n0wa Найти все сообщения от n0wa
  № 10  
Ответить с цитированием
n0wa
[+1.3 16.09.06]

Регистрация: Oct 2006
Сообщений: 13
Кстати. Может кто нибудь подскажет, что будет быстрее,
floodFill или get\setPixel в цикле если точно известно сколько пикелей будет заполнено.

З.Ы. это маленьки ап такой )

Одно из возможных решений проблемы в лоб. Не самое лучшее думается.

Код:
function CreatePlayer(posx,posy,hands,legs,torso,weapon,pos,sit,sex)
{
var mc:MovieClip = createEmptyMovieClip(mc, this.getNextHighestDepth());
var bit:BitmapData = new BitmapData(32, 40, false, 0x000000);
var tbit:BitmapData = new BitmapData(32, 40, true, 0x000000);

var up:Number = 0;
if(pos >= 8)
	return 0;
if(sit){
	sit = 1;up = 3}
if(sex)
	sex  = 1;

if(pos < 4)
	bit.copyPixels(hands,new Rectangle(32*pos,0,32,40),new Point(0,up));
else
	bit.copyPixels(hands,new Rectangle(256 + 32*pos,0,32,40),new Point(0,up));

bit.copyPixels(torso,new Rectangle(32*pos + 256*sex,0,32,40),new Point(0,up));

bit.copyPixels(legs,new Rectangle(32*pos + 256*sit,0,32,40),new Point(0,0));

if(pos >= 4)
	bit.copyPixels(hands,new Rectangle(32*pos,0,32,40),new Point(0,up));
else
	bit.copyPixels(hands,new Rectangle(256+32*pos,0,32,40),new Point(0,up));


tbit.copyPixels(bit,new Rectangle(0,0,32,40),new Point(0,0),bit,new Point(0,0),true);

bit.dispose();
delete tbit;

for(var i = 0;i < 32; i++)
	for(var j = 0; j < 40; j++)
		if(!tbit.getPixel(i, j))
			tbit.setPixel32(i,j,0x00000000);

mc.attachBitmap(tbit,10,"auto",true);
return mc; 
}


Последний раз редактировалось n0wa; 16.11.2006 в 13:43.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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