Try catch while y tiro porque me toca

shenmue - 09/11/2006 22:57
Hola. Bueno, he aquí mi pregunta. Me he topado con un problema y es he hecho un script para una mano por el cual seleccione un número de dedos y falanges por spinner, ¿ok? Bien, pues resulta que los puntos de las falanges van emparentados. Por ejemplo, si quiero que la mano tenga 3 falanges tengo:
[php]falange1.parent = falange 2;falange2.parent = falange3.[/php]el problema es que, si decido que quiero la mano tenga 2 falanges la falange3 no existe, con lo cual peta el script porque no encuentra el padre de la falange2.

La solución guarra que he hecho para que todo funcione bien es:
[php]try (falange1.parent = falange 2) catch (),try (falange2.parent = falange 3) catch (),[/php].

Como aquí es solo una línea no parece muy guarrada, pero en el script donde tengo además las combinaciones del número de dedos a la que he hecho lo mismo pues queda algo chapucero. Funciona todo bien pero me gustaría saber cómo hacerlo como toca. Sé que hay algo de while no sé, no sé cuántos, pero no se usarlo. Gracias.
viriathus - 09/11/2006 23:27
Ahí huele a que necesitas una función recursiva. A ver qué piense.
viriathus - 09/11/2006 23:41
Puede que sea una guarrería, o que no funcione.
[code]For ($f = 1; $f < 10; $f++).
{.
$falangeactual = falange$f.
$falangepadre = falange.($f+1).

If (.is_object($$falangepadre)) break.
$$falangeactual, parent = $$falangepadre.
}.
[/code]
shenmue - 10/11/2006 01:14
Gracias viriathus, mañana lo pruebo en el trabajo. De todas formas, sea o no guarrería, lo es menos que el mío. Un saludo y gracias.
Nessito - 10/11/2006 08:16
Lo que te ha puesto viriathus es código en c. Tendrás que traducirlo a Maxscript. El problema es que en Maxscript no se pueden computar los nombres de los nodos en tiempo de ejecución, y hay que usar execute nombre_objeto, veamos que se me ocurre.
Nessito - 10/11/2006 08:28
A ver, una función:
[code]function linkarenorden objetos =
(.
[indent]for cont = 1 todo (objetos, count-1) do.
[indent]objetos[cont].parent=objetos[cont+1][/indent]).
[/indent].
)[/code]

A esa función le pasas un array de objetos que te hayas construido en orden ascendente. Es decir, el primero es el último hijo, el siguiente es su padre.
viriathus - 10/11/2006 08:55

Lo que te ha puesto viriathus es código en c. Tendrás que traducirlo a Maxscript. El problema es que en Maxscript no se pueden computar los nombres de los nodos en tiempo de ejecución, y hay que usar execute nombre_objeto, veamos que se me ocurre.

Es que como el código de Shenmue venía precedido de código php, creía que estaba usando php5. Ya me parecía rara la situación.

Por cierto, mi código si es php.
Nessito - 10/11/2006 09:06
Ya me parecía raro tanto dólar. O estabas obsesionado con la pasta (muy comprensible), o las cosas no eran lo que parecían.
shenmue - 10/11/2006 11:39
Gracias a los 2. La verdad es que ni siquiera había considerado lo del php, de hecho, no sé lo que es. ¿por eso me salía el = y el () en verde? Esto de la programación es un misterio para mi.