elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Temas
Páginas: 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [28] 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 ... 57
271  Programación / Programación General / Detectar que luego de moverse el mouse, se detuvo. en: 23 Febrero 2024, 09:32 am
Y entonces quiero que ocurra cierto evento.

Con esto el evento (_level0.gotoAndStop(5)) ocurre por el simple hecho de mover el mouse, aunque el mouse no se haya detenido, está mal:
Código
  1. // En frame 1:
  2. Movement = "Never";
  3. onClipEvent (enterFrame) {
  4. if (Movement == "Sí") {
  5. Movement = "Frenado";
  6. } else if (Movement == "Frenado") {
  7. _level0.gotoAndStop(5);
  8. }
  9. }
  10. onClipEvent (mouseMove) {
  11. Movement = "Sí";
  12. }
  13. onClipEvent (mouseDown) {
  14. if (Movement != "Frenado") {
  15. _level0.Mensaje = "Perdiste por hacer clic.";
  16. _level0.gotoAndStop(6);
  17. }
  18. }
  19. onClipEvent (keyDown) {
  20. if (Movement != "Frenado") {
  21. _level0.Mensaje = "Perdiste por hacer clac.";
  22. _level0.gotoAndStop(6);
  23. }
  24. }
Se supone que al moverlo Movement cambia a "Sí", luego el frame se repite y cambia a "Frenado" pero si el mouse se sigue moviendo debería cambiar a "Sí" de nuevo, por lo que la condición de Movement == "Frenado" no debería cumplirse, pero sí se cumple.

Intenté esto:
Código
  1. // En frame 1:
  2. Movement = "Never";
  3. ActualXMouse = _xmouse;
  4. ActualYMouse = _ymouse;
  5. onClipEvent (enterFrame) {
  6.    if (_level0.ActualXMouse != _level0._xmouse or _level0.ActualYMouse != _level0._ymouse) {
  7.        Movement = "Sí";
  8.        trace ("_level0.ActualXMouse era: "+_level0.ActualXMouse);
  9.        _level0.ActualXMouse = _level0._xmouse;
  10.        trace ("_level0.ActualXMouse es: "+_level0.ActualXMouse);
  11.        trace ("_level0.ActualYMouse era: "+_level0.ActualYMouse);
  12.        _level0.ActualYMouse = _level0._ymouse;
  13.        trace ("_level0.ActualYMouse es: "+_level0.ActualYMouse);
  14.    } else if (Movement == "Sí") {
  15.        trace ("Movement == Sí");
  16.        if (_level0.ActualXMouse == _level0._xmouse && _level0.ActualYMouse == _level0._ymouse) {
  17.            _level0.gotoAndStop(5);
  18.        }
  19.    }
  20. }
  21. onClipEvent (mouseMove) {
  22.    // Movement = "Sí";
  23. }
  24. onClipEvent (mouseDown) {
  25.    if (Movement != "Frenado") {
  26.        _level0.Mensaje = "por hacer clic.";
  27.        _level0.gotoAndStop(6);
  28.    }
  29. }
  30. onClipEvent (keyDown) {
  31.    if (Movement != "Frenado") {
  32.        _level0.Mensaje = "por hacer clac.";
  33.        _level0.gotoAndStop(6);
  34.    }
  35. }
Y obtengo el mismo resultado.

Había hablado con GPT, cambié algo, y al final ya no entiendo lo que dice.

Citar
En Macromedia Flash 5 ¿la velocidad conque se ejecutan los frames puede ser más rápida que la velocidad conque se actualiza la posición del mouse?

Citar
En Macromedia Flash 5, la velocidad con la que se ejecutan los frames está determinada por la configuración de fotogramas por segundo (FPS) del proyecto. Por defecto, la configuración de FPS es de 12 fotogramas por segundo, pero se puede ajustar según las necesidades del proyecto.

La velocidad con la que se actualiza la posición del mouse en Flash 5 está vinculada a la frecuencia de actualización del sistema operativo y del hardware del mouse. En general, la posición del mouse se actualiza con bastante rapidez y en tiempo real, lo que significa que los eventos del mouse se pueden detectar y responder de manera rápida.

Dicho esto, es posible que en situaciones extremas, donde haya una alta carga de trabajo en el procesador o limitaciones de rendimiento, la velocidad de actualización de la posición del mouse pueda ser más lenta en comparación con la velocidad de ejecución de los frames de Flash. Sin embargo, esto no es una limitación inherente de Flash 5, sino más bien una cuestión de rendimiento del sistema en el que se ejecuta.

En resumen, en condiciones normales y en sistemas bien configurados, la velocidad de ejecución de los frames en Flash 5 generalmente es más rápida que la velocidad de actualización de la posición del mouse.

Le mostré el código y le pregunté por qué no funcionaba.

Citar
El código que proporcionaste parece tener un par de problemas que podrían estar impidiendo que funcione correctamente. A continuación, te señalaré los posibles problemas y te daré una solución propuesta:

1. Comparación de posiciones del mouse: En tu condición `if (_level0.ActualXMouse != _level0._xmouse && _level0.ActualYMouse != _level0._ymouse)`, estás utilizando el operador lógico "&&" (y) para verificar si las posiciones X e Y del mouse han cambiado. Sin embargo, esto significa que el código dentro de esa condición se ejecutará solo si ambas condiciones son verdaderas al mismo tiempo, lo que puede ser poco probable. Es posible que desees utilizar el operador lógico "||" (o) en su lugar, para verificar si al menos una de las condiciones es verdadera.

Solución propuesta:
```actionscript
if (_level0.ActualXMouse != _level0._xmouse || _level0.ActualYMouse != _level0._ymouse) {
    // Código para cuando la posición del mouse ha cambiado
} else if (Movement == "Sí") {
    // Código para cuando la posición del mouse se ha mantenido igual después de un movimiento previo
}
```

2. Inicialización de la variable "Movement": No se muestra en el código proporcionado cómo se inicializa la variable "Movement". Si no se inicializa correctamente en otra parte de tu código, la condición `else if (Movement == "Sí")` puede no evaluarse como verdadera y, por lo tanto, el código dentro de ese bloque no se ejecutará.

Solución propuesta:
Asegúrate de que la variable "Movement" se inicialice correctamente antes de que se active el código que has proporcionado, por ejemplo, al comienzo del juego o en otro evento relevante.

Espero que estas sugerencias te ayuden a resolver el problema y que tu juego funcione correctamente. Si sigues teniendo dificultades, no dudes en proporcionar más detalles o preguntar más preguntas.

Cambié algo que me propuso, que me pareció bien, pero el resultado no cambió.

Citar
Mis disculpas por la confusión anterior. Luego de revisar nuevamente el código, noto que hay un error en la lógica de las condiciones. El problema radica en que estás comparando la posición del mouse actual con la posición anterior en cada cuadro de animación (enterFrame), lo que hace que la condición siempre se cumpla mientras muevas el mouse.

Para lograr el comportamiento deseado de ganar al mover el mouse y luego detenerlo, puedes implementar una solución alternativa utilizando eventos del mouse en lugar de la lógica basada en enterFrame. A continuación, te muestro un ejemplo de cómo podrías modificar el código:

```actionscript
// Escucha el evento de movimiento del mouse
this.onMouseMove = function() {
    // Guarda la posición del mouse actual
    _level0.ActualXMouse = _level0._xmouse;
    _level0.ActualYMouse = _level0._ymouse;
}

// Escucha el evento de liberación del mouse
this.onMouseUp = function() {
    // Verifica si el mouse se ha movido previamente y luego se detuvo
    if (_level0.ActualXMouse != _level0._xmouse || _level0.ActualYMouse != _level0._ymouse) {
        // El mouse se ha movido y luego se detuvo, se gana el juego
        _level0.gotoAndStop(5);
    }
}
```

En este código, utilizamos los eventos `onMouseMove` y `onMouseUp` para detectar el movimiento y la liberación del mouse, respectivamente. Al mover el mouse, guardamos la posición actual en las variables `_level0.ActualXMouse` y `_level0.ActualYMouse`. Luego, al soltar el mouse, verificamos si la posición del mouse ha cambiado en comparación con la posición guardada previamente. Si ha habido un movimiento y luego se detuvo, se activa la condición y se gana el juego.

Espero que esta solución funcione correctamente para tu juego. Si sigues teniendo problemas o tienes más preguntas, no dudes en hacérmelo saber. Estoy aquí para ayudarte.

MouseUp en mi lenguaje creo que es el evento "se dejó de mantener el botón presionado", no es lo mismo. En fin, no entiendo qué me dice:
Citar
¿qué condición dices que se cumple siempre?

Citar
Mis disculpas por la confusión en mi respuesta anterior. La condición que mencioné anteriormente no se cumple siempre, fue un error en mi explicación.

El problema principal en tu código original es que la condición `if (_level0.ActualXMouse != _level0._xmouse && _level0.ActualYMouse != _level0._ymouse)` se cumple cuando cualquiera de las coordenadas X o Y del mouse cambia. Esto significa que si solo una de las coordenadas cambia, el código dentro de esa condición se ejecutará. Sin embargo, según tu descripción, deseas que el juego se gane solo cuando ambas coordenadas del mouse se mantienen iguales después de un movimiento previo.

Para corregir esto, podemos modificar la condición para que verifique si ambas coordenadas X e Y del mouse se mantienen iguales. Aquí tienes el código actualizado:

