Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: pippermint en Febrero 26, 2018, 10:23:13 PM

Título: Problema en autotile
Publicado por: pippermint en Febrero 26, 2018, 10:23:13 PM
 :GMS:
Cuanto tiempo sin pasar por aquí ! Ahora que tengo mas tiempo he decidido darle mas horas al juego que estoy creando, bueno, al lío :
Estoy haciendo un script que crea las tiles ( que en realidad son frames de un objeto ) dependiendo de la posición que este el obj_room, el caso es que funciona perfecto excepto algunos bordes de la derecha.
(https://preview.ibb.co/jTmzTH/bordes.png) (https://ibb.co/m0MYoH)

este es el codigo.
image_speed = 0
//Autotile
if( relax = false ) // esto hace que el step pare de buscar los objetos de las cercanias.
{
// da valor de 1 si hay un objeto al lado.
if( place_meeting(x,y+ 48,obj_room))  {ar = 1} //arriba
if( place_meeting(x,y - 48,obj_room)) { ab = 1} //abajo
if( place_meeting(x - 48,y,obj_room)) { iz = 1} //izquierda
if( place_meeting(x + 60,y,obj_room)) {der = 1 } //derecha
// binario ( sin uso)
bin = de + (iz*2) + (ab*4) + (ar*8)

//Tile 0
if( ar = 0) & (ab= 1) & (iz= 0) & (de= 0) & !(place_meeting (x,y,obj_room ))
{
image_index = 6
}
//Tile 1
if( ar = 0) & (ab= 0) & (iz= 1) & (de= 0) & !(place_meeting (x,y,obj_room ))
{
image_index = 1
}
//Tile 2
if( ar = 0) & (ab= 0) & (iz= 0) & (de= 1) & !(place_meeting (x,y,obj_room ))
{
image_index = 2
}
//Tile 3
if( ar = 0) & (ab= 1) & (iz= 0) & (de= 1) & !(place_meeting (x,y,obj_room ))
{
image_index = 3
}
//Tile 4
if( ar = 0) & (ab= 1) & (iz= 1) & (de= 0) & !(place_meeting (x,y,obj_room ))
{
image_index = 7
}
//Tile 5
if( ar = 1) & (ab= 0) & (iz= 0) & (de= 1) & !(place_meeting (x,y,obj_room ))
{
image_index = 5
}
//Tile 6
if( ar = 1) & (ab= 0) & (iz= 0) & (de= 0) & !(place_meeting (x,y,obj_room ))
{
image_index = 0
}
//Tile 7
if( ar = 1) & (ab= 0) & (iz= 1) & (de= 0) & !(place_meeting (x,y,obj_room ))
{
image_index = 4
}
//Tile 8
if( ar = 0) & (ab= 0) & (iz= 0) & (de= 0) & !(place_meeting (x,y,obj_room ))
{
image_index = 8
}
//Tile 9
if(place_meeting (x,y,obj_room ))
{
image_index = 9
}
//Tile 10
if( ar = 0) & (ab= 0) & (iz= 0) & (de= 0) & (place_meeting (x,y,obj_room ))
{
image_index = 10
//Tile
if( ar = 1) & (ab= 1) & (iz= 1) & (de= 0) & (place_meeting (x,y,obj_room ))
{
image_index = 8
}}}


Título: Re:Problema en autotile
Publicado por: 3dgeminis en Febrero 27, 2018, 06:36:16 PM
Yo he hecho algo de autotile y me llama un poco la atencion de que uses 11 imagenes ademas de que repitas el uso de una imagen, pero sin ver las imagenes que usas talves este equivocado.
Lo que use para mi autotile fue algo parecido a esta parte de tu codigo [gml]bin = de + (iz*2) + (ab*4) + (ar*8)[/gml]
es mas simple y menos codigo para usar.
En esta parte [gml]if( place_meeting(x + 60,y,obj_room)) {der = 1 } //derecha[/gml] porque usas 60 en lugar de 48?
Título: Re:Problema en autotile
Publicado por: pippermint en Febrero 27, 2018, 07:50:39 PM
Cita de: 3dgeminis en Febrero 27, 2018, 06:36:16 PM
Yo he hecho algo de autotile y me llama un poco la atencion de que uses 11 imagenes ademas de que repitas el uso de una imagen, pero sin ver las imagenes que usas talves este equivocado.
Lo que use para mi autotile fue algo parecido a esta parte de tu codigo [gml]bin = de + (iz*2) + (ab*4) + (ar*8)[/gml]
es mas simple y menos codigo para usar.
En esta parte [gml]if( place_meeting(x + 60,y,obj_room)) {der = 1 } //derecha[/gml] porque usas 60 en lugar de 48?
si, uso solo 11 porque omito muchas cosas como los bordes externos cuando hacen esquina y todas esas cosas, creo que si no las omitiera, tendría que dibujar 47 ( si no me equivoco )

puse 60 para probar si era que la imagen no estaba centrada y no me la reconocía, pero se me olvido ponerlo bien otra vez. probaré a hacerlo en binario... a ver si el problema sigue....
Título: Re:Problema en autotile
Publicado por: pippermint en Febrero 27, 2018, 08:59:08 PM
Bueno, ya he solucionado el problema, el problema es muy tonto y después de una siesta lo he solucionado a los 5 segundos.
if( place_meeting(x + 60,y,obj_room)) {der = 1 } //derecha
// binario ( sin uso)
bin = de + (iz*2) + (ab*4) + (ar*8)

//Tile 0
if( ar = 0) & (ab= 1) & (iz= 0) & (de= 0) & !(place_meeting (x,y,obj_room ))
{

El problema residía, en que si había un objeto a la derecha der = 1, pero a la hora de hacer la comprobación, lo comprobaba en de ...  me había dejado de escribir la R... Problema solucionado