2010-02-14 19 views
8

Estoy intentando crear una aplicación/juego web que utilice una vista lateral "isométrica" ​​y mosaicos transparentes. Puedo mostrarlos bien (pero no genial) usando una fórmula de PHP que simplemente establece cada div (cada mosaico) como posición: absoluta y establece los parámetros superior e izquierdo. El problema es cómo puedo capturar clics en un mosaico y dejar que los mosaicos con bits transparentes hagan clic en el mosaico debajo de él.HTML/JS/CSS Cuadrícula isométrica con mosaicos transparentes semitransparentes

Un ejemplo de mi problema está en http://stuff.adammw.homeip.net/other/fv/farmville_2.html

Respuesta

4

Usted no será capaz de hacer esto con los elementos de baldosas sí mismos, ya que siempre son rectangulares. Deberá supervisar la posición del mouse dentro de un elemento principal que contenga todos los mosaicos y determinar manualmente qué píxeles corresponden a cada uno de ellos.

Para un mapeo isométrico de posición a baldosa esto sería fácil, pero eso sería tomar la posición del punto como un lugar 'en el suelo'; no le permitiría usar los datos de la máscara de la imagen para hacer pruebas de objetos como los árboles que rinden frente al suelo. (¿Quieres hacer eso de todos modos Actualmente algunos árboles oscurecer totalmente la baldosa del suelo debajo de ellos?).

Si realmente necesita para golpear contra la prueba de máscaras de imagen, se puede:

a. escriba una secuencia de comandos para extraer los datos de la máscara de la imagen e inclúyalos en la fuente de JavaScript como máscaras de bits binarias codificadas. He hecho esto para detectar colisiones en juegos de JavaScript, pero no es muy divertido ya que puede ocupar mucho espacio y debes volver a exportar los datos cuando actualizas los gráficos.

b. extraiga los datos de imagen para probar usando <canvas> y getImageData. En ese momento, puede considerar usar un lienzo para la representación, dado que ya habrá perdido usuarios de IE.

+1

probablemente sería bueno para "perder" esos molestos IE usuarios imho =) – Chii

+0

Después de ir con lienzo es un poco complicado encontrar una buena manera de hacerlo, pero afortunadamente encontré algo que hizo exactamente at - http://philip.html5.org/demos/canvas/spritepick/example.html El único problema con este método es que es muy intensivo en javascript/procesador y no estoy seguro si funcionará para el propósito original que era proporcionar compatibilidad con el navegador web del iPhone. –

1

Dado que este es un juego basado en fichas, tal vez debería determinar con qué azulejo está interactuando el usuario utilizando una fórmula simple. Use algunos javascript para determinar las coordenadas de un clic u otra acción. luego, haga algo de aritmética para descubrir en qué loseta actuar. ¿Tiene sentido?

De lo contrario, estoy de acuerdo con bobince. Tu enfoque probablemente no funcionará fácilmente.

+0

Tiene mucho sentido – Jonno

Cuestiones relacionadas