```actionscript
onClipEvent(enterFrame) {
    if (_level0.ActualXMouse != _level0._xmouse || _level0.ActualYMouse != _level0._ymouse) {
        // Actualiza las coordenadas del mouse si han cambiado
        _level0.ActualXMouse = _level0._xmouse;
        _level0.ActualYMouse = _level0._ymouse;
    } else if (Movement == "Sí") {
        // Verifica si las coordenadas del mouse se mantienen iguales después de un movimiento previo
        _level0.gotoAndStop(5); // Gana el juego
    }
}
```

En este código actualizado, utilizamos el operador lógico "||" (o) para verificar si cualquiera de las coordenadas X o Y del mouse ha cambiado. Si alguna de las coordenadas cambia, actualizamos las variables `_level0.ActualXMouse` y `_level0.ActualYMouse` para reflejar las nuevas posiciones del mouse. Luego, en el bloque `else if`, verificamos si ambas coordenadas se mantienen iguales después de un movimiento previo. Si es así, se ejecuta el código para ganar el juego.

Espero que esta aclaración solucione el problema y te permita lograr el comportamiento deseado en tu juego. Si tienes más preguntas, no dudes en hacerlas. Estoy aquí para ayudarte.

Ahí parece una versión más simple de la que hice y que no creo que funcione, pero me cuesta entender qué dice y ya me cansé.

¿Solución?
272  Seguridad Informática / Seguridad / ¿Es peligroso que revisen mi PC sin el disco duro? en: 22 Febrero 2024, 13:16 pm
Relacionado con esto:
https://foro.elhacker.net/seguridad/preocupado_por_acceso_a_mi_correo_electronico_y_mi_ordenador-t521121.0.html;topicseen

Yo le di mi PC a alguien para que la reparara, pero me quedé con el disco duro. ¿Existe algo que pueda poner para espiarme, algún aparato, o para eso necesita instalar un software en el disco duro?
273  Informática / Software / ¿Cómo se encuentra software antiguo en las páginas oficiales? en: 22 Febrero 2024, 02:35 am
Suelo ser incapaz de encontrarlos, ahora busco este:
https://www.videosoftdev.com/free-screen-recorder

Ya lo tengo instalado pero quiero tener el instalador por las dudas y no lo encuentro en mi PC, y este dice que es desde Windows 8, no sé si servirá para el mío, 7, por eso quiero una versión más antigua ¿cual es más o menos el truco para encontrarlas en las páginas oficiales?
274  Media / Diseño Gráfico / Quitar cosas de una imagen ¿cómo? en: 21 Febrero 2024, 02:42 am
A esta imagen:


usando esto:
https://www.remove.bg/es

la dejé así:


Quiero sólo la mochila ¿cómo quito lo demás? Bien, no con la goma de Paint obviamente, que nio distingo donde empieza la mochila. Probé esto:
https://www.photoroom.com/es/herramientas/eliminar-objetos-de-fotos
pero no me sirvió.

Si saben de alguna imagen de una mochila así normal (no roja ni de colores llamativos ni grandota ni para mujer) tirada a la que se le puedan remover las cosas de alrededor fácil también me puede servir. De alguna escena de Anime o videojuego por ejemplo.
275  Media / Juegos y Consolas / Diferencia entre un buen juego y una tortura. en: 19 Febrero 2024, 07:38 am
Hace poco intenté pasar Startrek de DOS.

Moví la nave y se rompieron los cañones o algo así (ya me había pasado que por algo de eso no podía disparar). El comando DAMAGE no me daba la opción de reparar, así que busqué una base. Reparados los cañones, busqué unos enemigos. Al encontrarlos, recibí daño (no sé si puede evitarse) y se rompieron los cañones otra vez, así que fui a la base de nuevo.

Creo que me había ocurrido en otra partida también mientras intentaba entender cómo se juega, porque al usar NAV, para moverse, te piden una dirección y un valor de WARP, y no había encontrado mucha instrucción para eso ni para lo demás. Las direcciones son así:
432
5X1
678
O sea por ejemplo si quieres moverte a la izquierda debes presionar 5, no es algo fácil de recordar para mí. Y si quieres moverte sólo un casillero, debes poner WARP 0.1, no sé ni cómo me di cuenta de eso, probablemente lo vi en un video o por error. Pero me parece que no siempre funciona, le pones 0.4 por ejemplo luego de haber contado que es lo mínimo necesario para ir al siguiente cuadrante (tipo Zelda de NES) y se mueve 0.3, o a veces me ha pasado que se mueve para otro lado y más de lo que dije (¿quizá me confundí?).

Considerando también que a cada rato hay que recargar la energía (ir a una base), lo largo que es el juego y que no se puede guardar la partida, me pareció que más que interesante o divertido, era una tortura, y me hace preguntarme qué es realmente un buen juego.

https://www.youtube.com/watch?v=u7hDzhE6oVs

Por ejemplo en los juegos de rol, puede que te envenenen, es una molestia tener que curarte (en la mayoría), pero al menos tienes ítems, no tienes que regresar a un sitio para eso, y no ocurre por el simple hecho de caminar... Salvo que haya una trampa pero, no hay a cada rato o existe la habilidad de flotar o algo.

No creí que los comienzos de los videojuegos fuesen tan "oscuros". Probé otros de DOS también y más de uno me pareció injugable.

Si quiero hacer juegos ¿en tu opinión qué debo evitar hacer para que no sean una tortura, y sí interesantes y divertidos? ¿qué tiene un buen juego y qué no tiene?
276  Programación / Programación General / Otro error por decimales creo. en: 14 Febrero 2024, 06:36 am
Necesito que unos cuadrados (les llamo Pixeles) se coloquen uno al lado de otro como si fuese un tablero de ajedrez pero de 2x2, luego de 3x3, y así. El tamaño de cada píxel varía según cuantos deben caber en la pantalla. Una vez obtenido el largo, al pixel1 se lo coloca en 64, 0, al 2 en 64+largo, 0, y así hasta cierto punto, es decir, se van colocando cada vez más en la derecha, hasta antes de que se salgan de la pantalla, momento en que vuelve a comenzar desde 64 en X, pero aumenta en Y.

El problema es que ese límite, creo que al hacer sumas con decimales es superado antes de lo que debe. El programa está hecho de modo que coloca el píxel en el límite, y luego cuando lo supera hace lo que dije arriba. Cuando son 5x5 el límite es 371.2. Ocurre esto:
El pixel 1 se colocó en 64, 0
El pixel 2 se colocó en 140.8, 0
El pixel 3 se colocó en 217.6, 0
El pixel 4 se colocó en 294.4, 0
El pixel 5 se colocó en 64, 76.8 <- Mal colocado.

¿Qué puedo hacer para evitar el error? No es sólo para 5x5, debe servir para cualquier número entero digamos.

La parte que interesa está en el fotograma 2:

Código
  1.   actions for fotograma 1
  2.      PixelesdeLargo = 1;
  3.      function Variar () {
  4.         PixelaModificar = "ColordePixel"+Puntero;
  5.         ColordePixelaModificar = eval(PixelaModificar);
  6.         // ¿El pixel puede cambiar de color?
  7.         if (ColordePixelaModificar<1) {
  8.            // Sí, cambiarlo:
  9.            set (PixelaModificar, ColordePixelaModificar+1);
  10.            Col = new Color("Pixel"+Puntero);
  11.            Col.setRGB(parseInt(0, 16));
  12.            SumadePintados = SumadePintados+1;
  13.            // ¿El píxel está en el extremo derecho o abajo, donde no había en una hoja más chica?
  14.            if (Puntero/PixelesdeLargo == Math.floor(Puntero/PixelesdeLargo) or Puntero>MinPixelInferior) {
  15.               // Sí, actualizar SumadePintadosNuevos:
  16.               SumadePintadosNuevos = SumadePintadosNuevos+1;
  17.            }
  18.            // ¿El dibujo tiene píxeles donde no había en una hoja más chica...
  19.            // y son al menos (PixelesdeLargo) píxeles?
  20.            if (SumadePintadosNuevos>0 && SumadePintados>MinSumadePintados) {
  21.               DibujoListo = "Sí";
  22.               // Darme tiempo de ver el dibujo.
  23.               // Volver.
  24.               Puntero = MaxPosiciondePuntero;
  25.               gotoAndPlay (5);
  26.            } else {
  27.               // No, el dibujo es repetido, no mostrarlo y hacer otro:
  28.               DibujoListo = "No";
  29.               Puntero = MaxPosiciondePuntero;
  30.            }
  31.         } else {
  32.            // El pixel no puede cambiar de color, resetearlo:
  33.            set (PixelaModificar, 0);
  34.            Col = new Color("Pixel"+Puntero);
  35.            Col.setRGB(parseInt("FFFFFF", 16));
  36.            SumadePintados = SumadePintados-1;
  37.            // ¿El píxel está en el extremo derecho o abajo, donde no había en una hoja más chica?
  38.            if (Puntero/MaxPosiciondePuntero == Math.floor(Puntero/MaxPosiciondePuntero) or Puntero>MinPixelInferior) {
  39.               // Sí, actualizar SumadePintadosNuevos:
  40.               SumadePintadosNuevos = SumadePintadosNuevos-1;
  41.            }
  42.            // ¿Hay un pixel anterior?
  43.            if (Puntero>1) {
  44.               // Sí, apuntar a ese:
  45.               Puntero = Puntero-1;
  46.               // Continuar haciendo el dibujo:
  47.               DibujoListo = "No";
  48.            } else {
  49.               // No, aumentar tamaño de hoja y reiniciar.
  50.               DibujoListo = "Sí";
  51.               gotoAndPlay (2);
  52.            }
  53.         }
  54.      }
  55.   actions for fotograma 2
  56.      PixelesdeLargo = PixelesdeLargo+1;
  57.      Pixeles = 0;
  58.      DistanciaEntrePixeles = 384/PixelesdeLargo;
  59.      PosicionX = 64-DistanciaEntrePixeles;
  60.      MaxPosicionXdePixel = 64+DistanciaEntrePixeles*(PixelesDeLargo-1);
  61.      PosicionY = 0;
  62.      MaxPosiciondePuntero = PixelesdeLargo*PixelesdeLargo;
  63.      Puntero = MaxPosiciondePuntero;
  64.      // Píxeles pintados:
  65.      SumadePintados = 0;
  66.      MinSumadePintados = PixelesdeLargo-1;
  67.      MinPixelInferior = PixelesdeLargo*(PixelesdeLargo-1);
  68.      // Píxeles pintados que no estaban en hojas de menos píxeles:
  69.      SumadePintadosNuevos = 0;
  70.      // Agregar píxeles en blanco:
  71.      do {
  72.         Pixeles = Pixeles+1;
  73.         PosicionX = PosicionX+DistanciaEntrePixeles;
  74.         if (PosicionX>MaxPosicionXdePixel) {
  75.            PosicionX = 64;
  76.            PosicionY = PosicionY+DistanciaEntrePixeles;
  77.         }
  78.         trace ("El pixel "+Pixeles+" se colocó en "+PosicionX+", "+PosicionY);
  79.         attachMovie("mPixel", "Pixel"+Pixeles, Pixeles);
  80.         setProperty ("Pixel"+Pixeles, _x, PosicionX);
  81.         setProperty ("Pixel"+Pixeles, _y, PosicionY);
  82.         setProperty ("Pixel"+Pixeles, _width, DistanciaEntrePixeles);
  83.         setProperty ("Pixel"+Pixeles, _height, DistanciaEntrePixeles);
  84.      } while (Pixeles<MaxPosiciondePuntero);
  85.      stop ();
  86.   actions for fotograma 3
  87.      Variar();
  88.   actions for fotograma 4
  89.      Variar();
  90.      if (DibujoListo == "No") {
  91.         gotoAndPlay (3);
  92.      }
  93.   actions for fotograma 6
  94.      gotoAndPlay (3);
277  Programación / Programación General / ¿Existe un programa que genere la lista de fórmulas moleculares? en: 13 Febrero 2024, 09:11 am
H2O y todas esas normales.

Anormales son cuando son iones o radicales libres.

Para hacer esto hay que saber Química, claro ¿alguno sabe suficiente?

He pensado esto:
Citar
ÁtomosEnMolecula = 2
// Valencia del átomo 1:
VA1 = 1
// Identificador del átomo 1:
A1 = 1
// Eso se convierte en un átomo de la lista que la valencia marque, por ejemplo si VA1 es 1 y A1 es 1 entonces es H)
// Datos del átomo 2:
VA2 = 1
A2 = 1
Apuntador = ÁtomosEnMolecula

// Frame 2.
Si la fórmula molecular es normal, mostrarla (mostraría HH, no H_2, eso es secundario).

Si el átomo que indica el Apuntador (2: A2) puede ser otro (mayor que su anterior si hay, A1), modificarlo e ir a Frame 2.

Si hay un átomo anterior (sí: A1), disminuir el Apuntador e ir al párrafo anterior.

Resetear átomos (A1=1 y A2=1)
Apuntador = ÁtomosEnMolecula

Si la valencia del átomo que el apuntador indica (2: VA2) puede aumentar (sólo si es menor a su anterior si hay, VA1), aumentarla e ir a Frame 2.

Si hay un átomo anterior (sí: A1), disminuir el Apuntador e ir al párrafo anterior.

// Creo que en este punto habría mostrado todas las moléculas diatómicas.

// Agregar un átomo
ÁtomosEnMolecula+1
VA3=1 y A3=1 (o VA4 y A4, etc)
Apuntador = ÁtomosEnMolecula
ir a Frame 2.

Con eso se producirían fórmulas químicas hasta el aburrimiento.
Puede que el código ese tenga alguna falla, pero lo que necesito más urgentemente es:

