Foros del Web » Creando para Internet » Flash y Actionscript »

Ordenada referencia a distintos caracteres de distintos textos externos.

Estas en el tema de Ordenada referencia a distintos caracteres de distintos textos externos. en el foro de Flash y Actionscript en Foros del Web. No me funciona esto: set ("_root.T"+n3, eval ("_root.T"+n3 ) + eval ("_root.T"+n3+"C.charAt(n)") ); ni esto: set ("_root.T"+n3, eval ("_root.T"+n3 ) + eval ("_root.T"+n3+"C.charAt("+n+")") ); Es ...
  #1 (permalink)  
Antiguo 11/12/2012, 08:15
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
Ordenada referencia a distintos caracteres de distintos textos externos.

No me funciona esto:
set ("_root.T"+n3, eval ("_root.T"+n3 ) + eval ("_root.T"+n3+"C.charAt(n)"));

ni esto:
set ("_root.T"+n3, eval ("_root.T"+n3 ) + eval ("_root.T"+n3+"C.charAt("+n+")"));

Es para hacer que un texto vaya apareciendo de a poco, como en este juego:
http://www.youtube.com/watch?v=l-UHgJhH6Rs
Desde el 1:30 se ve.

Me habían recomendado escribir el texto en una variable y luego que en la pantalla se insertara el primer caracter, luego el segundo, etc, es básicamente lo que hice.

El problema, para empezar, es que no sé cómo indicar que habría un salto de línea. En Flash puedes crear en la pantalla un objeto de tipo texto, y puedes hacer que muestre una variable. Yo tengo por ejemplo:
T1C = "Tsup- ¡Wuaaaaaaaaaa!";

Y un objeto en pantalla que muestra eso de a poco, no hay problema con eso. Pero sí con esto otro (es otro frame):
T1C = "Bunzoo- Los MPEs (medidores de pérdida de";
T2C = "energía) están listos. Hand ve a Ecchuu";

O sea, en vez de poner todo ese texto en un objeto, debo usar dos, porque no sé hacer un salto de línea. Si dijera:
T1C = "Bunzoo- Los MPEs (medidores de pérdida de energía) están listos. Hand ve a Ecchuu";
...entonces quedaría todo en una línea, y eso no me sirve.

Entonces tengo varios objetos de texto y varias variables que indican lo que deben tener esos textos al final. Pero intento hacerlo de manera que quede 1 frame por cada texto nuevo, porque me resulta más cómodo en el editor. Con stop hasta que sucedan ciertas cosas. Esto implica que no habría gotos, para hacer eso. No habría repeticiones de un código, salvo que se usara do while pero que yo sepa no cambia la pantalla mientras dura, así que no sirve. Pero hay una forma de que haya repeticiones (y cambios en la pantalla) sin que se avancen frames: Poniendo código en una película (P) en ese frame. Pero también quiero que ese código deje de usarse en cierto evento. Sin avanzar un frame, y sin usar ifs ("aplicar el código si..."), porque eso es seguir aplicando código innecesario. Lo que hago es crear un objeto (O), pero insertarlo con attach movie, lo cual permite quitarlo cuando se quiera. De otra forma no. Ese objeto incluye a P. Bueno ahora me doy cuenta de que capáz que el código de P lo podría tener O en sus frames, por lo que no sería necesaria P, pero no resuelve mi problema. O (su código) debe poder servir para cualquier texto, sea cual sea su extensión, velocidad y cantidad de líneas. No hay problema, si no fuera por lo que mencioné al principio que no me funciona.

Frame 2:
Muestra a Tsub y Kuno volando hacia la izquierda. Está basado en este juego:
http://www.youtube.com/watch?v=qPIWsu8xJmU
0:45

attachMovie("Sombra", "S", 1);
T1C = "Tsup- ¡Wuaaaaaaaaaa!";
T1 = "";
Tw = 1;
TT = 1;
attachMovie("Texto", "T", 2);

Sombra es simplemente un objeto que deja negra la pantalla y se va haciendo transparente hasta que se remueve (por eso lo inserto con attach, para que se remueva efectivamente).

T1C es Texto 1 completo. 1 se refiere a la primera línea en el frame donde esté esa variable. En este caso es el frame 2.

T1 es el texto 1 que se vea actualmente en pantalla.

TW es Texto wait... cantidad de frames que habrían de pasar antes de que aparezca la siguiente letra.

TT es Total de textos, o sea líneas.

Texto, al final (con attach movie) es lo que antes llamé O.

Incluye otro objeto, al que llamé P, y él tiene este código:
Código:
onClipEvent (load) {
    n = -1;
    n2 = 0;
    n3 = 1;
}
onClipEvent (enterFrame) {
    n2 = n2+1;
    if (n2 == _root.TW) {
        n2 = 0;
        if (eval ("_root.T"+n3+".length") < eval ("_root.T"+n3+"C.length")) {
            n = n+1;
            set ("_root.T"+n3, eval ("_root.T"+n3 ) + eval ("_root.T" + n3 + "C.charAt(n)"));
        } else if (n3 < _root.TT) {
            n = -1;
            n3 = n3+1;
        } else {
            removeMovieClip (_root.T);
        }
    }
}
n marca el caracter que será agregado, 0, 1, 2, etc.

n2 marca la cantidad de frames (en realidad instantes) que han ocurrido, lo cual junto con TW sirve para determinar si ya se agrega otro caracter o si se ha de esperar más, para que no se agregue tan rápido.

n3 marca la línea de texto que aparecerá, más específicamente de qué variable se tomarán caracteres (o sea de T1C, o T2C, etc) y en qué objeto de tipo texto dinámico aparecerán. Esos están en la pantalla y es bastante automático que muestren lo que se diga.

Cuando pasa un instante, aumenta n2.
Si n2 es igual al tiempo de espera (establecido en la película raíz y distinto en distintas escenas), n2 pasa a 0 y ocurre todo lo siguiente.

Si la longitud de la línea de texto actual (al principio es la 1) es menor que la longitud de esa línea completa, entonces:
- Aumenta n, y se agrega el siguiente caracter, si funcionara esa parte ¬¬

if (eval ("_root.T"+n3+".length") < eval ("_root.T"+n3+"C.length")) {
...es básicamente esto:
if (_root.T1.length < _root.T1C.length) {
...tiene eval y otras cosas porque entonces sirve también para la línea 2, 3... n3.

Y esto:
set ("_root.T"+n3, eval ("_root.T"+n3 ) + eval ("_root.T"+n3+"C.charAt(n)"));
es básicamente:
_root.T1 = _root.T1 + _root.T1C.charAt(n);
...también tiene eval y cosas para que funcione con la línea 2, etc. Pero está mal escrito o no sé qué.

Código:
} else if (n3 < _root.TT) {
            n = -1;
            n3 = n3+1;
        } else {
            removeMovieClip (_root.T);
        }
    }
}
Eso es que si no se cumple la condición anterior y la línea de texto actual es menor que el total de líneas, entonces el caracter a agregar vuelve a ser 0 (dice -1 pero después se suma 1) y aumenta la línea que será modificada. O sea se modificará la que esté debajo de la antes modificada. Sino, se remueve ese "modificador de texto".

¿Cómo soluciono el problema?

Ah, la escena 3 muestra un diálogo más largo, o sea con más líneas.

Obviamente:
Kuno es Kunio
Tsup es Tsuu
Bunzoo es Bunzo
y a todos les cambié 1 letra del nombre porque me divierte XD Y no, no es un remake de ese juego, sólo estoy usando sus gráficos y algunas cosas más.

Volviendo al problema. Lo puedo solucionar así:
Código:
onClipEvent (enterFrame) {
    n2 = n2+1;
    if (n2 == _root.TW) {
        n2 = 0;
        if (eval ("_root.T"+n3+".length") < eval ("_root.T"+n3+"C.length")) {
            n = n+1;
            if (n3 == 1) {
                set ("_root.T"+n3, eval ("_root.T"+n3) + _root.T1C.charAt(n));
            } else if (n3 == 2) {
                set ("_root.T"+n3, eval ("_root.T"+n3) + _root.T2C.charAt(n));
            } else if (n3 == 3) {
                set ("_root.T"+n3, eval ("_root.T"+n3) + _root.T3C.charAt(n));
            } else if (n3 == 4) {
                set ("_root.T"+n3, eval ("_root.T"+n3) + _root.T4C.charAt(n));
            } else if (n3 == 5) {
                set ("_root.T"+n3, eval ("_root.T"+n3) + _root.T5C.charAt(n));
            }
        } else if (n3 < _root.TT) {
            n = -1;
            n3 = n3+1;
        } else {
            removeMovieClip (_root.T);
        }
    }
}
Pero se nota que no es muy coherente que digamos ¿qué pasa si fueran 50 líneas? Por suerte no lo son, pero bueno.

Etiquetas: caracteres, distintos, flash, movie, ordenada, referencia, textos, clips
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:47.