donde indicaba como hacer un puzzle en AS 2, yo solo he adecuado el código a AS 3, y le agregué una que otra pequeña cosilla.
Pues bien amigos, mi puzzle esta casi listo, pero hay un error que me esta volviendo loco ya que no se como solucionarlo, se trata que al presionar por segunda vez el botón de reinicio, me sale el siguiente error:
Código :
ArgumentError: Error #2025: El objeto DisplayObject proporcionado debe ser un elemento secundario del llamador. at flash.display::DisplayObjectContainer/removeChild() at MethodInfo-247()
El programa reinicia el juego a pesar de este mensaje de error, pero quisiera saber como hago para arreglar este detallito, les adjunto el archivo .Fla aqui: http://rapidshare.com/files/238568843/puzzleas3.rar.html por si quieren darle una ojeadita a mi programa, aclarando que hay 4 objetos en el escenario:
2 numericSteeper llamados: numStepF y numStepC
1 cuadro de texto dinamico llamado txtFaltan
1 button de nombre btnReiniciar
Bueno y para los que no quieren descargarse el archivo, les adjunto el código, perdonen si anda medio desordenado, pero como dije anteriormente, recién estoy aprendiendo.
Código :
import flash.filters.BevelFilter; var loader:Loader = new Loader(); loader.load(new URLRequest("flores.jpg")); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, alCargar); var mapaBits:Bitmap; function alCargar(e:Event) { var bitmap:Bitmap = loader.content as Bitmap; var rect:Rectangle = new Rectangle(0,0, bitmap.width,bitmap.height); var punto:Point= new Point(0,0); var figura:BitmapData=new BitmapData(bitmap.width,bitmap.height,false,0x000000FF); figura.copyPixels(bitmap.bitmapData,rect,punto); mapaBits=new Bitmap(figura); puzzle(mapaBits,numStepF.value,numStepC.value,false); } function puzzle(imagen,f,c,lin) { for (var hg=0; hg<4*tpz; hg++) { removeChild(pz[hg]); } var a=new Array(1,12,0,.35,2,12,1,.15,3,2,4,.2,5,4,6,.5,7,6,8,.5,10,12,2,.15,9,8,10,.4,11,12,10,.15); var tpz=f*c; var j; c>f?j=20/c:j=20/f; var bF=new BevelFilter(1,45); var img=imagen.bitmapData; var w=img.width; var h=img.height; var m1=w/(3*c); var m2=h/(3*f); var p=[]; var d=0; var m; for (m=0; m<4*tpz; m+=4) { p[m+7] = p[m+1] = d++; if ((d-1)%(2*c) == 2*(c-1)) { p[m+1]=p[(m+4)%(4*tpz) +3]=2*tpz-2; } p[m+4*c] = p[m+2] = d++; if (d>2*(tpz-c) && d%2 == 0) { p[m+2]=p[(m+4*c)%(4*tpz)]=2*tpz-1; } } var g; var b:Array=new Array(); var alea; var sig; for (g=0; g<2*tpz; g++) { b[g]=[]; b[g][0] = new Point(m1, m2); (.1 - Math.random() / 5)<0 ? sig=-1 : sig=1; if (g%2 == 0) { b[g][12] = new Point(m1, 4*m2); b[g][4] = new Point(m1-m1*sig*.6, m2*(2+(.1 - Math.random() / 5))); b[g][6] = new Point(m1-m1*sig*.9, m2*(2.5+(.1 - Math.random() / 5))); b[g][8] = new Point(m1-m1*sig*.6, m2*(3+(.1 - Math.random() / 5))); } else { b[g][12] = new Point(4*m1, m2); b[g][4] = new Point(m1*(2+(.1 - Math.random() / 5)), m2-m2*sig*.6); b[g][6] = new Point(m1*(2.5+(.1 - Math.random() / 5)), m2-m2*sig*.9); b[g][8] = new Point(m1*(3+(.1 - Math.random() / 5)), m2-m2*sig*.6); } var r; for (r=0; r<29; r+=4) { b[g][a[r]] = Point.interpolate(b[g][a[r+1]],b[g][a[r+2]],a[r+3]+(.1 - Math.random() / 5)); } } var pz:Array =new Array(); var pt:Array=new Array(); var n; var miX=25; var miY=25; var cont=0; var child:Shape = new Shape(); child.graphics.beginFill(0xffffff); child.graphics.lineStyle(2, 0xcccccc); child.graphics.drawRect(25+m1,25+m2,w,h); child.graphics.endFill(); addChild(child); txtFaltan.text="Faltan: "+f*c; btnReiniciar.label="Reiniciair"; for (n=0; n<f*c; n++) { pz[n]=new MovieClip(); pz[n].x=miX; pz[n].y=miY; cont++; if (cont %c==0) { miX=25; miY+=h/f; } else { miX+=w/c; } var tmp2 = new BitmapData(5*m1, 5*m2, true, 0); var punto:Point= new Point(0,0); pt[n] = new Point((n%c)*3*m1-m1, Math.floor(n/c)*3*m2-m2); tmp2.copyPixels(img,new Rectangle(pt[n].x,pt[n].y,5*m1,5*m2),punto); var z; var sy; var sx; for (z=0; z<4; z++) { z == 2 ? sy=3*m2 : sy=0; z == 1 ? sx=3*m1 : sx=0; g = p[4*n+z]; pz[n].graphics.beginBitmapFill(tmp2); pz[n].graphics.moveTo(5*m1/2, 5*m2/2); pz[n].graphics.lineTo(b[g][0].x+sx, b[g][0].y+sy); if (g>(2*tpz-3) || lin) { pz[n].graphics.lineTo(b[g][12].x+sx, b[g][12].y+sy); } else { pz[n].graphics.lineTo(b[g][1].x+sx, b[g][1].y+sy); for (j=2; j<12; j+=2) { pz[n].graphics.curveTo(b[g][j].x+sx, b[g][j].y+sy,b[g][j+1].x+sx,b[g][j+1].y+sy); } pz[n].graphics.lineTo(b[g][12].x+sx, b[g][12].y+sy); } pz[n].graphics.lineTo(5*m1/2, 5*m2/2); pz[n].graphics.endFill(); } pt[n].x = pz[n].x; pt[n].y = pz[n].y; pz[n].filters = [bF]; pz[n].v = n; pz[n].x=Math.round(Math.random()*(w-m1)); pz[n].y=Math.round(Math.random()*(h-m2)); addChild(pz[n]); } for (var i:int=0; i<cont; i++) { pz[i].addEventListener(MouseEvent.MOUSE_DOWN, mover); pz[i].addEventListener(MouseEvent.MOUSE_UP,detener); } function mover(event:MouseEvent):void { for (var i:int=0; i<cont; i++) { if (pz[i].name==event.currentTarget.name) { pz[i].startDrag(); addChild(pz[i]); } } } function detener(event:MouseEvent):void { for (var i:int=0; i<cont; i++) { if (pz[i].name==event.currentTarget.name) { pz[i].stopDrag(); if (iman(pz[i].x,pt[i].x,pz[i].y,pt[i].y)) { pz[i].x=pt[i].x; pz[i].y=pt[i].y; } } } var pfl=f*c; for (var pf:int=0; pf<c*f; pf++) { if (pz[pf].x==pt[pf].x && pz[pf].y==pt[pf].y) { pfl--; } } if (pfl==0) { txtFaltan.text="Buen trabajo"; for (var pel:int=0; pel<c*f; pel++) { pz[pel].filters=null; } } else { txtFaltan.text="Faltan: "+pfl; } } function iman(puntoA1:int,puntoA2:int,puntoB1:int,puntoB2:int):Boolean { var fi:Number=8; if (puntoA1>puntoA2-fi && puntoA1<puntoA2+fi && (puntoB1>puntoB2-fi && puntoB1<puntoB2+fi)) { return true; } else { return false; } } btnReiniciar.addEventListener(MouseEvent.MOUSE_DOWN, reinicia); function reinicia(event:MouseEvent):void { for (var count=0; count<f*c; count++) { removeChild(pz[count]); } removeChild(child); puzzle(mapaBits,numStepF.value,numStepC.value,false); } }