Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Ideas para mapa (trabajando con ajax)

Estas en el tema de Ideas para mapa (trabajando con ajax) en el foro de Frameworks JS en Foros del Web. Buenas noches, que tal, vengo con la necesidad de que me abran la cabeza El tema es asi, estoy armando una especie de juego por ...
  #1 (permalink)  
Antiguo 01/07/2010, 21:56
Avatar de Hiruma-Sama  
Fecha de Ingreso: agosto-2007
Ubicación: Floresta, Buenos Aires, Argentina.
Mensajes: 234
Antigüedad: 16 años, 7 meses
Puntos: 5
Ideas para mapa (trabajando con ajax)

Buenas noches, que tal, vengo con la necesidad de que me abran la cabeza

El tema es asi, estoy armando una especie de juego por turnos, y usaria ajax para actualizar la pagina cada tantos segundos, ademas de que el juego seria por turnos, y los dos participantes (cada uno en su turno), moveria piezas como si fuese un ajedrez, ahora bien ...

EL MAPA, mi idea, es como dije, trabajar con ajax, no se nada de Flash, asique eso se descarta de antemano, por ejemplo, uso php, javascript, html, css, mysql, esas serian a priori mis herramientas, usando Json + ajax, me estaria manejando bien, para manejar los turnos y las actualizaciones.

Pero ... que uso para hacer mover una imagen de un 'casillero' a otro ??? armo una matriz, tipo tabla, con un fondo y voy moviendo imagenes ? como hacer para que se muevan y se vea fluido y no que desaparezca y aparezca en otro lado .... aaaah necesito ideas!!!

Desde ya, muchas gracias por su tiempo.
  #2 (permalink)  
Antiguo 02/07/2010, 09:45
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 3 meses
Puntos: 45
Respuesta: Ideas para mapa (trabajando con ajax)

Buenas,

lo que quieres hacer es bastante complejo y laborioso, se puede hacer de varias formas, una podría ser arrastando y soltando la ficha con los eventos del raton onmouseup, onmousemove y onmousedown y necesitarías conocer al menos las coordenadas del ratón y de la ficha o la casilla con propiedades como offsetTop y clientX.

También podrías hacer una animación y controlarlo con el evento onclick en la casilla destino después de haber seleccionado la ficha que quieres mover, para esto tendrías que jugar con la posición inicial y final de la ficha y en función de cual sea mayor sumar o restar un pixel a las propiedades top y left, teniendo en cuenta todos los posibles movimientos y repetirlo hasta que ambas posiciones sean iguales. También es muy conveniente poner una pausa entre cada movimiento con setTimeout para que el movimiento sea mas natural y creible para el ojo. Lo más sencillo sería posicionar las fichas de forma absoluta respecto al tablero y guardar sus valores en un array, así puedes facilmente hacer los cálculos de los nuevos valores y tienes un punto de referencia fijo, el tablero, y lo aislas de posibles problemas que pudieran surgir si calculas las posiciones respecto a la ventana del navegador. Si entra en juego z-index la cosa se complica.
  #3 (permalink)  
Antiguo 02/07/2010, 19:23
Avatar de Hiruma-Sama  
Fecha de Ingreso: agosto-2007
Ubicación: Floresta, Buenos Aires, Argentina.
Mensajes: 234
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Ideas para mapa (trabajando con ajax)

el tema del mouse, es que yo en un principio, necesitaria moverme con el teclado, pero se pueden manejar los eventos de las teclas, pero veamos, por parte, la segunda idea, es la que me parece mas apta para lo que quiero hacer, pero no capte, como esquematisaria el mapa, que seria ? una matriz ??
  #4 (permalink)  
Antiguo 05/07/2010, 10:08
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 3 meses
Puntos: 45
Respuesta: Ideas para mapa (trabajando con ajax)

Buenas,

como ya te dije lo mas sencillo sería hacer un array con las casillas. Suponiendo que tuvieras un tablero de 3 x 3 casillas, el array tendría 9 elementos (del 0 al 8), así podrías trabajar con ellos o también con un array de dos dimensiones donde la casilla[4] por ejemplo estaría en la en la posición [1,1]. En el css habría que posicionar las casillas y el tablero de forma absoluta pero si lo tienes en hojas de estilo externas además tendrás que redefinir los estilos en el javascript para poder acceder a ellos desde la propiedad style. También podrías calcular los valores en función de la posición que ocupe sabiendo el lado de la casilla, por ejemplo si cada casilla mide 50px de lado y la casilla[4] y hemos dicho que está en la fila 1 columna 1, el top seria 1*50 y el left 1*50.

Otra cosa muy a tener en cuenta es que debes guardar el valor devuelto por cada función que se ejecute con el evento onclick al pulsar en una casilla para poder compararlo con la siguiente y saber cuanto se tiene que mover la primera. Para ello mejor que variables globales es usar cierres.

Y luego ya sería el tema del movimiento, controlando las pausas entre movimientos y la propagación de eventos por ejemplo cuando se pulse de nuevo una primera casilla sin que haya terminado de moverse la anterior.

