Página 9 de 13

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Lun, 02 Jun 2014, 18:22
por antoniovillena
$this->bbcode_second_pass_quote('D_Skywalk', 'A') lo mejor yo lo he entendido mal, pero en mi tiled el enemigo2 tienen el type puesto a 4 ¿es correcto?


Es correcto, no lo había comprobado todos. Los dos últimos enemigos tienen velocidad 4, el resto velocidad 1 (por defecto).

$this->bbcode_second_pass_quote('D_Skywalk', '
')Si te fijas he emparejado los names del enemigo2: 102(f1_9x8) - 102(f2_14x8), 103(f1_10x8) - 103(f2_13x8) y luego sus velocidades.
Igual para el enemigo1: 101(f1_7x2) - 101(f1_7x8) y el type vacío por lo tanto usa la velocidad 1, no?


Sí. Coincide con lo que he expuesto en la lista anterior.

$this->bbcode_second_pass_quote('D_Skywalk', '
')Sobre el enemigo 7 de la esquina superior, lo bueno por ejemplo que tenía el colocador que igualmente podías darle posición de inicio y fin... y más específica que era esa herramienta para la churrera :roll:
Por eso digo de que los números sigan siendo correlativos pero que sean iguales para la misma "entidad", no se si me explico :cry:

Eso permitiría usarla como el colocador, para todo tipo de usos hasta los no previstos inicialmente :wan:


Sí, yo te he entendio. Pero creo que tú no me has entendido a mí. Imagínate que lo hacemos como tú dices. Entonces los enemigos de la derecha (esqueletos) tendrían etiquetas name todos a 2. ¿Cómo distingues donde empieza un enemigo y donde acaba otro? Porque lo mismo puedo decir que el enemigo empieza en (9,8) y acaba en (13,8) cuando no es así.

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Lun, 02 Jun 2014, 18:25
por antoniovillena
Ojo, esta distinción tiene que hacerse pensando en 2 objetivos: el conversor (TmxCnv) y un usuario que lo observe. Posiblemente se puede resolver el caso conversor teniendo en cuenta el orden de aparición dentro del archivo XML. Pero para un usuario no hay forma de distinguirlo. No tiene sentido que el juego compile bien si luego el usuario se hace un lío observando el mapa.

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Lun, 02 Jun 2014, 18:27
por D_Skywalk
No se puede confundir por que los dos tienen el mismo name/etiqueta :|

$this->bbcode_second_pass_code('', ' <objectgroup name="enems" width="31" height="10">
<object name="102" type="4" gid="69" x="144" y="128"/>
<object name="102" type="4" gid="71" x="224" y="128"/>
<object name="101" gid="65" x="112" y="32"/>
<object name="101" gid="67" x="112" y="128"/>
<object name="103" type="4" gid="69" x="208" y="128"/>
<object name="103" type="4" gid="71" x="160" y="128"/>
<object name="7" gid="73" x="32" y="32"/>
</objectgroup>
')
A lo mejor es que cada uno estamos hablando de una prop diferente, yo digo de usar el name para (si quieres) determinar enemigos/entidades iguales :?

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Lun, 02 Jun 2014, 18:39
por antoniovillena
Ya pero se supone que no debe importar el orden de las líneas.

$this->bbcode_second_pass_code('', '
<objectgroup name="enems" width="31" height="10">
<object name="102" type="4" gid="69" x="144" y="128"/>
<object name="103" type="4" gid="69" x="208" y="128"/>
<object name="101" gid="67" x="112" y="128"/>
<object name="101" gid="65" x="112" y="32"/>
<object name="103" type="4" gid="71" x="160" y="128"/>
<object name="102" type="4" gid="71" x="224" y="128"/>
<object name="7" gid="73" x="32" y="32"/>
</objectgroup>')

Y en este caso la interpretación es distinta (sólo he cambiado el orden). Aunque el orden venga determinado por el momento en que creas los elementos con Tiled, a priori no hay nada que te indique dentro de Tiled el orden en que fueron colocados los sprites. No puedes obligar al usuario a leer el XML para interpretarlo.

En resumen, no nos vale la forma simple que propones. Hay que meterle alguna complicación extra. Hay otras formas "complicadas" que resuelven el problema, lo suyo es encontrar la menos complicada para la mayoría de la gente.

Una solución que va en la línea de lo que propones sería dar un name separado por punto en caso de ambigüedad. En el ejemplo todos los name coinciden con el tipo excepto los esqueletos. Que tendrían un name "2.A" los del primer enemigo y "2.B" los del segundo enemigo.

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Lun, 02 Jun 2014, 18:42
por antoniovillena
¿Qué te parece si lo hacemos así? (He quitado el punto intermedio)

$this->bbcode_second_pass_code('', '
<objectgroup name="enems" width="31" height="10">
<object name="2A" type="4" gid="69" x="144" y="128"/>
<object name="2A" type="4" gid="71" x="224" y="128"/>
<object name="1" gid="65" x="112" y="32"/>
<object name="1" gid="67" x="112" y="128"/>
<object name="2B" type="4" gid="69" x="208" y="128"/>
<object name="2B" type="4" gid="71" x="160" y="128"/>
<object name="7" gid="73" x="32" y="32"/>
</objectgroup>
')

Ahora sí puedes cambiar el orden de las líneas que el TmxCnv sacará siempre la misma salida y cualquier usuario que vea el archivo con Tiled puede interpretarlo sin necesidad de acceder al XML.

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Lun, 02 Jun 2014, 18:50
por D_Skywalk
Sigo sin explicarme y creeme no es tu culpa, es la mia que ando en 4 cosas a la vez :roll:

Lo voy a intentar con pseudocódigo :lol:

1 - Coge objeto
2 - guarda variables iniciales (tipo, x,y + velocidad)
¿Tiene nombre de objeto?
¡si! se llama name = 102
3 - busca en todo el array de objetos el primero que se llame igual
¡Lo tengo!
4 - Ok, guarda su posición final. y elimina esa entrada (o también se puede marcar como leída)
... siguiente objeto ...

:dalefran:

Da igual el orden y por supuesto el usuario no tiene que mirar el XML, lo he puesto por si ayudaba, veo que no XD

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Lun, 02 Jun 2014, 19:03
por antoniovillena
Por un lado dices que da igual el orden pero por otro en el algoritmo dices de recorrer el array buscando el primero que se llame igual. Esto para mí es una contradicción. Si tienes 4 entradas con el mismo name vas a emparejar con la primera que encuentres, que no necesariamente tiene que coincidir con lo que tú querías.

Yo también soy responsable de no enterarme, por eso te decía que me enviases el TMX o me escribas aquí el framgento XML de tu propuesta, de cómo lo resolverías tú. Te planteo este reto:

Si viendo el TMX con Tiled puedo distinguir bien los dos enemigos problemáticos te doy la razón, es decir tu propuesta sería más simple y resolvería todos los problemas. En caso de que me envíes el fragmento XML (en lugar de adjuntarme el TMX) pues el experimento sería equivalente. Yo podría cambiar el orden de las líneas <object> como quisiese de lo que me pongas que si el TmxCnv (con tu nuevo algoritmo) me da siempre el mismo resultado entonces el equivocado soy yo.

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Lun, 02 Jun 2014, 19:29
por D_Skywalk
$this->bbcode_second_pass_quote('antoniovillena', 'P')or un lado dices que da igual el orden pero por otro en el algoritmo dices de recorrer el array buscando el primero que se llame igual. Esto para mí es una contradicción. Si tienes 4 entradas con el mismo name vas a emparejar con la primera que encuentres, que no necesariamente tiene que coincidir con lo que tú querías.


Es que no podría haber más de dos que se llamaran igual, esto sería un problema, si tiene un nombre/número ha de ser único por enemigo (tanto en la posición inicial y en la final). Ahora veo lo que dices que pasaría, pero sólo sería con los especiales, no?

$this->bbcode_second_pass_quote('antoniovillena', 'Y')o también soy responsable de no enterarme, por eso te decía que me enviases el TMX o me escribas aquí el framgento XML de tu propuesta, de cómo lo resolverías tú. Te planteo este reto:


Es que para mi esto resuelve ya casi todos los problemas :/
$this->bbcode_second_pass_code('', ' <objectgroup name="enems" width="31" height="10">
<object name="102" type="4" gid="69" x="144" y="128"/>
<object name="102" type="4" gid="71" x="224" y="128"/>
<object name="101" gid="65" x="112" y="32"/>
<object name="101" gid="67" x="112" y="128"/>
<object name="103" type="4" gid="69" x="208" y="128"/>
<object name="103" type="4" gid="71" x="160" y="128"/>
<object name="7" gid="73" x="32" y="32"/> -- menos aquí claro...
</objectgroup>')

Entiendo el problema con el 73 (tipo 3) ya no podemos usar lo de si su name es menor de 100, por que si por ejemplo tenemos 4 plataformas y todas se llaman 7, no vas a saber cual es cual. Para los enemigos normales no existe este problema pero para los "especiales", si :roll:

Se me ocurre, simplemente tener una propiedad que diga que su tipo es especial y número X.

$this->bbcode_second_pass_code('', ' <objectgroup name="enems" width="31" height="10">
<object name="102" type="4" gid="69" x="144" y="128"/>
<object name="102" type="4" gid="71" x="224" y="128"/>
<object name="101" gid="65" x="112" y="32"/>
<object name="101" gid="67" x="112" y="128"/>
<object name="103" type="4" gid="69" x="208" y="128"/>
<object name="103" type="4" gid="71" x="160" y="128"/>
<object name="104" gid="73" x="32" y="32">
<properties>
<property name="special" value="7"/>
</properties>
</object>
<object gid="0" x="224" y="128"/>
<object name="104" gid="73" x="32" y="112">
<properties>
<property name="special" value="7"/>
</properties>
</object>
</objectgroup>')

Quizá si es más complejo, pero tener que fiarte de que estas poniendo el correcto y no te va a meter en medio la línea del otro personaje tampoco me convence, eso si que te fuerza a mirar el XML :|

No se :nath:

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Lun, 02 Jun 2014, 19:45
por antoniovillena
A mí tampoco me convence. Meter propiedades desde Tiled, aunque se puede no es aconsejable. Le estás dando al usuario mucha carga de trabajo a la hora de crear el mapa y de lo que se trata es de quitársela (por eso lo de los valores por defecto).

Para manejar estos casos especiales evidentemente no te vale tal y como está implementado. Podríamos tirar de tu propuesta anterior (lo de poner el tipo de enemigo en name), con algo como esto:

$this->bbcode_second_pass_code('', '
<objectgroup name="enems" width="31" height="10">
<object name="2A" type="4" gid="69" x="144" y="128"/>
<object name="2A" type="4" gid="71" x="224" y="128"/>
<object name="1" gid="65" x="112" y="32"/>
<object name="1" gid="67" x="112" y="128"/>
<object name="2B" type="4" gid="69" x="208" y="128"/>
<object name="2B" type="4" gid="71" x="160" y="128"/>
<object name="7" gid="73" x="32" y="32"/>
</objectgroup>
')

Todos los tipos menor de 4 deben estar emparentados, excepto los especiales (mayores de 5) que pueden estarlo o no. En el caso de arriba no lo estaría. En este caso por ejemplo manejamos una plataforma del tipo 8.

$this->bbcode_second_pass_code('', '
<objectgroup name="enems" width="31" height="10">
<object name="2A" type="4" gid="69" x="144" y="128"/>
<object name="2A" type="4" gid="71" x="224" y="128"/>
<object name="1" gid="65" x="112" y="32"/>
<object name="1" gid="67" x="112" y="128"/>
<object name="2B" type="4" gid="69" x="208" y="128"/>
<object name="2B" type="4" gid="71" x="160" y="128"/>
<object name="8" gid="77" x="32" y="32"/>
<object name="8" gid="79" x="64" y="32"/>
</objectgroup>
')

Evidentemente si hay más de una plataforma en la misma pantalla se distinguirían con "8A" y "8B" en name.

Otra variante de esto mismo es tratar a todos los tipos igual, y en caso de que un tipo menor de 4 esté huérfano completarlo con otro ítem en su misma posición (posición inicial=posición final). Esto último no tiene mucho sentido a no ser que modifiques la Churrera, pero simplificaría un poco las cosas.

Re: Tiled como editor de mapas en GNU/Linux

Publicado: Lun, 02 Jun 2014, 20:07
por D_Skywalk
La verdad que todo lo que se me ocurre o complica el conversor o complica "pintar el mapa". Y las dos son graves problemas,

Vamos a dejar todo con la misma filosofía de antes pero ¿y si en type añadimos si es especial?
Algo así:
$this->bbcode_second_pass_code('', ' <object name="" type="4.7" gid="71" x="224" y="128"/>')

O para ser más específicos y quizás más complejo de implementar:
$this->bbcode_second_pass_code('', ' <object name="" type="v4t7" gid="73" x="224" y="128"/>
<object name="" type="v4" gid="69" x="208" y="128"/>
<object name="" type="v4" gid="71" x="160" y="128"/>
')

Y ante especiales como ese t7 si quieres poner dos debes nombrarlos igual :roll:

Sigo dándole al coco :dalefran: