El código simple... no funciona.

Iniciado por Tachikomaia, 1 Febrero 2021, 10:12 AM

0 Miembros y 1 Visitante están viendo este tema.

Tachikomaia

   actions for fotograma 1
      // Situación inicial.
      BaseVS = 83;
      C = 55;
   actions for fotograma 2
      CChar0 = String(C).charAt(0);
      CChar1 = String(C).charAt(1);
      if (CChar0<String(BaseVS).charAt(0)) {
         set (CChar0, CChar0+1);
      } else if (CChar0>String(BaseVS).charAt(0)) {
         set (CChar0, CChar0-1);
      } else if (CChar1<String(BaseVS).charAt(1)) {
         set (CChar1, C.charAt(1)+1);
      } else if (CChar1>String(BaseVS).charAt(1)) {
         set (CChar1, C.charAt(1)-1);
      } else {
         // Solución.
         stop ();
      }
   actions for fotograma 3
      gotoAndPlay (2);


La idea es que C tenga el valor de BaseVS a través de pistas como "el 1er caracter de C es menor que el 1er caracter de BaseVS", pero lo que el caprichoso código lo que hace es
  Variable _level0.BaseVS = 83
  Variable _level0.C = 55
  Variable _level0.CChar0 = "5"
  Variable _level0.CChar1 = "5"
  Variable _level0.5 = "51"

Debería, para empezar, hacer esto:
  Variable _level0.BaseVS = 83
  Variable _level0.C = 55
  Variable _level0.CChar0 = "6"
  Variable _level0.CChar1 = "5"

EdePC

No encuentro referencia a ese Set() supongo que sirve para asignar valores a una variable :-\

De todas maneras, y si entiendo bien, tu problema es que estás concatenando caracteres en lugar de hacer una suma, y esto es porque al menos uno de los operandos (en tu caso los dos) son texto. Primero debes de convertir tus caracteres a Números, lo normal es hacerlo en un principio para no irlos poniendo a cada rato:

Código (actionscript) [Seleccionar]
CChar0 = Number(String(C).charAt(0));
CChar1 = Number(String(C).charAt(1));
BChar0 = Number(String(BaseVS).charAt(0));
BChar1 = Number(String(BaseVS).charAt(1));

if ( CChar0 < BChar0 ) {
  CChar0 = CChar0 + 1;
} else if ( CChar0 > BChar0 ) {
  CChar0 = CChar0 - 1;
} else if ( CChar1 < BChar1 ) {
  CChar1 = C.charAt(1) + 1;
} else if ( CChar1 > BChar1 ) {
  CChar1 = C.charAt(1) - 1;
} else {
  stop();
}


CitarVariable _level0.BaseVS = 83
Variable _level0.C = 55
Variable _level0.CChar0 = 6
Variable _level0.CChar1 = 5
Variable _level0.BChar0 = 8
Variable _level0.BChar1 = 3

Tachikomaia

Cambia de 5 a 6 pero luego nada... No estás cambiando un caracter sino una variable.

Ni siquiera me está funcionando esto
set (C.charAt(0), 7);
set (C.charAt(0), "7");
set ("C.charAt(0)", 7);
set ("C.charAt(0)", "7");
trace(C.charAt(0));

De ninguna manera el caracter nro0 que es 5 cambia a 7.

EdePC

Código (actionscript) [Seleccionar]
set (C.charAt(0), 7);
set (C.charAt(0), "7");
set ("C.charAt(0)", 7);
set ("C.charAt(0)", "7");
trace(C.charAt(0));


1. No funciona porque C es del tipo número y no tiene el Método charAt() así que set crea una variable llamada undefined y le asigna el valor "7"

2. No funciona por que "C.charAt(0)" debe ser un nombre de variable válido, sin paréntesis

3. Igual que la línea 2

4. Devuelve undefined porque C es del tipo número y no tiene el Método charAt()

Si quieres cambiar el primer caracter  de la variable C que vale 55 a 7 puedes usar lo siguiente:

Código (actionscript,1) [Seleccionar]
set( "C", 7 + String(C).charAt(1) );
trace(C);
stop();


Solo recuerda que el primer parámetro de Set tienes que ser del tipo String y este debe corresponder al nombre de una variable a declarar o a cambiar su valor

Tachikomaia

Bien, aunque pareciera que el lenguaje tiene una falla, no debería ser tan complicado, nunca me pasó en este lenguaje ver algo así.

Tampoco funcionó esto:
set ((String(C).charAt(0)), 7);
set ((String(C).charAt(0)), "7");

EdePC

Código (actionscript) [Seleccionar]
set( (String(C).charAt(0)), 7 );
set( (String(C).charAt(0)), "7" );
stop();


1. Lo que hace es crear una variable llamada 5 y le asigna el valor 7

2. Cambia el valor de la variable 5 a "7"

Por eso al mostrar las variables devuelve:

Código (actionscript,7) [Seleccionar]
Variable _level0.BaseVS = 83
Variable _level0.C = "75"
Variable _level0.CChar0 = 6
Variable _level0.CChar1 = 5
Variable _level0.BChar0 = 8
Variable _level0.BChar1 = 3
Variable _level0.5 = "7"


- Ves, se a creado una variable llamada 5 que al final tiene el valor "7"

Set es para crear variables si estas no existen, o asignar valores a las variables si estas ya existen. El primer parámetro de Set debe ser siempre un String que será el nombre de la variable a crear o a cambiar el valor. El segundo parámetro es el valor a asignar.

No uses Set  :xD, usa la asignación normal de variables que es más estándar en los lenguajes de programación, por ejemplo estos dos códigos son completamente equivalentes:


Código (actionscript) [Seleccionar]
set( "C", 7 + String(C).charAt(1) );

Código (actionscript) [Seleccionar]
C = 7 + String(C).charAt(1);

Siempre puedes Depurar línea a línea para ver que sucede:


Tachikomaia

#6
set también puede usar de parámetro una variable, se usa para hacer referencia a otra variable cuyo nombre es en parte el contenido de la variable a nombrar. Sé que es complicado pero...

"por ejemplo estos dos códigos son completamente equivalentes"
De acuerdo, sólo intenté modificar el char de un modo más directo, como debería ser.

No sabía lo de depurar, no sé si mi flash (macromedia 5) tiene la opción.

Ya me funciona:
Código (actionscript) [Seleccionar]
Escena 1
  actions for fotograma 1
     // Situación inicial.
     BaseVS = 83;
     C = 55;
  actions for fotograma 2
     CChar0 = Number(String(C).charAt(0));
     CChar1 = Number(String(C).charAt(1));
     BVSChar0 = Number(String(BaseVS).charAt(0));
     BVSChar1 = Number(String(BaseVS).charAt(1));
     if (CChar0<BVSChar0) {
        CChar0 = CChar0+1;
        C = CChar0+""+CChar1;
     } else if (CChar0>BVSChar0) {
        CChar0 = CChar0-1;
        C = CChar0+""+CChar1;
     } else if (CChar1<BVSChar1) {
        CChar1 = CChar1+1;
        C = CChar0+""+CChar1;
     } else if (CChar1>BVSChar1) {
        CChar1 = CChar1-1;
        C = CChar0+""+CChar1;
     } else {
        // Solución.
        stop ();
     }
  actions for fotograma 3
     gotoAndPlay (2);
Entre otras cosas ponía "Char0" en vez de "CChar0".

PD: Oye, es raro que alguien use Flash ¿lo usas o lo instalaste para mi problema O_O ? Si es así muchas gracias.

EdePC

Como cultura general hago esas cosas, el Flash CS6 lo recopilé hace tiempo cuando me lo pidieron, ActionScript nunca programé, solo vi algo de código cuando necesité modificarlos o verlos para hacer funcionar unos SWF.

También tengo un Curso de ActionScript 2 con Flash 8 bastante viejo, he visto unos cuantos capítulos para ver más o menos el uso de Flash con ActionScript y su depurador para tu problema.

- El curso lo puedes descargar desde acá: https://we.tl/t-xF0cLMFPnz

Al final todo conocimiento es válido porque estos se encadenan con otros, instalar programas, crear ISO, instalar máquinas virtuales, buscar en Internet, entender otros lenguajes, etc, etc, etc así uno gana destreza para enfrentarse a problemas similares o diferentes con más soltura.