Te he hecho un pequeño ejemplo que funciona de como podrías empezar con un tablero de 3x3 y 50px de lado cada casilla.


Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html lang="es">
  3.  
  4.   <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  5.   <title>Tablero para seleccionar casillas</title>
  6.   <script type="text/javascript" src="script/fichero.js"></script>
  7.   <link rel="stylesheet" href="css/fichero.css" type="text/css">
  8. </head>
  9.  
  10.  
  11. <div id="tablero">
  12.   <div id="casilla-0"></div>
  13.   <div id="casilla-1" class="c2"></div>
  14.   <div id="casilla-2"></div>
  15.   <div id="casilla-3"class="c2"></div>
  16.   <div id="casilla-4"></div>
  17.   <div id="casilla-5"class="c2"></div>
  18.   <div id="casilla-6"></div>
  19.   <div id="casilla-7"class="c2"></div>
  20.   <div id="casilla-8"></div>
  21. </div>
  22. <p>pulsa en una casilla</p>
  23.  
  24. </body>
  25. </html>


Código CSS:
Ver original
  1. div {
  2.   width: 50px;
  3.   height: 50px;
  4.   background: #ff0;
  5.   position: absolute;
  6.   top: 0;
  7.   left: 0;
  8. }
  9.  
  10. #tablero {
  11.   width: 150px;
  12.   height: 150px;
  13.   top: 50px;
  14.   left: 50px;
  15.   border: 1px solid #00f;
  16. }
  17.  
  18. .c2 { background: #00f; }



Código Javascript:
Ver original
  1. // ejemplo de persistencia de valores sin usar variables globales
  2. // asociando los eventos por parejas
  3. // bY Tecna
  4.  
  5. // dado un tablero de nxn casillas seleccionamos dos haciendo click
  6. // y guardamos sus posiciones para poder comparar
  7.  
  8. var la = 50; // pixeles del lado de la casilla
  9. var n = 3; // numero de casillas en cada lado del tablero
  10.  
  11. function init()
  12. {
  13.   var tablero = document.getElementById('tablero');
  14.   var casillas = tablero.getElementsByTagName('div');
  15.  
  16.    for (var i=0; i<n; ++i)
  17.    {
  18.        for (var j=0; j<n; ++j)
  19.       {
  20.         // asignamos los valores de las propiedades top y left
  21.         // para que esten disponibles con la propiedad style
  22.         var num = i*n + j;
  23.         var top =  i*la + 'px';
  24.         var left = j*la + 'px';
  25.         casillas[num].style.top = top;
  26.         casillas[num].style.left = left;
  27.    
  28.         // asignamos el evento inicial a cada casilla
  29.         asignaInit(casillas, casillas[num]);
  30.       }
  31.    }
  32. }
  33.  
  34. window.onload = init;
  35.  
  36. function asignaInit(casillas, casilla)
  37. {
  38.    casilla.onclick = function (e) {pulsarIni(casillas, casilla);};
  39. }
  40.  
  41. function pulsarIni(casillas, casillaIni)
  42. {
  43.    // funcion que recoge los valores de la primera casilla y
  44.    // llama a la función genérica de asignar eventos
  45.    
  46.    alert('Casilla Inicial: ' + casillaIni.id + '\npulse en otra casilla');
  47.    var pulsarF = function (e) { pulsarFin(e, casillas, this, casillaIni); };
  48.    
  49.    asignar(pulsarF, casillas);
  50. }
  51.  
  52. function asignar(cual, casillas)
  53. {
  54.    // función genérica para asignar eventos
  55.   for (var i=0; i<n; ++i)
  56.   {
  57.       for (var j=0; j<n; ++j)
  58.      {
  59.         var num = i*n + j;
  60.         casillas[num].onclick = cual;
  61.       }
  62.    }
  63. }
  64.  
  65. function pulsarFin(e, casillas, casillaFin, casillaIni)
  66. {
  67.    // función que recibe los valores de la primera casilla y obtiene
  68.    // los de la segunda, además reasigna los eventos para la primera casilla
  69.    var topI = casillaIni.style.top;
  70.    var leftI = casillaIni.style.left;
  71.    var topF = casillaFin.style.top;
  72.    var leftF = casillaFin.style.left;
  73.  
  74.    var ini = 'Casilla Inicial: ' + casillaIni.id + ' | top: ' + topI + ', left: ' + leftI;
  75.    var fin = 'Casilla Final: ' + casillaFin.id + ' | top: ' + topF + ', left: ' + leftF;
  76.    alert(ini + '\n' + fin);
  77.    
  78.    var pulsarI = function (e) { pulsarIni(casillas, this); };
  79.    asignar(pulsarI, casillas);
  80.    
  81.    // con los datos obtenidos de ambas casillas comparariamos las posiciones
  82.    //y llamariamos a la función encargada de mover la ficha de la
  83.    //casilla primera a la segunda.
  84. }

Etiquetas: ajax, ideas, mapa
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 09:56.