Comunidad de diseño web y desarrollo en internet online

ayuda para crear un array de sprites

Citar            
MensajeEscrito el 20 Oct 2011 10:35 am
Necesito crear 50 sprites que podrian ser botones añadirlos dentro de otro sprite pero tambien necesito poderlos identificar a cada uno de ellos es decir hacer un array de sprites, no se si es posible, vi algo parecido con vectores pero no me funka bien, la idea es esta-->(archivo struk.as)-->

Código ActionScript :

package{
   import flash.text.TextField;
   import flash.text.TextFormat;
   import flash.display.Sprite;
   import flash.display.*;
   import flash.display.DisplayObject;
   import flash.display;
   import flash.events.Event;


   
   public class struk {
      public var st01:String='yuxtaposició';
      var spr01:Sprite=new Sprite;
      var spr02:Sprite=new Sprite;
      var ar01:array=newArray();
      public function f01():Array{
         for(var n:uint=0;n<=50;n++){
            var k:uint;
            k=n*20;
            trace (k);                     
         var formatoTexto:TextFormat=new TextFormat();
         formatoTexto.color=0x000000;
         formatoTexto.size=11;
         formatoTexto.align='center';
         formatoTexto.font='courier new';
         formatoTexto.bold=false;
         var myText:TextField = new TextField();
         myText.defaultTextFormat=formatoTexto;
         myText.textColor = 0x000000;
         myText.x=10;
         myText.y=100+k;
         myText.border=true;
         myText.text = st01;
         myText.width=220;
         myText.height=20;
         spr01.addChild(myText);
         ar01[n]=(spr01);
         

         }
         return ar01;
      }
      
   }
}

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 20 Oct 2011 10:44 am
ya encontre una manera aunque no es poniendo los sprites una solucion seria -->

Código ActionScript :

package{
   import flash.text.TextField;
   import flash.text.TextFormat;
   import flash.display.Sprite;
   import flash.display.*;
   import flash.display.DisplayObject;
   import flash.events.Event;


   
   public class struk {
      public var st01:String='yuxtaposició';
      var spr01:Sprite=new Sprite;
      var spr02:Sprite=new Sprite;
      var ar01:Array= new Array;
      public function f01():Array{
         for(var n:uint=0;n<=1;n++){
            var k:uint;
            k=n*20;
            trace (k);
            
         
         var formatoTexto:TextFormat=new TextFormat();
         formatoTexto.color=0x000000;
         formatoTexto.size=11;
         formatoTexto.align='center';
         formatoTexto.font='courier new';
         formatoTexto.bold=false;
         var myText:TextField = new TextField();
         myText.defaultTextFormat=formatoTexto;
         myText.textColor = 0x000000;
         myText.x=10;
         myText.y=100+k;
         myText.border=true;
         myText.text = st01;
         myText.width=220;
         myText.height=20;
         
         ar01[n]=myText;
         

         }
         return ar01;
      }
      
   }
}

luego podria tener varios y identificarlos simplemente poniento en el archivo (fla)-->

Código ActionScript :

import struk;
var aa:struk=new struk;
var ak0:Array=new Array();
ak0=aa.f01();
addChild(ak0[3]);
addChild(ak0[2]);

me interesa mucho diferenciarlos y identificar una funcion de evento para cada uno de ellos, por eso el problema lo tengo cuando no puedo almacenar en el array -->sprite1,sprite2,sprite3...
dentro de los cuales con sus respectivas funciones y eventos, si alguien tiene alguna idea , mil gracias de antemano

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 20 Oct 2011 11:31 am
consegui guardar los sprites dentro de un array pero no me los trata como un boton he aki el ejemplo de (struk.as) -->

Código ActionScript :