- Entender qué átomos pueden formar 1 enlace, cuales 2, cuales 3 y cuales 4. Quizá hay más, pero es raro así que no lo consideraré. Se supone que eso es indicado por la valencia y que está en la tabla periódica, pero hay casos en que ponen muchos números y entonces no sé.

- Entender qué condiciones cumple una molécula normal.
Por ejemplo H3O no es normal porque la suma de las valencias no es par: 3+2=5
Pero eso no basta, por ejemplo CH6 tiene suma par pero no es normal, es un radical libre, normal sería esto:
  H
HCH
  H
El C con 4 enlaces y los H con 1, así que los 2H restantes no pueden formar parte de la molécula. Pensé que alcanzaba con decir que la suma de valencias de átomos con más de 1 debía ser mayor o igual que los con valencia 1 (en este caso 4<6 por lo que no sería normal), pero hay casos como NOH5 en que eso se cumple y aún así no es normal:
3+2+5=10, par, bien
3+2=<5, bien.
Pero la molécula sería: 2H-N-O-H y no hay forma de enlazar los 2H que faltan.
278  Media / Multimedia / ¿Por qué este video de YT es tan difícil de descargar? en: 11 Febrero 2024, 18:20 pm
Como último recurso probaré los métodos que uds me dijeron en un tema que hice hace tiempo sobre un video en otro lado, aquí no estoy preguntando cómo descargar este sino por qué es tan difícil hacerlo, qué tiene de especial, si alguien sabe. Probé diversas páginas de descarga sin instaladores como debe ser y en muchos casos me dice esto:
Se denegó el acceso a rr5---sn-p5qlsn7s.googlevideo.comNo tienes autorización para ver esta página.
HTTP ERROR 403

Por cierto a mí no me interesa ver esta basura, es para una abuela:
https://www.youtube.com/watch?v=NBv6qxKxWEY




https://www.youtube.com/watch?v=NBv6qxKxWEY
279  Programación / Programación General / ¿Cuando mostrar cosas en pantalla? en: 5 Febrero 2024, 21:46 pm
Otra duda aparentemente tonta que me ha tenido trancado demasiado tiempo.

En programas que hacen poco, el print o lo que sea se pone casi al final, para mostrar el resultado de la tarea. Nada más.

En programas que hacen muchas cosas, lo mismo pero los prints también se ponen antes de ciertos procesos o después para indicar en qué parte del programa va, o qué está analizando en el momento. Lo vemos cuando copiamos muchos archivos por ejemplo, se indica cual se está copiando.

Parece una cuestión obvia de resolver.

