Comunidad de diseño web y desarrollo en internet online

problema arrastrado y soltado en 2 columnas

Citar            
MensajeEscrito el 10 Abr 2012 04:13 pm
estoy haciendo un juego donde hay 4 bolas rojas 4 bolas azules 1 cuadro verde y uno amarillo lo que quiero lograr es arrastrar las bolas rojas al cuadro verde y las azules al amarillo si arrastran las azules al verde den error y las rojas al amarillo den error les dejo una imagen de ejemplo:



el codigo que he hecho hasta ahora es este:

Código ActionScript :

import flash.events.MouseEvent;


arrastre1.buttonMode = true
arrastre3.buttonMode = true
arrastre2.buttonMode = true
arrastre4.buttonMode = true
arrastre5.buttonMode = true
arrastre6.buttonMode = true
arrastre7.buttonMode = true
arrastre8.buttonMode = true



var correcto:Boolean = false;
var clip1:Array = [arrastre1,arrastre2,arrastre3,arrastre4];
var clip2:Array = [arrastre5,arrastre6,arrastre7,arrastre8];
var destino1:Array = [primerdestino];
var destino2:Array = [segundodestino];
var posXini:Number = 0
var posYini:Number = 0







function Empezar()
{
   GuardarDatos();
   ProgramarArrastres();
   Corregir();
}







function GuardarDatos()
{
   for (var i = 0;i < clip1.length; i++)
   {
      clip1[i].xIni = clip1[i]._x;
      clip1[i].yIni = clip1[i]._y;
      clip1[i].destino = destino1[i];
   }
   for (var i = 0;i < clip2.length; i++)
   {
      clip2[i].xIni = clip2[i]._x;
      clip2[i].yIni = clip2[i]._y;
      clip2[i].destino = destino2[i];
   }
}





function ProgramarArrastres()
{
   for(var i = 0; i < clip1.length; i++)
   {
      var clip = clip1[i];
      clip.addEventListener(MouseEvent.MOUSE_DOWN, clipPulsado);
      clip.addEventListener(MouseEvent.MOUSE_UP, clipSoltado);
   }
   for(var i = 0; i < clip2.length; i++)
   {
      var cli = clip2[i];
      cli.addEventListener(MouseEvent.MOUSE_DOWN, clip1Pulsado);
      cli.addEventListener(MouseEvent.MOUSE_UP, clip1Soltado);
   }
}

function clipPulsado (e: MouseEvent): void
{
   posXini = e.target.x;
   posYini = e.target.y;
   this.setChildIndex(MovieClip(e.target), this.numChildren-1);
   e.target.startDrag();
}

function clipSoltado (e: MouseEvent): void
{
   e.target.stopDrag();
   Soltar(MovieClip(e.target));
}

function clip1Pulsado (e: MouseEvent): void
{
   posXini = e.target.x;
   posYini = e.target.y;
   this.setChildIndex(MovieClip(e.target), this.numChildren-1);
   e.target.startDrag();
}

function clip1Soltado (e: MouseEvent): void
{
   e.target.stopDrag();
   Soltar(MovieClip(e.target));
}







function Soltar(clip: MovieClip)
{
   if(clip.destino.hitTestObject(clip))
   {
      clip.x = clip.destino.x;
      clip.y = clip.destino.y; 
   }
   else
   {
      clip.x = posXini;
      clip.y = posYini;
   }
   Corregir();
}







function Corregir()
{
   var aciertos = 0;
   for(var i = 0; i < clip1.length; i++)
   {
      if(clip1[i].hitTestObject(destino1[i]))
      {
         aciertos++;
      }
   }
   for(var i = 0; i < clip2.length; i++)
   {
      if(clip2[i].hitTestObject(destino2[i]))
      {
         aciertos++;
      }
   }
   correcto = (aciertos == clip1, clip2.length)?true:false;
      Aciertos_txt.text = aciertos.toString();
}





Empezar();

stop();


no se en que estoy mal

tambien espero entiendan que soy un novato en esto del actionscript encontraran mil errores pero estoy intentando comenzar ah hacer las cosas solo

espero me ayuden gracias =)

Por sidentelrgamer

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 Abr 2012 04:17 pm
a y se me paso aqui les dejo el ejemplo el .fla y .exe

ejemplo

Por sidentelrgamer

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Abr 2012 11:41 pm
nadie? XD

Por sidentelrgamer

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Abr 2012 02:24 pm
ps tu logica es un poquito diferente de la mia a la hora de esquematizar pero me gusta :D!

lo primero que te aconsegaria seria que crearas una clase para guardar una para las funciones de click y de arrastrar como a ti te paresca pero intenta manejarlo en clase de formas independiente y generas los objetos de dicha clase en un .fla principal donde utilizes los metodos que necesites eso facilita las cosas a la hora de darle mantenimiento al codigo.
porque en el que tienes ahora no se cual era la funcion main es decir la primera que se ejecuta y casi no la encuentro solo por que decia empezar jeje.. esque no me gustan los codigos largos y con metodos regados me enrreda :P ya eso es sicosis mia..

aqui hay un error en tu archivo

Código :

Las fuentes deben ser incorporadas en cualquier texto que se pueda editar en tiempo de ejecución- Texto que no tenga activada la opción "Usar fuentes de dispositivo". Utilice el comando Texto > Incorporación de fuentes para incorporar fuentes.
TypeError: Error #2007: El valor del parámetro hitTestObject debe ser distinto de null.
   at flash.display::DisplayObject/_hitTest()
   at flash.display::DisplayObject/hitTestObject()
   at ejercicioarrastradoysoltado_fla::MainTimeline/Corregir()
   at ejercicioarrastradoysoltado_fla::MainTimeline/Empezar()
   at ejercicioarrastradoysoltado_fla::MainTimeline/frame1()



creo que este es el primer metodo que se ejecuta

Código ActionScript :

function Empezar()
{
   GuardarDatos();
   ProgramarArrastres();
   Corregir();
}



estas llamando a la funcion Corregir();

la cual tiene esto

Código ActionScript :

function Corregir()
{
   var aciertos = 0;
   for(var i = 0; i < clip1.length; i++)
   {
      [size=24]if(clip1[i].hitTestObject(destino1[i]))[/size]
      {
         aciertos++;
      }
   }
   for(var i = 0; i < clip2.length; i++)
   {
     [size=24] if(clip2[i].hitTestObject(destino2[i]))[/size]
      {
         aciertos++;
      }
   }
   correcto = (aciertos == clip1, clip2.length)?true:false;
      Aciertos_txt.text = aciertos.toString();
}


por alguna razon del error dice que en esta condicion if(clip2[i].hitTestObject(destino2[i])) estas comparando dos objetos null te aconsegaria que revisaras eso... ahora no tengo mucho tiempo porque estoy en el trabajo pero espero haber encontrado algo

espero haber ayudado en algo Suerte


Aex Gerardo T Leon

Por alkimix

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Abr 2012 04:07 pm
hola hermano oye disculpame por no haberte contestado antes ya lo solucione!!! =) te dejo el codigo por si lo gustas usar alguna vez:

Código ActionScript :

import flash.events.MouseEvent;
import flash.display.MovieClip;

var arrastrado:MovieClip;
var total:int = 0;

for (var i:int = 0; i<8; i++) {
   var circle:String = 'circle'+i;
   if (i == 0) {circle = 'circle'};

   var este:MovieClip;
   este = getChildByName(circle) as MovieClip;
   
   este.buttonMode = true;
   este.addEventListener(MouseEvent.MOUSE_DOWN, arrastrar);
}

function arrastrar (e:MouseEvent):void {
   arrastrado = e.target as MovieClip;
   arrastrado.startDrag();
   stage.addEventListener(MouseEvent.MOUSE_UP, soltar);
}

function soltar (e:MouseEvent):void {
   stage.removeEventListener(MouseEvent.MOUSE_UP, soltar);
   arrastrado.stopDrag();
   arrastrado.removeEventListener(MouseEvent.MOUSE_DOWN, arrastrar);
   if (primerdestino.hitTestObject(arrastrado)) {
      total++;
      Aciertos_txt.text = 'Total de colisiones = '+total;
   }
}



y quedo mas corto de lo que imagine =) saludos

Por sidentelrgamer

61 de clabLevel



 

msie8
Citar            
MensajeEscrito el 14 Abr 2012 02:34 am
oki :D

Por alkimix

15 de clabLevel



 

chrome

 

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