package{
   import flash.text.TextField;
   import flash.text.TextFormat;
   import flash.display.Sprite;
   import flash.display.*;
   import flash.display.DisplayObject;
   import flash.events.Event;


   
   public class struk {
      public var st01:Array=new Array('yuxtaposició','patata','teclat','colom','arreboire','contingut','blau','rentadora','cadira','ratoli');
      //var spr01:Sprite=new Sprite;
      var spr02:Sprite=new Sprite;
      var ar01:Array= new Array;
      public function f01():Array{
         for(var n:uint=0;n<=9;n++){
            var k:uint;
            k=n*20;
            trace (k);
            
         var spr01:Sprite=new Sprite;
         var formatoTexto:TextFormat=new TextFormat();
         formatoTexto.color=0x000000;
         formatoTexto.size=11;
         formatoTexto.align='center';
         formatoTexto.font='courier new';
         formatoTexto.bold=false;
         var myText:TextField = new TextField();
         myText.defaultTextFormat=formatoTexto;
         myText.textColor = 0x000000;
         myText.x=10;
         myText.y=160+k;
         myText.border=true;
         myText.text = st01[n];
         myText.width=220;
         myText.height=20;
         spr01.addChild(myText);
         spr01.buttonMode=true;
         ar01[n]=spr01;
         

         }
         return ar01;
      }
      
   }
}

luego en el archivo fla tengo esto -->

Código ActionScript :

import struk;
var aa:struk=new struk;
var ak0:Array=new Array();
ak0=aa.f01();
for(var t:uint=0;t<=9;t++){
addChild(ak0[t]);
}

me lo ejecuta todo sin errores peeeeero no me los detecta como botones, cuando pongo el mouse encima no me aparece como boton, si alguien tiene alguna idea de como hacerlo gracias de antemano, mientras seguire investigando como conseguirlo.

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 20 Oct 2011 12:00 pm
la solucion estaba en -->

Código ActionScript :

spr01.mouseChildren=false;
-->ahora voy a ponerle eventos dentro del for a ver como queda la cosa XDD.

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 20 Oct 2011 01:27 pm
Bien hecho man,, asi se hace!!


eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox
Citar            
MensajeEscrito el 20 Oct 2011 04:54 pm
estoy probando como poner los eventos aki del tipo Roll_OVer, que si pongo el mouse encima el backgroundcolor del textfield me varie, pero nada, si pudirea hacer como en php que los strings de un array los puedo convertir en variables el tema esta resuelto pero veo que en as3 eso no es posible--> una posible solucion que en php se que es posible, es crear un array por ejemplo var ar01:Array=new Array('st01','st02,'st03','st04'....) --> luego (esto que viene ahora si que se puede hacer en php , mi pregunta es se puede llegar ha hacer en as3???? -->
for(var n:uint=0;n<=50;n++){
//siendo ar01[0]='st01';//siendo ar01[1]='st02';//siendo ar01[2]='st03';//..............
var ar01[n] :TextField=new TextField();
//creando 50 textfield sin poner casinada de codigo
// y el problema que tengo es que al poner por ejemplo --> var ar01[0]:TextField=new //TextField() no me lo traduce como si fuera var st01:TextField=new TextField(); --> XD veis //por donde voy asi que si nadie sabe como, voy a tener que comenzar a hacer experimentos //voy a probar una cosa del tipo trace();
}

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 20 Oct 2011 05:14 pm
ya lo tengo ahora si que voy a poder hacer verdaderas marranadas con el codigo XD

Código ActionScript :

var st:Array=new Array('st00','st01','st03');
var test:String=st[0];
this[test]="Hello World";
trace(this.st00);

a ver si puedo colgar a st00 o st01 no solo strings sino Sprites, si pudiera todo el mal rollo ocasionado por los eventos se va a solucionar.

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Oct 2011 06:02 am
nada no se puede, o almenos no lo consegui, apartir de aki tengo dos posibilidades o bien escribiendo cada boton individualmente lo cual seria un error o bien conseguir meter un evento en el for y que me los detectase como diferentes a ver si lo consigo.

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Oct 2011 01:13 pm
man, podes aclarar mejor lo que queres hacer?. De que tema se trata,,, pero concretamente.


eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox
Citar            
MensajeEscrito el 21 Oct 2011 03:02 pm
el tema es que buscando buscando consegui hacer lo siguiente

Código ActionScript :

var r01:uint;var r02:uint;var k1:uint;var k2:uint;var spr02:Sprite=new Sprite;var n:uint;
var st01:Array=new Array('yuxtaposició','pрпак','teclat','colom','arreboire',
'contingut','blau','rentadora','cadira','ratoli','jerro','id¶☺a','pare','teclat',
'malson','desgracia','finestra','taronja','caball','lampada','escacs','tintorera',
'ura','plati','esquema','llantia','mag','electro','cantar','rodona');
var formatoTexto:TextFormat=new TextFormat();
for(n=0;n<=29;n++){            
   if((n>=0)&&(n<=9)){r01=n;r02=0;}if((n>=10)&&(n<=19)){r01=(n-10);r02=1;}if((n>=20)&&(n<=29)){r01=(n-20);r02=2;}
    k1=r01*20;k2=r02*266;this['spr'+n]=new Sprite;this['tf'+n]=new TextField();
    formatoTexto.color=0x000000;formatoTexto.size=11;formatoTexto.align='center';
   formatoTexto.font='courier new';formatoTexto.bold=false; 
    this['tf'+n].defaultTextFormat=formatoTexto; 
    this['tf'+n].textColor = 0x000000; 
    this['tf'+n].x=25+k2; 
    this['tf'+n].y=160+k1; 
    this['tf'+n].border=true; 
    this['tf'+n].text = st01[n]; 
    this['tf'+n].width=220; 
    this['tf'+n].height=20;
   this['tf'+n].backgroundColor=0xff22ff;
    this['spr'+n].addChild(this['tf'+n]); 
    this['spr'+n].buttonMode=true; 
   this['spr'+n].mouseChildren=false;
   spr02.addChild(this['spr'+n]); 
        } 
for(var m:uint=0;m<=29;m++){
   this['tf'+m]=new TextField();
   this['spr'+m]=new Sprite;
   this['fout'+m]=new function();
   this['fove'+m]=new function();
this['spr'+m].addEventListener(MouseEvent.ROLL_OUT,(this['fout'+m]));
this['spr'+m].addEventListener(MouseEvent.ROLL_OVER,(this['fove'+m]));
function this['fout'+m](e:MouseEvent):void{this['tf'+m].textColor=0xff0000;}
function this['fove'+m](e:MouseEvent):void{this['tf'+m].textColor=0x0000ff;}
}
addChild(spr02);

variables dinamicas, el problema ahora es como hacer efectivos con las variables dinamicas estas la funciones y hacer la asignacion de funciones dinamicas correctamente, es que estuve intentando con los scripts anteriores y me fue imposible, asi que opte por las variables dinamicas dentro siempre de el for, el problema es que no me coge la funciones correctamente.

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Oct 2011 05:03 pm
CLARO!

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox
Citar            
MensajeEscrito el 23 Oct 2011 07:52 am
tema resuelto impresionante reduccion de codigo

Código ActionScript :

var r01:uint;var r02:uint;var k1:uint;var k2:uint;var spr02:Sprite=new Sprite;var n:uint; 
var st01:Array=new Array('yuxtaposició','pрпак','teclat','colom','arreboire', 
'contingut','blau','rentadora','cadira','ratoli','jerro','id¶☺a','pare','teclat', 
'malson','desgracia','finestra','taronja','caball','lampada','escacs','tintorera', 
'ura','plati','esquema','llantia','mag','electro','cantar','rodona'); 
var formatoTexto:TextFormat=new TextFormat(); 
for(n=0;n<=29;n++){             
   if((n>=0)&&(n<=9)){r01=n;r02=0;}if((n>=10)&&(n<=19)){r01=(n-10);r02=1;}if((n>=20)&&(n<=29)){r01=(n-20);r02=2;} 
   k1=r01*20;k2=r02*266;this['spr'+n]=new Sprite;this['tf'+n]=new TextField(); 
   formatoTexto.color=0x000000;formatoTexto.size=11;formatoTexto.align='center'; 
   formatoTexto.font='courier new';formatoTexto.bold=false;this['tf'+n].defaultTextFormat=formatoTexto;  
   this['tf'+n].textColor = 0x000000;this['tf'+n].x=25+k2;this['tf'+n].y=160+k1;this['tf'+n].border=true;  
   this['tf'+n].text = st01[n];this['tf'+n].width=220;this['tf'+n].height=20;this['tf'+n].background=true;
   this['tf'+n].backgroundColor=0xffffff;this['tf'+n].borderColor=0xf5f5f5; 
   this['spr'+n].addChild(this['tf'+n]);this['spr'+n].buttonMode=true;this['spr'+n].mouseChildren=false;     
   this['spr'+n].addEventListener(MouseEvent.ROLL_OUT,out);this['spr'+n].addEventListener(MouseEvent.ROLL_OVER,over); 
   spr02.addChild(this['spr'+n]);}  ////-->final del for
function over(evt:MouseEvent):void{this['tf'+(((evt.target.name.substr(8))-2)/2)].backgroundColor=0xf1f1f1;};
function out(evt:MouseEvent):void{this['tf'+(((evt.target.name.substr(8))-2)/2)].backgroundColor=0xffffff;};
addChild(spr02);

INCREIBLE --> mil gracias a todos

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Oct 2011 03:25 pm
Esta es otra manera de hacerlo, dime q t parece:

Código ActionScript :

import flash.text.TextField;
import flash.display.MovieClip;
import DynamicSprite;
var spr02:Sprite=new Sprite;
var n:uint;  
var st01:Array=new Array('yuxtaposició','pрпак','teclat','colom','arreboire',  
'contingut','blau','rentadora','cadira','ratoli','jerro','id¶☺a','pare','teclat',  
'malson','desgracia','finestra','taronja','caball','lampada','escacs','tintorera',  
'ura','plati','esquema','llantia','mag','electro','cantar','rodona');  

var textos:Array;

var formatoTexto:TextFormat=new TextFormat();  
formatoTexto.color=0x000000;
formatoTexto.size=11;
formatoTexto.align='center';  
formatoTexto.font='courier new';
formatoTexto.bold=false;
formatoTexto.color = 0x000000;

var x0:Number = 0;
var y0:Number = 0;

var filas:uint = 10;
var cont:uint = 0;

textos = new Array();
for (n = 0; n < st01.length; n++)
{
   var txtContainer:DynamicSprite = new DynamicSprite();
   var texto:TextField = new TextField();
   texto.defaultTextFormat=formatoTexto;
   texto.border=true;   
   texto.text = st01[n];
   texto.width=220;
   texto.height=20;
   texto.background=true; 
   texto.backgroundColor=0xffffff;
   texto.borderColor=0xf5f5f5;   
   
   textos.push(texto);
   
   txtContainer.buttonMode=true;
   txtContainer.mouseChildren=false;      
   txtContainer.addEventListener(MouseEvent.ROLL_OUT,out);
   txtContainer.addEventListener(MouseEvent.ROLL_OVER,over);
   
   txtContainer.addChild(texto);
   txtContainer.x = x0;
   txtContainer.y = y0;
   txtContainer.id = n;
   cont++;
   
   if (cont == filas)
   {
      cont = 0;
      x0 += 225;
      y0 = 0;
   } else
   {
      y0 += 20;
   }
   
   spr02.addChild(txtContainer);
}

addChild(spr02);

function over(evt:MouseEvent):void
{   
   textos[evt.target.id].backgroundColor = 0xf1f1f1;   
} 
function out(evt:MouseEvent):void
{   
   textos[evt.target.id].backgroundColor = 0xffffff;   
}/**/


gracias a DynamicSprite podemos guardar un id en el sprite, y con el buscar el texto correspondiente en el array de textos.

Código ActionScript :

package  {
   import flash.display.Sprite;
   public dynamic class DynamicSprite extends Sprite{

      public function DynamicSprite() 
      {
         
      }

   }
   
}/**/


otra forma podria ser declarar a txtContainer como Movieclip, la clase MovieClip permite agregar nuevas variables en tiempo de ejecucion como lo hace DynamicSprite.

Código ActionScript :

var txtContainer:MovieClip = new MobieClip();

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox
Citar            
MensajeEscrito el 23 Oct 2011 03:31 pm
faking bug de codigo.
corrijo el ultimo codigo q deje

Código ActionScript :

var txtContainer:MovieClip = new MovieClip();
/**/

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox
Citar            
MensajeEscrito el 24 Oct 2011 08:38 am
voy a ponerme a ello ahora a ver que tal la clase esta de dynamicsprite, no si cada vez que mas conozco de as3 cada vez me gusta mas, voy ha hacer unas pruebas y os lo comento.

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 24 Oct 2011 10:43 am
la verdad creo que es mejor el codigo anterior ademas ahora solo tengo que renombrar los sprites y los enumero como quiera con.

Código ActionScript :

this['spr'+n].name='tf'+n;

quedandome el codigo

Código ActionScript :

var r01:uint;var r02:uint;var k1:uint;var k2:uint;var spr02:Sprite=new Sprite;var n:uint; 
var st01:Array=new Array('yuxtaposició','pрпак','teclat','colom','arreboire', 
'contingut','blau','rentadora','cadira','ratoli','jerro','id¶☺a','pare','teclat', 
'malson','desgracia','finestra','taronja','caball','lampada','escacs','tintorera', 
'ura','plati','esquema','llantia','mag','electro','cantar','rodona'); 
var formatoTexto:TextFormat=new TextFormat(); 
for(n=0;n<=29;n++){             
   if((n>=0)&&(n<=9)){r01=n;r02=0;}if((n>=10)&&(n<=19)){r01=(n-10);r02=1;}if((n>=20)&&(n<=29)){r01=(n-20);r02=2;} 
   k1=r01*22;k2=r02*266;this['spr'+n]=new Sprite;this['tf'+n]=new TextField(); 
   formatoTexto.color=0x000000;formatoTexto.size=11;formatoTexto.align='center'; 
   formatoTexto.font='courier new';formatoTexto.bold=false;this['tf'+n].defaultTextFormat=formatoTexto;  
   this['tf'+n].textColor = 0x000000;this['tf'+n].x=25+k2;this['tf'+n].y=160+k1;this['tf'+n].border=true;  
   this['tf'+n].text = st01[n];this['tf'+n].width=220;this['tf'+n].height=20;this['tf'+n].background=true;
   this['tf'+n].backgroundColor=0xffffff;this['tf'+n].borderColor=0xa5a5a5; 
   this['spr'+n].addChild(this['tf'+n]);this['spr'+n].buttonMode=true;this['spr'+n].mouseChildren=false;     
   this['spr'+n].addEventListener(MouseEvent.ROLL_OUT,out);this['spr'+n].addEventListener(MouseEvent.ROLL_OVER,over); 
   this['spr'+n].name='tf'+n;
   spr02.addChild(this['spr'+n]);
   
   }  
   ////-->final del for
function over(evt:MouseEvent):void{this[evt.target.name].backgroundColor=0xf1f1f1;};
function out(evt:MouseEvent):void{this[evt.target.name].backgroundColor=0xffffff;};
addChild(spr02);

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox

 

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