Comunidad de diseño web y desarrollo en internet online

Mapas Isometricos: "Problemas con rango".

Citar            
MensajeEscrito el 09 May 2012 12:22 am
Hola comunidad, espero que puedan ayudarme, ya que me ha traído varios dolores de cabeza y por ahí es bastante sencillo o alguien tiene experiencia con juegos isométricos.

Bueno cuando uno tiene que hallar la distancia entre dos puntos, es muy sencillo calculando bascara, y sabemos que con as3 es mucho mas simple, debido a que tenemos la función distance en la clase Point, por lo que sale muy facil, el problema surge cuando uno pasa el mapa a una vista isometricA, la tecnica simple es rotar el movieclip y dividir la altura por dos, esto da un aspecto "3d" a nuestro juego 2d y queda muy bonito, el tema es que ahora el radio no es igual para todo el circulo.

Vamos con un gráfico.


Vista desde arriba


Suponiendo que el circulo rojo me marca el rango de visión de mi punto Negro, ese rango es igual en todo su radio, y haciendo Point.distance(puntoNegro,puntoAmarillo) < rango, me daría verdadero de forma correcta.

Vista Isometrica


ahora el problema esta en que el rango de visión sobre el eje x sigue siendo el mismo, el problema esta sobre el eje y es la mitad, y ni hablar en las diagonales que va creciendo o decreciendo entre rango y rango / 2.

Bueno yo creo que debe haber alguna formula, o técnica para calcular los radios cuando uno pasa a una forma isometrica.
Estoy creando un juego "tower Defense" y me encontre con este problema, que no supe resolver.


Saludos a todos y espero no estropearles la cabeza tambien.

Por sageoffroy

6 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 May 2012 06:18 am
no entiendo, xq necesitas tanta precision en el rango?? Sabiendo el tamaño del tile y la pos x e y podes determinar con que tiles esta en contacto. O explica mejor el porque necesitas calcular la distancia.


saludos



eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 09 May 2012 11:38 am
Hola Exe.
Es un juego de torres de defensa y necesito saber que enemigos están dentro de un rango para ver cual elijo como target, al estar isometrico el rango de alcance de mi torre es el doble de alto que de ancho, es mucho mas simple recorrer el contenedor de enemigos y ver si están dentro del rango supongo yo, el problema es que el rango no es el mismo depende mucho de la posición donde se encuentra.


Código ActionScript :

var target:Enemigo;
var enemigo:Enemigo
var enemigoPos:Point;
var torrePos:Point = new Point(this.x,this.y);
for (var i:int = 0; i< contenedor.numChildren; i++) {
    if(contenedor.getChildAt(i) as Enemigo){//verifico que sea Enemigo
        enemigo = Enemigo(contenedor.getChildAt(i));
        enemigoPos = new Point(enemigo.x,enemigo.y);
        if(Point.distance(torrePos , enemigoPos ) < this.rango)
        //verifico si esta dentro del rango
            target = enemigo;//seteo el Target
    }
}
this.disparar(target)
//Acepto criticas y consejos.
//En este caso siempre elegiría el primer enemigo que ve, que es el ultimo del contenedor.


Esta es la lógica aproximada que utilizo en la clase Torre para rastrear un enemigo (que anda bárbaro cuando es un mapa 2d con vista superior), supongo que habrá alguna formula para mapas isometricos ya que mi distancia de visión varia entre rango y rango/2 depende de la posición del enemigo.

Saludos espero haberte aclarado la duda y gracias por responder

Por sageoffroy

6 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 May 2012 05:15 am
creo que tienes problemas con el calculo de espacios tridimensionales...aqui tienes ecuaciones que te pueden ayudar al calculo.

si no te interesa y quieres optar (como lo hicistes en la version 2D) por el manejo de una clase puedes repasar Vector3D

espero que te sirva

saludos

Por Yonomimi

76 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 May 2012 04:11 pm
Hola y perdon por la demora. Al parecer no me llego ninguna notificacion al mail que respondiste este tema sageoffroy.

Podrias utilizar la ecuacion de la elipse para lo que queres hacer:

datos necesarios:
*alto y ancho de la elipse
*posicion x e y

esta es la ecuacion

(x/ancho) + (y/alto) = 1


tenes q reemplazar x e y en la ecuacion

si este resultado (x/ancho) + (y/alto) te da menor o igual a 1 esta dentro de la elipse,, caso contrario esta fuera.



Saludos




eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

chrome
Citar            
MensajeEscrito el 13 May 2012 04:54 am
Exe me queda una duda sobre la ecuación que me diste... el x y el y serian del enemigo? como posicionaría la elipse en la torre?osea donde encaja la x y la y de la torre?

Por sageoffroy

6 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 May 2012 03:32 pm
Si, el x y el y serian del enemigo.

Me di cuenta que te pase mal la formula.

te planteo todo de nuevo.

datos:
* coodenadas del centro de la elipse (cX,cY)
*coordenadas enemigo (eX,eY)
*ancho y alto elipse



formula:





Saludos



eXe

Por exekiel21

Claber

164 de clabLevel



Genero:Masculino  

programador

firefox
Citar            
MensajeEscrito el 13 May 2012 05:57 pm
Hola exe, es muy buena la formula estuve leyendo sobre eso, mientras tanto recurrí a una solución que se me ocurrio anoche, cree una variable en la torre que se llama rangoVision de tipo Sprite, y le dibujo en el graphics una elipse con el metodo que viene en as3 entonces verifico la colisión con el hitest entre el enemigo y la elipse de la torre, de todas formas la formula que me diste voy a probarla y ver cual es la de mejor performance.

Saludos y gracias por el aporte.

Por sageoffroy

6 de clabLevel



 

chrome

 

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