Pero yo tengo un programa que me cuesta decidir o entender dónde quisiera poner los prints si tuviera un criterio que me parezca bueno. En cierto punto sólo ponía uno al final. Luego poco a poco pasé a seguir este patrón generalmente: Comentario, cambio, print. Luego empecé a creer que no tiene sentido hacer print de cada cambio porque si una cosa funciona bien no es necesario indicar que otra lo hizo, por ejemplo indicar que una variable cambió parece innecesario si enseguida se aplicará para algo. Así, quité todos los prints (en mi caso traces) del fotograma 1 excepto uno que muestra lo mismo que otra cosa así que lo quitaré también, no me di cuenta. Ahora iba a analizar el resto y, no sé bien qué hacer...
Código
  1.   actions for fotograma 1
  2.      function InsertarNodoyFlecha () {
  3.         // Insertar Nodo:
  4.         Imagenes = Imagenes+1;
  5.         Nodos = Nodos+1;
  6.         Grafo.attachMovie("mNodo", "Nodo"+Nodos, Imagenes);
  7.         // Especificar la situación que representa:
  8.         set ("Grafo.Nodo"+Nodos+".EnHP", EnHP);
  9.         // Insertar flecha:
  10.         Imagenes = Imagenes+1;
  11.         Grafo.attachMovie("mFlecha", "Flecha"+Nodos, Imagenes);
  12.         // Especificar el sitio donde se insertan:
  13.         PosicionY = PadrePosicionY+33;
  14.         setProperty ("Grafo.Nodo"+Nodos, _y, PosicionY);
  15.         setProperty ("Grafo.Flecha"+Nodos, _x, PadrePosicionX);
  16.         setProperty ("Grafo.Flecha"+Nodos, _y, PadrePosicionY+6.5);
  17.         Hijos = Hijos+1;
  18.         // Como por ahora casi todo padre tiene 1 hijo, este if agiliza el proceso creo:
  19.         if (Hijos == 1) {
  20.            PosicionX = PadrePosicionX;
  21.            setProperty ("Grafo.Nodo"+Nodos, _x, PosicionX);
  22.         } else {
  23.            Hijo = 0;
  24.            MinPosicionX = PadrePosicionX-16.5*(Hijos-1);
  25.            SAquedebeActualizarse = SAs-Hijos;
  26.            do {
  27.               Hijo = Hijo+1;
  28.               PosicionX = (Hijo-1)*33+MinPosicionX;
  29.               setProperty ("Grafo.Nodo"+(Nodos-Hijos+Hijo), _x, PosicionX);
  30.               // Actualizar datos de las posiciones guardadas:
  31.               SAquedebeActualizarse = SAquedebeActualizarse+1;
  32.               set ("SA"+SAquedebeActualizarse+"PosicionX", PosicionX);
  33.               // Establecer rotación 0 a la flecha para que su altura de se modifique bien:
  34.               setProperty ("Grafo.Flecha"+(Nodos-Hijos+Hijo), _rotation, 0);
  35.               // Especificar rotación y tamaño de flecha:
  36.               DistanciaXPadreHijo = Math.abs(Math.abs(PadrePosicionX)-Math.abs(PosicionX));
  37.               setProperty ("Grafo.Flecha"+(Nodos-Hijos+Hijo), _height, Math.sqrt(DistanciaXPadreHijo*DistanciaXPadreHijo+20*20));
  38.               Rotacion = 180/Math.PI*Math.atan(DistanciaXPadreHijo/20*-1);
  39.               // Si el hijo está a la izquierda del padre, invertir la rotación:
  40.               if (PosicionX<PadrePosicionX) {
  41.                  Rotacion = Rotacion*-1;
  42.               }
  43.               setProperty ("Grafo.Flecha"+(Nodos-Hijos+Hijo), _rotation, Rotacion);
  44.            } while (Hijo<Hijos);
  45.         }
  46.      }
  47.      Respuesta = "Vencer al enemigo mediante acciones, el enemigo tiene 11 HP. Se recomienda la serie... ";
  48.      // Situación inicial:
  49.      // HP inicial del enemigo:
  50.      EnBaseHP = 33;
  51.      trace ("EnBaseHP: "+EnBaseHP);
  52.      // Guardar situación y cómo se produjo:
  53.      // Parte inicial del nombre de los datos (en este caso S11):
  54.      SitID = "S"+EnBaseHP;
  55.      // Acción realizada en la situación anterior (en este caso ninguna):
  56.      set (SitID+"ActionAnterior", "Ninguna");
  57.      // En este caso la variable es S11Action y su valor es "Ninguna".
  58.      // Posición X e Y del nodo que representa la situación desde la cual se originó la que será representada por otro nodo...
  59.      // ...pero en este caso es la posición del 1er nodo.
  60.      PadrePosicionX = 0;
  61.      PadrePosicionY = 0;
  62.      // Cantidad de imágenes insertadas:
  63.      Imagenes = 1;
  64.      // Cantidad de nodos del grafo a mostrar:
  65.      Nodos = 1;
  66.      // Insertar nodo inicial:
  67.      Grafo.attachMovie("mNodo", "Nodo1", 1);
  68.      // Especificar la situación que representa:
  69.      Grafo.Nodo1.EnHP = EnBaseHP;
  70.      // Hijos del nodo de la situación que se está analizando:
  71.      Hijos = 0;
  72.      // Acción que será usada 1ero:
  73.      Action = 1;
  74.      // Variables sobre situaciones anotadas:
  75.      // Total de situaciones anotadas:
  76.      SAs = 0;
  77.      // Situación anotada que será investigada 1ero:
  78.      SiguienteSAaInvestigar = 0;
  79.   actions for fotograma 2
  80.      trace ("Reset de la situación, aplicación de la acción, la situación ahora es:");
  81.      EnHP = EnBaseHP-Action;
  82.      trace ("EnHP: "+EnHP);
  83.      // ¿Se logró el objetivo?
  84.      if (EnHP<=0) {
  85.         trace ("Solución hallada, iniciando proceso para mostrar cómo causarla.");
  86.         Serie = Action;
  87.         InsertarNodoyFlecha();
  88.         gotoAndPlay (5);
  89.      } else {
  90.         trace ("No se logró el objetivo.");
  91.         // ¿La situación producida está anotada?
  92.         if (eval("S"+EnHP+"ActionAnterior") == undefined) {
  93.            trace ("La situación producida no está anotada.");
  94.            trace ("Se anotará y cómo se logró.");
  95.            SitID = "S"+EnHP;
  96.            set (SitID+"EnHPAnterior", EnBaseHP);
  97.            set (SitID+"ActionAnterior", Action);
  98.            trace ("Ahora está anotada: "+SitID);
  99.            trace ("Su antecedente fue ("+SitID+"EnHPAnterior): "+EnBaseHP);
  100.            trace ("y la acción fue ("+SitID+"ActionAnterior): "+Action);
  101.            // También se agrega como situación a investigar y se anota en qué consiste:
  102.            SAs = SAs+1;
  103.            SitID = "SA"+SAs;
  104.            set (SitID+"EnHP", EnHP);
  105.            trace ("Situaciones anotadas: "+SAs);
  106.            trace ("La última consiste en (EnHP): "+eval(SitID+"EnHP"));
  107.            // Se inserta el nodo que la representa y se guarda su posición:
  108.            InsertarNodoyFlecha();
  109.            set (SitID+"PosicionX", PosicionX);
  110.            trace (SitID+"PosicionX: "+PosicionX);
  111.            set (SitID+"PosicionY", PosicionY);
  112.         } else {
  113.            trace ("La situación producida ya está anotada.");
  114.         }
  115.      }
  116.   actions for fotograma 3
  117.      // ¿Modificar acción es posible?
  118.      if (Action<7) {
  119.         trace ("Es posible modificar acción.");
  120.         Action = Action+1;
  121.         trace ("Action fue modificada, es: "+Action);
  122.         gotoAndPlay (2);
  123.      } else {
  124.         trace ("No es posible modificar la acción.");
  125.         if (SiguienteSAaInvestigar<SAs) {
  126.            // Aún hay situaciones anotadas sin investigar, investigar una (probablemente lo ideal sería investigar la más diferente a las investigadas, pero me es difícil programar eso):
  127.            trace ("Aún hay situaciones anotadas sin investigar.");
  128.            SiguienteSAaInvestigar = SiguienteSAaInvestigar+1;
  129.            EnBaseHP = eval("SA"+SiguienteSAaInvestigar+"EnHP");
  130.            trace ("Se investigará la situación anotada nro: "+SiguienteSAaInvestigar);
  131.            trace ("Consiste en EnBaseHP: "+EnBaseHP);
  132.            // Guardar su posición para saber dónde poner a sus posibles hijos:
  133.            PadrePosicionX = eval("SA"+SiguienteSAaInvestigar+"PosicionX");
  134.            trace ("Nuevo PadrePosicionX: "+PadrePosicionX);
  135.            PadrePosicionY = eval("SA"+SiguienteSAaInvestigar+"PosicionY");
  136.            Hijos = 0;
  137.            // Reset de la acción a usar:
  138.            Action = 1;
  139.            trace ("Reset de la acción a usar, es: "+Action);
  140.            gotoAndPlay (2);
  141.         } else {
  142.            trace ("No hay situaciones anotadas sin investigar ni es posible lograr el objetivo.");
  143.            Respuesta = "No es posible lograr el objetivo.";
  144.         }
  145.      }
  146.   actions for fotograma 5
  147.      // Obtener acción anterior:
  148.      ActionAnterior = eval("S"+EnBaseHP+"ActionAnterior");
  149.      trace ("La acción anterior fue: "+ActionAnterior);
  150.      // ¿Hubo?
  151.      if (ActionAnterior != "Ninguna") {
  152.         // Sí, agregarla en la lista:
  153.         Serie = ActionAnterior+" "+Serie;
  154.         trace ("Acción agregada en la serie.");
  155.         // Averiguar cual fue la situación anterior:
  156.         EnBaseHP = eval("S"+EnBaseHP+"EnHPAnterior");
  157.         trace ("Se realizó en la situación: S"+EnBaseHP);
  158.         // Repetir este frame.
  159.         gotoAndPlay (4);
  160.      } else {
  161.         // No hubo una acción anterior, mostrar la serie:
  162.         trace (Respuesta+Serie);
  163.         stop ();
  164.      }

Además hay cosas como esta:
// Aún hay situaciones anotadas sin investigar, investigar una (probablemente lo ideal sería investigar la más diferente a las investigadas, pero me es difícil programar eso):
trace ("Aún hay situaciones anotadas sin investigar.");
Es decir un trace que dice lo mismo que el comentario, por lo que parece que debería borrar el comentario, pero el comentario dice más cosas que no tiene sentido decir en un trace. Ahora se me ocurre poner el trace y luego el comentario quitando lo que ya se dice en el trace, sí, puede que sea una solución muy obvia pero no me di cuenta en parte por intentar seguir el patrón que mencioné.

280  Programación / Programación General / 1, acciones, incremento VS 0, incremento, acciones. en: 3 Febrero 2024, 08:51 am
¿Qué se ha dicho que es mejor o qué opinan?

¿Cuales son las ventajas/desventajas de cada uno?

¿No hay diferencia casi?

Por si no se entiende me refiero a:
Código:
Contador = 1
Repetir:
  // Acciones.
  Contador++

VS

Código:
Contador = 0
Repetir:
  Contador++
  // Acciones.

No parece haber diferencia pero me pregunto si cuando el código se pone medio spaguetti sí...
Páginas: 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [28] 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 ... 57
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines