Foros del Web » Programando para Internet » Javascript »

Crear eventos

Estas en el tema de Crear eventos en el foro de Javascript en Foros del Web. Buenas, estoy intentando crear un panel de dibujo con canvas y HTML5 en el que, por el momento, solo se pueden dibujar puntos. Para ello, ...
  #1 (permalink)  
Antiguo 28/07/2011, 06:01
 
Fecha de Ingreso: julio-2011
Mensajes: 6
Antigüedad: 13 años, 5 meses
Puntos: 0
Crear eventos

Buenas, estoy intentando crear un panel de dibujo con canvas y HTML5 en el que, por el momento, solo se pueden dibujar puntos. Para ello, he creado un constructor para el objeto punto() añadiendole propiedades como las coordenadas y un id; y metodos como dibujarlo, borrarlo, y mostrar sus datos.

El problema que tengo es que quiero poder seleccionarlos. Para ello, no se si deberia añadir un EventListener al objeto canvas para que compruebe si las coordenadas del "click" corresponden con las de algun punto existente, o a cada objeto punto añadirle una propiedad o metodo que lo detecte. En el segundo caso, ¿como deberia hacerlo?
  #2 (permalink)  
Antiguo 28/07/2011, 06:28
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 6 meses
Puntos: 834
Respuesta: Crear eventos

No podés asignarle un evento a "zonas" dibujadas dentro del objeto canvas. Tal como mencionás la opción es asignarle el evento al objeto canvas y detectar las coordenadas o bien trabajar con más de un objeto canvas.
  #3 (permalink)  
Antiguo 28/07/2011, 06:38
 
Fecha de Ingreso: julio-2011
Mensajes: 6
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Crear eventos

Es lo que suponia, no puedo añadir un evento a los puntos porque no son mas que zonas pintadas. Para detectarlo a partir del objetos canvas deberia recorrer todos los objetos puntos y comparar las coordenadas con las del click, ¿no?

La otra opcion que propones, ¿como seria?
  #4 (permalink)  
Antiguo 28/07/2011, 06:52
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 6 meses
Puntos: 834
Respuesta: Crear eventos

Cita:
Para detectarlo a partir del objetos canvas deberia recorrer todos los objetos puntos y comparar las coordenadas con las del click, ¿no?
No necesariamente. Si diseñás bien no sería necesario hacer algo tan costoso. Un buen ejemplo es cómo detectan las colisiones aquí:
http://billmill.org/static/canvastutorial/

Con respecto a la segunda manera, hay una tendencia de cierta gente que hace juegos relacionada con el principio "divide y vencerás" que sugiere no trabajar con uno sino varios objetos canvas para dibujo y transformación, y moverlos como se hace normalmente con elementos de bloque (como siempre se venía haciendo con el desarrollo de juegos en dhtml clásico antes de que existiera canvas). No es algo muy difundido y no estoy demasiado de acuerdo porque sólo se trata de relegar al objeto canvas a la categoría de sprite, pero es algo para analizar y estudiar.
  #5 (permalink)  
Antiguo 28/07/2011, 11:57
 
Fecha de Ingreso: julio-2011
Mensajes: 6
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Crear eventos

He probado con esto, y funciona perfectamente:

Código Javascript:
Ver original
  1. function comprobarSelect(evento) {
  2. //Extraigo las coordenadas del click del raton
  3.   if (evento.layerX || evento.layerX == 0) {
  4.  
  5.    X = evento.layerX;
  6.    Y = evento.layerY;
  7.  
  8.   } else if (evento.offsetX || evento.offsetX == 0) {
  9.  
  10.    X = evento.offsetX;
  11.    Y = evento.offsetY;
  12.  
  13.   }
  14. //verifico si la matriz contiene algun punto
  15.   if (puntos.length > 0) {
  16. //recorro cada uno de ellos
  17.    for (i=0;i<puntos.length;i++) {
  18.  
  19.     puntoActual = puntos[i];
  20.  
  21.     if (X >= puntoActual.coorX && X <= puntoActual.coorX + puntoActual.width && Y >= puntoActual.coorY && Y <= puntoActual.coorY + puntoActual.height) {
  22.  
  23.      canvas1.removeEventListener("click",crearPunto);
  24.      puntoActual.select();
  25.      alert("Has seleccionado el punto " + puntoActual.indice);
  26.      canvas1.addEventListener("click",crearPunto);
  27.  
  28.     }
  29.  
  30.    }
  31.  
  32.   }
  33.  
  34.  }

¡Muchas gracias por la ayuda!

Última edición por brown_charli95; 28/07/2011 a las 13:31

Etiquetas: eventos, objetos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:26.