Comunidad de diseño web y desarrollo en internet online

Creando mascaras.

Citar            
MensajeEscrito el 09 Oct 2006 07:32 pm
Buenas a todos, ojala me puedan ayudar...

El problema es el siguiente: Estoy haciendo un juego parecido al worms, donde tengo un fondo que quiero que valla desapareciendo segun caigan las bombas. Lo que se me ocurrio pero no se como hacer es esto:
Le aplico una mascara al fondo, pero esta mascara esta completamente dibujada (osea que se ve todo el fondo), conforme van cayendo las bombas voy borrando pedacitos de esa mascara para hacer que se oculten dichas partes, pero el porblema es que no se como hacer para borrar esos pedazos, se puede hacer eso??? alguna sugerencia????

Desde ya muchisimas gracias!!, saludos.

Por Anl

6 de clabLevel



 

msie
Citar            
MensajeEscrito el 09 Oct 2006 07:56 pm
Hola. Coloca como mascara un movieclip con varios frames y en cada frame haces que la mascara sea diferente. Coloca un stop() en el primer fotograma.
Segun avance tu juego, vas cambiando el fotograma de ese movieclip...
espero que te sirva
:wink:

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 09 Oct 2006 08:06 pm
Hola, gracias por contestar, pero necesitaria hacer algo un poco mas dinamico, por que la idea es que las bombas pueden caer en cualquier lado y de formas diferentes, y la mascara tiene que ir desapareciendo poco a poco segun vayan cayendo las bombas...es muy aleatorio.

Por Anl

6 de clabLevel



 

msie
Citar            
MensajeEscrito el 09 Oct 2006 09:45 pm
Entonces create una mascara a partir de un movieclip que contenga una serie de movieclips pequeños formando una cuadricula. Haciendo un calculo de la posición en la que cae la bomba eliminas de la mascara los clips que toquen...

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 09 Oct 2006 09:51 pm
La verdad es que no es fácil lo que pides...
Prueba a hacerlo con bitmaps. Tienes un clip de cualquier forma llamado drag_clip y de color 000011 y otro clip llamado clip_fondo:

Código :

import flash.display.*;
import flash.geom.*;
var container:MovieClip = this.createEmptyMovieClip("container", 111);
container.useHandCursor = false;
var bitmap:BitmapData = new BitmapData(1000, 1000, true, 0x00000000);
var matrix:Matrix = new Matrix();
bitmap.draw(asd);
clip_fondo._visible = false;
container.attachBitmap(bitmap, 999);
drag_clip.startDrag(true);
drag_clip.swapDepths(getNextHighestDepth());
container.onPress = function() {
   matrix.tx = this._xmouse;
   matrix.ty = this._ymouse;
   bitmap.draw(drag_clip, matrix);
   bitmap.threshold(bitmap, bitmap.rectangle, bitmap.rectangle.topLeft, "<=", 0xff000011, 0, 0xffffffff, true);
};

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 10 Oct 2006 12:44 am
Hola Zah. ¿El código que has puesto está entero? porque no funciona. y dandole un vistazo tampoco entiendo cual es su funcionamiento... :?

Probando con los bitmapsData monté este ejemplillo. a ver que te parece:


Código :

import flash.display.*;
import flash.geom.*;
var container1:MovieClip = this.createEmptyMovieClip("container1", this.getNextHighestDepth());
var container2:MovieClip = this.createEmptyMovieClip("container2", this.getNextHighestDepth());
var bitmap1:BitmapData = new BitmapData(Stage.width, Stage.height, true, 0);
var bitmap2:BitmapData = new BitmapData(Stage.width, Stage.height, true, 0);
container1.attachBitmap(bitmap1, this.getNextHighestDepth());
container2.attachBitmap(bitmap2, this.getNextHighestDepth());
var matrix:Matrix = new Matrix();
bitmap1.draw(clip_fondo1, matrix);
bitmap2.draw(clip_fondo2, matrix);
clip_fondo1._visible = false;
clip_fondo2._visible = false;
this.onMouseMove = function() {
   x = _xmouse - 15;
   y = _ymouse - 15;
   bitmap2.copyPixels(bitmap1, new Rectangle(x, y, 30, 30), new Point(x, y));
};

:cool:

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 10 Oct 2006 01:07 pm
Shit! Un error en esta línea:

Código :

//bitmap.draw(asd);
bitmap.draw(clip_fondo);

Bueno, el código que puse es algo experimental. Tiene la ventaja de que puedes elegir la forma del sesgo (no es un cuadrado) y la desventaja de que no puedes usar el color negro en el fondo (bitMapData.threshold es un método bien raro ¬¬ pero es el único que hay)
De todas formas creo que hay una mejor manera de hacerlo, a ver si la encuentro...
Lo que hace es dibujar en el bitmap el clip de fondo. Tenemos un mc, que movemos con el ratón y su color es 0x000011. Entonces, cuando pulsamos sobre el clip del bitmap dibujamos el clip sobre él con las coordenadas en las que está (de allí el código del matrix) .Y después seleccionamos todos los pixeles de valor ARGB (alfa-red-green-blue) menor o iguales (no, con "==" no funciona bien) a 17 (0x11) y los volvemos transparentes.
pd: Hay que separar el bitMap (ctrl+b) del clip de fondo para que funcione

Código :

import flash.display.*;
import flash.geom.*;
var container:MovieClip = this.createEmptyMovieClip("container", 111);
container.useHandCursor = false;
var bitmap:BitmapData = new BitmapData(1000, 1000, true, 0x00000000);
var matrix:Matrix = new Matrix();
bitmap.draw(asd);
clip_fondo._visible = false;
container.attachBitmap(bitmap, 999);
drag_clip.startDrag(true);
drag_clip.swapDepths(getNextHighestDepth());
container.onPress = function() {
   matrix.tx = this._xmouse;
   matrix.ty = this._ymouse;
   bitmap.draw(drag_clip, matrix);
   bitmap.threshold(bitmap, bitmap.rectangle, bitmap.rectangle.topLeft, "<=", 0xff000011, 0, 0xffffffff, true);
};

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 10 Oct 2006 04:40 pm
Ah, claro que se podía hacer mejor, jugando con los blendModes. Así borramos exactamente la forma del clip y no necesitamos usar threshold, además de que se puede usar cualquier color, tanto en el drag_clip, como en el fondo:

Código :

import flash.display.*;
import flash.geom.*;
var container:MovieClip = this.createEmptyMovieClip("container", 111);
container.useHandCursor = false;
container.blendMode="layer"
var bitmap:BitmapData = new BitmapData(1000, 1000, true, 0x00000000);
var matrix:Matrix = new Matrix();
bitmap.draw(clip_fondo);
clip_fondo._visible = false;
container.attachBitmap(bitmap, 999);
drag_clip.startDrag(true);
drag_clip.swapDepths(getNextHighestDepth());
container.onPress = function() {
   matrix.tx = this._xmouse;
   matrix.ty = this._ymouse;
   bitmap.draw(drag_clip, matrix,null,"erase");
};

Aquí más ejemplos

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 10 Oct 2006 06:04 pm
Huyyy!!!!! muchisimas gracias....voy a probarlo lo antes que pueda :)

Por Anl

6 de clabLevel



 

msie
Citar            
MensajeEscrito el 23 Jul 2008 06:43 am
Estuve probando la ultima forma y me resulto para los que tuvieron dificultades les dejo el tutorial no se como poner el flash a la paguina
:? :?
pero si me preguntan a mi mail se los paso ([email protected])[/flash]

Por elrober_92

2 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 Sep 2009 05:32 pm
Les agradesco por este ejemplo me ha sido bastante útil!

Por lasg125

7 de clabLevel



 

Colombia

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.