Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: coordenadas normales a isométricas [solucionado]  (Leído 621 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cristopher2545

en: Junio 13, 2021, 06:28:43 am
hola a todos! estoy creando un juego estilo restauran city con vista isométrica, y todo iba bastante bien hasta que me tope con una pared la cual no puedo cruzar por mi propia cuenta espero ustedes puedan darme una mano!


estoy proyectando los sprites "normales" para que se vean como isométricos usando el código a continuación, y todo perfecto pero cuando quiero interactuar con los objetos estos usan las coordenadas de los sprites "normales" en vez de las nuevas coordenadas isométricas por ende no esta funcionando como debería, entiendo que debo usar una formula para convertir las coordenadas cartesianas en coordenadas isométricas pero honestamente no logro entenderlo.

aquí esta el código para proyectar


variables del objeto control muestra los tamaños de los sprites normales y los isometricos
global.isoview=false

global.width_ortho=32
global.height_ortho=32
global.width_iso=78
global.height_iso=40


si aprietas espacio la vista cambia a isométrico y se ejecuta este código que esta dentro del objeto "vista cartesiana"

if global.isoview=true
{
var isox,isoy;
isox=get_iso_x(x,y)
isoy=get_iso_y(x,y)

draw_sprite(s_iso_tile,0,isox,isoy)


los scrips "get_iso_x" y "get_iso_y" contienen lo siguiente respectivamente

var xx,yy,px,py;
xx=(x - room_width/2)/global.width_ortho
yy=(y - room_height/2)/global.height_ortho

px=(xx-yy)*(global.width_iso/2) + room_width/2
py=(yy+xx)*(global.height_iso/2) + room_height/2

return px


var xx,yy,px,py;
xx=(x - room_width/2)/global.width_ortho
yy=(y - room_height/2)/global.height_ortho

px=(xx-yy)*(global.width_iso/2) + room_width/2
py=(yy+xx)*(global.height_iso/2) + room_height/2

return py

usando ese codigo proyectas la vista y creas la ilusión de que es isométrico pero las coordenadas del mouse siguen estando igual, alguna idea de como arreglarlo?, adjunto el proyecto por si es mas sencillo verlo , estando abierto el juego aprieta la tecla arriba para cambiar al modo isométrico de antemano gracias!
« Última modificación: Junio 14, 2021, 10:31:42 pm por cristopher2545 »

Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Void

Respuesta #1 en: Junio 14, 2021, 08:20:43 pm
No necesitas cambiar de coordenadas cartesianas a isometricas, eso ya lo estas haciendo con el código que pusiste, necesitas cambiar las coordenadas del mouse de isometricas a cartesianas y realizar las comprobaciones con esas nuevas coordenadas.

Puedes cambiar de coordenadas isometricas a cartesianas con este código:

var xx,yy,px,py;
xx=(argument0 - room_width/2)/global.width_iso
yy=(argument1 - room_height/2)/global.height_iso

px=(yy+xx)*2*(global.width_ortho/2) + room_width/2
py=(yy-xx)*2*(global.height_ortho/2) + room_height/2


Lo pones en un par de scripts, uno para x y otro para y, y cuando quieres usar el mouse para interactuar conviertes sus coordenadas y usas los nuevos valores en lugar de las coordenadas normales, por ejemplo, en el projecto que dejaste se puede poner en el draw de los tiles:

var isox= get_iso_x(x,y)
var isoy= get_iso_y(x,y)

var iso_mouse_x = get_ortho_x(mouse_x,mouse_y)
var iso_mouse_y = get_ortho_y(mouse_x,mouse_y)

if collision_point(iso_mouse_x,iso_mouse_y,self,1,0)
    draw_sprite_ext(spr_iso_tile,0,isox,isoy,1,1,0,c_red,1)
else
    draw_sprite(spr_iso_tile,0,isox,isoy)

Eso hará que el tile sobre el que este el mouse cambia a color rojo.

 
Los siguientes usuarios dieron las gracias a este tema: cristopher2545


Desconectado cristopher2545

Respuesta #2 en: Junio 14, 2021, 10:09:37 pm
hola! gracias por responder!, añadí los códigos para probarlo y algo super extraño ocurrió, no funcionaba para nada, cambie las variables "iso_mouse_x" por "mouse_x" y empezo a funcionar parcialmente, el cursor se ve no centrado es decir que aunque no este sobre las tiles este funciona y es extraño trate de modificar variables y distancias pero nada, al menos ahora funciona parcialmente y eso esta genial!

te dejo el proyecto para que veas a lo que me refiero! y de nuevo gracias!

Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!
 


Desconectado Void

Respuesta #3 en: Junio 14, 2021, 10:18:57 pm
Los scripts get_ortho_* no estan regresando nada, tenias que agregar un return para px y py respectivamente.

Dejo el editable arreglado.

 
Los siguientes usuarios dieron las gracias a este tema: cristopher2545


Desconectado cristopher2545

Respuesta #4 en: Junio 14, 2021, 10:31:04 pm
Los scripts get_ortho_* no estan regresando nada, tenias que agregar un return para px y py respectivamente.

Dejo el editable arreglado.


maestro!, muchas gracias compañero me sacaste de este apuro!,  te lo agradezco muchísimo!

Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!