Comunidad de diseño web y desarrollo en internet online

hacer recta de punto a punto en Flash as3?

Citar            
MensajeEscrito el 13 Sep 2013 04:31 pm
Buenos dias, quisiera que me ayuden a implementar un codigo que permita al hacer clic en un punto empieze a dibujar una recta hasta que haga clic en otro punto... quiero para hacer relaciones entre un cuadro y otro.

Muchas gracias, x su ayuda!

Por DJYovera

14 de clabLevel



 

Diseñador Web, Programador basico

chrome
Citar            
MensajeEscrito el 14 Sep 2013 06:56 am
BuenAS:

Aunque hablas de pulsar dos veces para empezar y acabar, el usuario generalmente lo que hace es oprimir el ratón, arrastrar el puntero y levantarlo, para esto último aquí tienes el código de ejemplo que te puede guiar. Es fundamental que tengas un MovieClip / Sprite / Imagen que cubra el escenario (NO lo pruebes con un escenario vacío).

Código :

import flash.display.Shape;
import flash.events.MouseEvent;
import flash.display.Graphics;

var line:Shape, g:Graphics;

var dragging:Boolean = false;

addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);

function mouseDownHandler(e:MouseEvent):void
{
   dragging = true;
   
   line = addChild(new Shape()) as Shape;
   line.x =  e.localX;
   line.y = e.localY;
   
   g = line.graphics
   
   addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}

function mouseMoveHandler(e:MouseEvent):void
{
   g.clear();
   g.lineStyle(1, 0x000000);
   g.lineTo(e.localX - line.x, e.localY - line.y);
}

function mouseUpHandler(e:MouseEvent):void
{
   if (dragging)
   {
      dragging = false;
      removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
   }
}


Pero si realmente quieres que el usuario haga click para empezar a dibujar la línea y otro click para acabar cambia los listeners MOUSE_DOWN Y MOUSE_UP por CLICK y sólo deberías pintar una línea desde el pto que has clicado por primera vez hasta el que has clicado por segunda.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 14 Sep 2013 08:47 am
BuenAS:

Para el caso de clicar sólo podría ser algo así (acuérdate de tener algo de fondo en el escenario). He añadido un pto de referencia para que se sepa dónde se ha clicado por primera vez. Aunque, como dije, creo que es mejor la primera opción de pulsar y arrastrar para dibujar la línea:

Código ActionScript :

import flash.display.Shape;
import flash.display.Graphics;
import flash.events.MouseEvent;

var dragging:Boolean = false;

var line:Shape, g:Graphics;

var anchor:Shape = new Shape();
g = anchor.graphics;
g.lineStyle(1, 0x000000);
g.beginFill(0x000000, .1);
g.drawCircle(0, 0, 3);
g.endFill();

addEventListener(MouseEvent.CLICK, onClick);

function onClick(e:MouseEvent):void
{
   //trace("onClick", dragging);
   if (dragging)
   {
      g.lineStyle(1, 0x000000);
      g.lineTo(e.localX - anchor.x, e.localY - anchor.y);
      removeChild(anchor);
   }
   else
   {
      line = new Shape();
      g = line.graphics;
      anchor.x = line.x = e.localX;
      anchor.y = line.y = e.localY;
      
      addChild(anchor);
      addChild(line);
   }
   dragging = !dragging;
}


Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 16 Sep 2013 04:36 pm
el primer codigo es perfecto, tienes mucha razon, tiene que clickear y cuando suelta suelta la linea...

pero ahora tengo un problema... quiero validar las uniones...

Dentro de la funcion "mouseDownHandler" puse el siguiente codigo, para q el al momento que empieza el clic solo se muestre el q esta en un rango.. los otros se eliminan...

HASTA AHI FUNCIONA BIEN...
PERO EL LADO DE SOLTAR EL MOUSE_UP ya no funciona...

Código ActionScript :

  if(e.localX > 13 && e.localX<43){
      if(e.localY>0 && e.localY<13){ //Se borra
         MovieClip(root).borrar();
      }
      if(e.localY>12 && e.localY<41){
         
      }
      if(e.localY>40 && e.localY<73){ //Se borra
        MovieClip(root).borrar();
      }
      if(e.localY>72 && e.localY<104){
         
      }
      if(e.localY>103 && e.localY<136){//Se borra
          MovieClip(root).borrar();
      }
      if(e.localX>136 && e.localY<163){ 
         
      }
      if(e.localY>162){//Se borra
         MovieClip(root).borrar();
      }
   }else{
      MovieClip(root).borrar();
   }




lo puse dentro de la funcion "mouseUpHandler"

Código ActionScript :

 

if(e.localX>137 && e.localX<152){
        if(e.localY<13){
           MovieClip(root).borrar();
        }
        if(e.localY>12 && e.localY<42){
           
        }
        if(e.localY>41 && e.localY<76){
           MovieClip(root).borrar();
        }
        if(e.localY>75 && e.localY<107){
           
        }
        if(e.localY>106 && e.localY<135){
           MovieClip(root).borrar();
        }
        if(e.localY>134 && e.localY<165){
           
        }
        if(e.localY>164){
           MovieClip(root).borrar();
        }
     }else{
        MovieClip(root).borrar();
     }

Por DJYovera

14 de clabLevel



 

Diseñador Web, Programador basico

chrome
Citar            
MensajeEscrito el 17 Sep 2013 09:17 am
BuenAS:

Me da la sensación de que lo que quieres es hacer un cada oveja con su pareja. Si es el caso, casi mejor que ponerse a mirar si el objeto está en tal o cual posición podrias añadir el evento MOUSE_DOWN solo a los objeto sobre los que quieres que pulse el usuario.

Si hace esto en e.currentTarget vas a tener el objeto sobre el que se ha pulsado. Además, si a cada uno de estos objetos le das un nombre en e.currentTarget.name tendrás el nombre del objeto seleccionado.

Por ejemplo, si llamas nodo1, nodo2... a tus ptos donde quieres que se inicie el arrastre, y a cada uno de ellos le añades el listener MOUSE_DOWN, cuando el usuario pulse en alguno, por ejemplo, nodo2, en e.currentTarget.name tendrás el valor "nodo2".

Otra cosa que deberías hacer es algún sistema para relacionar los nodos con los destinos correctos, por ejemplo, un array del tipo ["destino2", "destino4", "destino1"] que te diga que el nodo 1 está relacionado con el 2, el 2 con en 4, el 3 con el 1, etc.

Googlea un poco algún ejemplo de juego tipo cada oveja con su pareja, y seguro que encuentras cómo hacerlo mucho más claro que el rollo que acabo de soltar ;)

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome

 

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