![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 13
|
Доброго времени суток.
Продолжая свои экзерсизы с флешем наткнулся на баг не баг, фичу не фичу, даже не знаю как это обозвать ![]() Вообщем ситуация. Задача. есть три ( в перспективе больше ) файла с кусками тела игрока. из этих файлов в зависимости от ситуации создается мув этого самого игрока в определенной позиции. файлы - гифы, все что не нужно - прозрачно. происходит следующее если 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;
}
Последний раз редактировалось iNils; 16.11.2006 в 02:05. |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 256
|
так попробуйте.
А параметр отвечающий за прозрачность поумолчанию имеет значение true. В хелпе ошибка. |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 13
|
Цитата:
|
|
|||||
|
Регистрация: 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) |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 13
|
пробовал, эффект тот же. =(
Посмотрите семпл |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 13
|
ага. спасибо. на примитиве это работает.
На более сложном, на так сказать ingame графике уже сложности. получатся лажа. Цитата:
Цитата:
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 13
|
вообщем использование alphaBitmap не помогло. да и зачем оно, если в исходном то есть альфаканал.
Хотя я возможно что то е понимаю testplayer.zip |
|
|||||
|
Регистрация: 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, время: 13:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|