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!
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.