Comunidad de diseño web y desarrollo en internet online

Dibujar líneas RECTAS en actionscript

Citar            
MensajeEscrito el 08 Jun 2007 11:37 am
Hola!
Por más que busco no encuentro la solución.. Ya se como hacer para que cuando deje apretado el botón del mouse este empiece a dibujar, pero no quiero hacer esto. Quiero hacer líneas rectas, punto a punto. Como la misma opción de dibujo vectorial que tiene en el panel de herramientas de dibujo del flash ( / ). Cada vez que haga un onPress empezara a crearse otro “vector” a partir de donde terminó el otro.

De momento he llegado al siguiente esquema:
-Acciones del botón de fondo: recogen las coordenadas donde da click para empezar la línea ahí.
-Cada vez que hay click se llama a la función para crear el vector y esta muestra con un enterFrame el vector según el movimiento del puntero; algo así:

Código :

function Dibuixam(dibuja){
   if (dibuja){
      this.onEnterFrame = function() {
         with (linia) {
            clear();
            lineStyle(5,0xFFFFFF,100);
            moveTo(posX,posY);
            lineTo(_xmouse,_ymouse);
         }
      }
}


Lo que no se me ocurre es cuando hace el 2º click, que empiece el nuevo vector, continuando al otro. Debería hacerle un duplicatemovieclip al vector (linia)??

Uff, vaya tocho, espero que se haya entendido la duda, y alguien me tire un cable!

Salut!

Por loisin

65 de clabLevel



Genero:Masculino  

Colonia-Castells

firefox
Citar            
MensajeEscrito el 08 Jun 2007 01:51 pm

Código :

function Dibuixam(dibuja){
   if (dibuja){
      this.onEnterFrame = function() {
         with (linia) {
            clear();
            lineStyle(5,0xFFFFFF,100);
            moveTo(posX,posY);
            lineTo(_xmouse,_ymouse);
            posX = _xmouse;
            posY = _ymouse;
         }
      }
}

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 08 Jun 2007 02:39 pm
Hola interesante el codigo pero como lo llamo en el onPress ? espero que me ayuden saludos

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 08 Jun 2007 07:08 pm
Hacés el llamado a la función desde el botón.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 08 Jun 2007 07:19 pm
si ya lo hice pero me manda a decir que linia es un valor desconocido lo tengo asi
on(press)
{
Dibuixam(dibuja)pero dibuja es un valor booleano y linia que es un movieclip o que es
}
//
pero dibuja es un valor booleano y se que es un objeto pero de que un clip vacio o que es
Espero que me puedan orientar ya que este me siriviria mucho para hacer constelaciones de estrellas claro porque son dibujos en linea recta
Saludos

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 08 Jun 2007 07:28 pm

Código :

on (press) {
Dibuixam (true);
}
Hay un mc (linia) que es donde la función dibuja.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 08 Jun 2007 08:22 pm
mmm ya puse algo asi:
var linia:MovieClip = this.createEmptyMovieClip("linia", this.getNextHighestDepth());
//Al hacer click invocamos la función dibujar
linia.onMouseDown = Dibuixam;
function Dibuixam() {
this.onEnterFrame = function() {
with (linia) {
clear();
lineStyle(5, 0xFFFFFF, 100);
moveTo(posX, posY);
lineTo(_xmouse, _ymouse);
posX = _xmouse;
posY = _ymouse;
}
};
}
y de plano no me funciona :S

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 09 Jun 2007 07:21 pm
A ver...Probá con éte código en una película nueva:

Código :

this.createEmptyMovieClip ("dibujo", this.getNextHighestDepth ());
dibujo.onMouseDown = function () {
if (this.dibujando == undefined) {
this.lineStyle (1, 0xCCCCCC);
this.moveTo (_xmouse, _ymouse);
this.dibujando = true;
} else {
this.lineTo (_xmouse, _ymouse);
}
};

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 11 Jun 2007 07:57 am
Perdonad, pero no he podido conectarme antes.

El codigo que plantea Dano, veo que añade otra vez las variables PosX y PosY y les canvia el valor segun la posición del mouse, dentro del enterframe.
De esta forma no me dibuja la linea, sino un pequeño trazo.

Sigo peleandome con ello a ver si lo consigo; pero diria que aún no se ha entendido bien lo que quiero hacer. Seria como el último código de HernanRivas, pero con la diferència que al empezar, después de apretar el primer click la línia se va mostrando segun la posición del cursor y se para cuando aprietas otra vez, y al mismo tiempo se va mostrando la siguiente..

Por loisin

65 de clabLevel



Genero:Masculino  

Colonia-Castells

firefox
Citar            
MensajeEscrito el 11 Jun 2007 01:32 pm
Solucionado!
Al final dentro del enterFrame, duplico el moviclip "linia" i cada vez que apreto al botón llamo la función incrementando la variable "i" +1. De esta forma consigo que dibuja un vector, otro, otro, etc.
La función:

Código :

function Dibuixam(dibuixa, i, posX, posY){
   if (dibuja){
      this.onEnterFrame = function() {
         var LiniaAct = linia.duplicateMovieClip("linia"+i, (10*i));
         with (linia) {
            clear();
            lineStyle(5,0xFFFFFF,100);
            moveTo(posX,posY);
            lineTo(_xmouse,_ymouse);
         }
      }
   }
}


Espero que sirva. Me imagino que se podrá hacer de mil formas, pero cuando hay prisa...

Salut!

Por loisin

65 de clabLevel



Genero:Masculino  

Colonia-Castells

firefox
Citar            
MensajeEscrito el 11 Jun 2007 01:44 pm

loisin escribió:

pero diria que aún no se ha entendido bien lo que quiero hacer. Seria como el último código de HernanRivas, pero con la diferència que al empezar, después de apretar el primer click la línia se va mostrando segun la posición del cursor y se para cuando aprietas otra vez, y al mismo tiempo se va mostrando la siguiente..
La verdad, no entiendo lo que querés hacer.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 11 Jun 2007 02:29 pm
hola que tal hice las siguientes modificaciones y ya dibuja el vector pero mi problema es que cuando dibujo la recta y doy clic al siguiente, desaparece la linea recta que ya habia dibujado y asi sucesivamente, lo que hice es poner como un cuadrito para hacer referencia de donde esta haciendo clic he aqui el codigo:

Código :

this.createEmptyMovieClip("linia", this.getNextHighestDepth());
Mouse.hide();
mc_cuadrito.onMouseMove = function() {
   this.startDrag(true);
};
mc_cuadrito.onEnterFrame = function() {
   xdiff = _root._xmouse;
   ydiff = _root._ymouse;
};
mc_cuadrito.onMouseDown = function() {
   Dibuja(1, xdiff, ydiff);
};
i = 1;
function Dibuja(i, posX, posY) {
   i++;
   this.onEnterFrame = function() {
      var LiniaAct = linia.duplicateMovieClip("linia"+i, (10*i));
      with (linia) {
         clear();
         lineStyle(5, 0x000000, 100);
         moveTo(posX, posY);
         lineTo(_xmouse, _ymouse);
      }
   };
}

Espero que puedan echarme la mano
Saludos

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 11 Jun 2007 02:33 pm
Duplicás el MC linia, pero aún así no dibujás en las instancias duplicadas.

Te recomendaría que hiceras este pequeño cambio en tu función:

Código :

function Dibuja(i, posX, posY) {
   i++;
   this.onEnterFrame = function () {
      var LiniaAct = this.createEmptyMovieClip("linia" + i, this.getNextHighestDepth ());
      with (LiniaAct) {
         clear ();
         lineStyle (5, 0x000000, 100);
         moveTo (posX, posY);
         lineTo (_xmouse, _ymouse);
      }
   };
}

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 11 Jun 2007 03:09 pm
Vale thanks ya lo hizo ahora mi problema es que hace como un eco de las lineas o un espectro cuando le doy clic :S imagino que es por el metodo onEnterframe que esta haciendo el codigo como podria eliminar eso y como podria cuando llego a una "x" cordenada que deje de dibujar

Saludos

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 11 Jun 2007 03:14 pm

HernanRivas escribió:

loisin escribió:

pero diria que aún no se ha entendido bien lo que quiero hacer. Seria como el último código de HernanRivas, pero con la diferència que al empezar, después de apretar el primer click la línia se va mostrando segun la posición del cursor y se para cuando aprietas otra vez, y al mismo tiempo se va mostrando la siguiente..
La verdad, no entiendo lo que querés hacer.


Lo se, no me expliqué nada bién, pero como digo ya lo tengo solucionado a mi manera. Subo el swf temporalmente para que veais lo que queria hacer:
VECTORES

Muchas gracias!
Salut!

Por loisin

65 de clabLevel



Genero:Masculino  

Colonia-Castells

firefox
Citar            
MensajeEscrito el 11 Jun 2007 03:19 pm

joshuavw escribió:

Vale thanks ya lo hizo ahora mi problema es que hace como un eco de las lineas o un espectro cuando le doy clic :S imagino que es por el metodo onEnterframe que esta haciendo el codigo como podria eliminar eso y como podria cuando llego a una "x" cordenada que deje de dibujar

Saludos
Para borrar el onEnterFrame usas delete.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 11 Jun 2007 03:30 pm
Vale loisin yo quiero hacer lo mismo mismo ya que la actividad que tengo que hacer es hacer constelaciones de estrellas no se si me podrias pasar el .fla para que me pueda basar y hacer modificaciones a lo que yo ya tengo

Saludos cordiales

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 11 Jun 2007 03:39 pm
Encantado, joshuavw aquí lo tienes (temporalmente):
FLA

Salut!

Por loisin

65 de clabLevel



Genero:Masculino  

Colonia-Castells

firefox
Citar            
MensajeEscrito el 11 Jun 2007 03:58 pm
Vale gracias por el archivo
Saludos desde mexico

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 03 Jul 2007 08:28 pm
Hola que tal espero que me ayuden otra vez he modificado el codigo de loisin para dibujar lineas rectas y algun codigo de mas

Código :

this.createEmptyMovieClip("linia", 2);
this.attachMovie("cercle", "cercle", 3);
this.cercle._visible = false;
var contador:Number = 0;
var sumam:Number = 0;
var acabat:Boolean = false;
mcArea.onPress = function() {
   if (contador == 0) {
      iniX = _root._xmouse;
      iniY = _root._ymouse;
      dibuixa = true;
   }
   contador++;
   if ((_root._xmouse>=iniX-10 && _root._xmouse<=iniX+10) && (_root._ymouse>=iniY-10 && _root._ymouse<=iniY+10) && contador>2) {
      trace("SON IGUALS ESTAS AL PUNT D'INICI");
      acabat = true;
      Dibuixam(false);
   } else {
      if (!acabat) {
         sumam++;
         Dibuixam(true, sumam, _xmouse, _ymouse);
      }
   }
};
function Dibuixam(dibuixa, sumam, posX, posY) {
   trace(sumam);
   if (dibuixa) {
      this.onEnterFrame = function() {
         var LiniaAct = linia.duplicateMovieClip("linia"+sumam, (10*sumam)+2);
         recup = LiniaAct;
         var CercleAct = cercle.duplicateMovieClip("cercle"+sumam, (10*sumam)+3);
         with (LiniaAct) {
            clear();
            lineStyle(3, 0xFFFFFF, 100);
            moveTo(posX, posY);
            lineTo(_xmouse, _ymouse);
            }
         CercleAct._visible = true;
         CercleAct._x = posX;
         CercleAct._y = posY;
         };
   } else {
      recup.lineTo(iniX, iniY);
      recup.lineStyle(3, 0xFFFFFF, 100);
      delete this.onEnterFrame;
   }
}

Este codigo lo hace con un el mismo mouse , mis preguntas son tres:
1. Como puedo atachear un movie clip de un lapiz para que parezca que esta dibujando un lapiz efectivcamente
2. Este script hace lineas seguidas solo quiero hacer una linea recta solamente no encuentro la forma , en otros post encontre esto

Código :

this.createEmptyMovieClip("dibujo", this.getNextHighestDepth());
dibujo.lineStyle(.1, 0xCCCCCC);
dibujo.dibujando = false;
dibujo.onMouseDown = function() {
   this.moveTo(_xmouse, _ymouse);
   this.dibujando = true;
};
dibujo.onMouseUp = function() {
   this.dibujando = false;
};
dibujo.onMouseMove = function() {
   if (this.dibujando) {
      this.lineTo(_xmouse, _ymouse);
   }
};

Este hace lo que requiero pero dibuja arrastrando el mouse y me convendria que si le doy en un clic empiese a hacer la linea hasta donde de clic en el segundo punto, como en el primer codigo

Espero que me ayuden saludos

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7

 

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