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


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 ... 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 44 45 46 47 48 ... 240
321  Programación / Programación General / Re: ¿Cómo crear una función a la que se le de un parámetro y usarlo? en: 17 Agosto 2024, 05:26 am
Te paso el fla:
https://drive.google.com/file/d/1Ewju2bGGeupjS_AmrH0G7IdSt-765TrG/view?usp=sharing

La idea es hacer un juego de peleas tipo Megaman en principio. Por ahora se controla (con flechas) a Jumpman (Mario antes de serlo) y la IA controla a Loder Runner, pero está muy simplón, lo voy haciendo de a poco.

Voy a probar esto
FaceLeft(Player)
así sin comillas a ver si funciona. Sí ¿pero con comillas no es más eficiente? Ya que en tal caso, quizá, deduce más rápido que es un objeto.

También podrías añadir un Método al Objeto Player para que sea innato de la clase/objeto/prototipo para poder hacer algo como: Player.FaceRight() pero todo esto va a depender de como estés trabajando, supongo que agregaste la Propiedad Facing de manera similar.

Los Objetos pueden tener Propiedades (variables) y Métodos (funciones) que obviamente están ligadas y son parte del Objeto, se acceden a ellas por objeto.variable o objeto.funcion()
Te doy el fla para que veas si conviene eso o no, me parece que es mejor que las funciones esté definidas fuera sólo 1 vez cada una, sino habría que poner copias en cada personaje (objeto) ¿no?
322  Foros Generales / Foro Libre / ¿Alguien entendió Serial Experiments Lain? en: 17 Agosto 2024, 03:30 am
Yo la vi como en 2006 y a veces he pensado en preguntar aquí esto. Si mal no recuerdo es una chica callada que adquiere una computadora y resulta una genia, aparentemente. 2 tipos en una camioneta negra la comienzan a espiar. Parece que estuviera hackeando cosas pero se pone muy raro todo, como si hackeara la realidad misma, o se autotriplicara según leí.

Vi esta noticia así que me decidí a preguntar.
https://somoskudasai.com/noticias/cultura-otaku/una-linda-lain-vuelve-para-ensenarte-a-programar/
Pero no, no tengo interés en ver sus videos.
323  Sistemas Operativos / Windows / Re: ¿Algo que abra una carpeta y además un archivo? en: 17 Agosto 2024, 02:35 am
Además me quedé con la duda de cómo sería ahí. Creo que poniendo un loop en el vbs y quit 0 (no el 1) funcionaría: No es 0 hasta que se detecte la carpeta.

El bat, por otro lado, también estaría loopeado hasta que lo otro diga 0.

Pero no sé cómo se interpreta ahí una variable (el mensaje, número, del quit) que aún no ha sido definida. Por ahora no averigué más, de cómo sería eso o cómo crear una variable en vbs y que se pase al bat, si es posible.
324  Sistemas Operativos / Windows / Re: ¿Algo que abra una carpeta y además un archivo? en: 17 Agosto 2024, 00:18 am
Bien, funciona, en bat había visto que se podía generar una espera pero como la velocidad de mi PC es tan variable no me pareció buena idea.
325  Programación / Programación General / ¿Cómo crear una función a la que se le de un parámetro y usarlo? en: 15 Agosto 2024, 06:58 am
Tengo estas funciones:
Código
  1. function FaceRight () {
  2. if (Player.Facing == -1) {
  3. Player.Facing = 1;
  4. Player._xscale = 100;
  5. }
  6. }
  7. function FaceLeft () {
  8. if (Player.Facing == 1) {
  9. Player.Facing = -1;
  10. Player._xscale = -100;
  11. }
  12. }
Sirven para que el personaje manejado por el jugador quede mirando hacia un lado u otro.

Quisiera que esa función se pueda usar también para los enemigos.

Ahora me doy cuenta de que no tendría problema, creo, en hacerlo como se me ocurrió, pero no parece la mejor forma. Sería algo así:
Código
  1. function FaceRight () {
  2. if (eval(Character+".Facing") == 1) {
  3. set(Character+".Facing", 1);
  4. set(Character+"._xscale", 100);
  5. }
  6. }
  7. // Cambios similares a FaceLeft.
  8. // Antes de llamar a la función, definir Character para indicar a qué personaje se aplicará.

Lo que pasa que pensé que los códigos se podrían ejecutar en un mismo momento y entonces la variable Character podría cambiar en medio del proceso y generar lío, por eso pensé que sería mejor que cada función tenga una variable independiente, un parámetro. Aunque tal vez no lo necesito, quiero saber cómo sería, no lo sé. Sé que el parámetro va entre el paréntesis, por ejemplo:
FaceRight ("Player")
La idea es que la función se aplique a lo que indique el parámetro ¿pero cómo hago referencia al parámetro luego? No puedo decir:
if (eval(Parametro+".Facing") == 1) {
no sé cómo se dice.

EDIT: Ya vi, era fácil, el nombre se pone en el paréntesis al definir la función:
Código
  1. function FaceRight (Character)
Para hacer referencia al parámetro se pone eso que se haya escrito.

Sorry por preguntar algo tan fácil, nunca había usado parámetros.

EDIT2: Igual el scale no funciona así xP
Código
  1. function FaceRight (Character) {
  2. if (eval(Character+".Facing") == -1) {
  3. set(Character+".Facing", 1);
  4. set(Character+"._xscale", 100);
  5. }
  6. }
Ya me había pasado algo similar pero quise arriesgarme. No sé cómo se resuelve, intento decir que la propiedad xscale del objeto Player sea 100, pero Flash crea una variable llamada Player._xscale, es como que lo anterior a _ no puede ser variable o sino se enreda... ¿alguna solución, para que no tenga que usar ifs ni similares?
GPT me dijo:
eval(Character)._xscale = 100;
Yo había probado eval pero de otras maneras  :P
326  Sistemas Operativos / Windows / Re: ¿Algo que abra una carpeta y además un archivo? en: 15 Agosto 2024, 04:32 am
GPT me dijo esto:
Citar
Sí, es posible realizar esta tarea también usando un archivo por lotes `.bat` en lugar de PowerShell. Puedes lograrlo utilizando un enfoque que implica verificar si la ventana de la carpeta está abierta mediante un script `.vbs` que luego es llamado desde el archivo por lotes `.bat`. Aquí te muestro cómo hacerlo:

1. Crea un archivo de script `.vbs` (por ejemplo, `CheckFolder.vbs`) con el siguiente contenido:

```vbscript
Set objShell = CreateObject("Shell.Application")
For Each wnd In objShell.Windows
    If InStr(wnd.LocationURL, "file:///UBICACIÓN DE LA CARPETA") > 0 Then
        WScript.Quit(0)
    End If
Next

WScript.Quit(1)
```

2. Luego, en tu archivo por lotes `.bat`, puedes llamar al script `.vbs` para verificar si la carpeta está abierta antes de abrir el archivo de texto. Aquí está cómo podrías modificar tu script `.bat`:

```batch
@echo off
start "" "%windir%\explorer.exe" "UBICACIÓN DE LA CARPETA"

:LOOP
cscript //nologo CheckFolder.vbs
if %errorlevel% equ 0 (
    timeout /t 1 /nobreak >nul
    goto :LOOP
)

start "" /max "notepad.exe" "UBICACIÓN DEL ARCHIVO"
```

En este script, después de abrir la carpeta, se ejecuta un bucle que verifica continuamente si la carpeta está abierta usando el script `.vbs`. Una vez que la carpeta está abierta, se espera un segundo y luego se abre el archivo de texto. Este método es una forma de verificar si la ventana de la carpeta está abierta.

¿Está bien? El código me suena un poco a chino. Me había dicho uno en powershell pero no sé ni qué es. Le pedí explicaciones de todo, es un poco largo así que no lo pego. Lo pruebo.

Lo de modificar el registro, que me dijo antes, por ahora no lo probaré.

...

No sirve, el archivo se abre antes que la carpeta. Le dije y me respondió:
Citar
El problema que estás experimentando se debe a que el script VBS y el script de batch (BAT) no están coordinados correctamente para verificar si la carpeta está abierta antes de abrir el archivo.

Para lograr lo que deseas (abrir un archivo solo después de que la carpeta esté abierta), necesitas ajustar el script VBS y el script de batch. Asegúrate de que el script VBS esté verificando que la carpeta está abierta antes de que el script de batch abra el archivo.

Aquí hay una posible solución corregida:

### Script VBS (`CheckFolder.vbs`):
```vbs
Set objShell = CreateObject("Shell.Application")
For Each wnd In objShell.Windows
    If InStr(wnd.LocationURL, "file:///CARPETA") > 0 Then
        WScript.Quit(0)
    End If
Next

WScript.Quit(1)
```

### Script de Batch (`OpenFolderAndFile.bat`):
```batch
@echo off
start "" "%windir%\explorer.exe" "CARPETA"

:LOOP
cscript //nologo CheckFolder.vbs
if %errorlevel% equ 0 (
    timeout /t 1 /nobreak >nul
) else (
    goto :OPENFILE
)
goto :LOOP

:OPENFILE
start "" /max "notepad.exe" "ARCHIVO"
```

### Explicación:
1. El script VBS ahora verifica si la carpeta "CARPETA" está abierta correctamente.
2. El script de batch espera en un bucle hasta que la carpeta esté abierta (si la carpeta está abierta, espera 1 segundo y vuelve a verificar).
3. Si la carpeta está abierta, salta a la sección `:OPENFILE` y abre el archivo `ARCHIVO`.

Con estos cambios, el archivo se abrirá solo después de que la carpeta esté abierta. ¡Prueba esto y debería funcionar como esperas!

Ahora veo el 1er código y estoy confundido.
Código
  1. For Each wnd In objShell.Windows
  2.    If InStr(wnd.LocationURL, "file:///CARPETA") > 0 Then
  3.        WScript.Quit(0)
  4.    End If
  5. Next
  6.  
  7. WScript.Quit(1)
Si se encuentra la carpeta abierta, el mensaje es 0, sino 1 ¿no?
En el bat dice:
Código:
:LOOP
cscript //nologo CheckFolder.vbs
if %errorlevel% equ 0 (
    timeout /t 1 /nobreak >nul
    goto :LOOP
)
Se ejecuta el code anterior. Si el mensaje o error es 0... m, supongo que debería cambiarlo a 1, pruebo. Es que poner un else como me dijo ahora me pareció innecesario.

Ahora ni abre el archivo. Vamos desde el código anterior. Si el mensaje es 0, es decir si la carpeta se abrió, el código se ejecutará de nuevo ¿cómo es que llegó a terminar entonces? ¿se ejecutan mezclados?
Supongamos que la carpeta no se abrió, el mensaje es 1. El loop no se hace, fin. Está mal. Supongo que pasa esto.
Pero supongamos que sí se abre, el mensaje es 0. El loop se hace, y es interminable ¿no?

Ahora vamos a ver el código cambiando ese 0 por 1, en el bat:
Supongamos que la carpeta no se abrió, el mensaje es 1. El loop se hace, así que en algún punto la carpeta debería abrirse y el mensaje ser 0.
Si es 0, el programa sigue de largo sin hacer más.
¿Por qué el loop no termina si la carpeta está abierta?
327  Sistemas Operativos / Windows / Re: ¿Algo que abra una carpeta y además un archivo? en: 14 Agosto 2024, 01:18 am
Tal vez me sirva, pero mi caso es algo así:
- Tengo una carpeta Proyectos.
- En esa carpeta tengo archivos txt que son diarios sobre los proyectos, por ejemplo Libro.txt y Dibujante completo.txt.
- También tengo carpetas Libro, Dibujante completo, etc, que tienen archivos de los proyectos.

Podría poner cada diario dentro de su respectiva carpeta pero me queda más cómodo así. Bueno, voy a ponerlos dentro, mejor, es que antes tená un único diario para todos y estaba fuera, me acostumbré a eso.

A ver entonces qué sale.

Funciona pero antes de poner el destino hay que copiar lo que estaba ahí y ponerlo en Iniciar en, o al menos en mi caso eso estaba en blanco y cuando no lo copié no funcionó.

Una duda, el txt se abre, sí, pero aunque le puse al acceso directo que se abra maximizado, se abre normal ¿es posible que se abra maximizado? Quizá modificando alguna configuración de otro lado. No sé qué manía tiene de nunca abrirse maximizado aunque siempre lo cierre maximizado, Paint por ejemplo siempre se abre maximizado.

Otra: ¿Es posible que abra la carpeta y luego el archivo? Porque, por la razón que sea, lo abre antes, así que debo hacer que la ventana activa vuelva a ser el archivo. La idea es que sea cómodo. Le preguntaré a GPT.

Citar
Para lograr que al abrir un acceso directo, un archivo batch (`.bat`), un programa u otro tipo de archivo en Windows 7 se abra una carpeta y luego un archivo de texto (`txt`) con la ventana maximizada, puedes seguir estos pasos:

1. **Crear el archivo batch**:
   - Abre el Bloc de notas y escribe los siguientes comandos:
     ```batch
     @echo off
     start "" "%windir%\explorer.exe" "C:\Ruta\De\La\Carpeta"
     start "" /max notepad.exe "C:\Ruta\Del\Archivo.txt"
     ```
   - Reemplaza `"C:\Ruta\De\La\Carpeta"` con la ruta de la carpeta que deseas abrir y `"C:\Ruta\Del\Archivo.txt"` con la ruta del archivo de texto que deseas abrir.
   - Guarda el archivo con una extensión `.bat`, por ejemplo, `abrir_carpeta_y_archivo.bat`.

2. **Crear un acceso directo**:
   - Haz clic derecho en el escritorio o en la ubicación deseada y elige `Nuevo` > `Acceso directo`.
   - En la ventana emergente, haz clic en `Examinar` y selecciona el archivo batch que creaste (`abrir_carpeta_y_archivo.bat`).
   - Haz clic en `Siguiente`, asigna un nombre al acceso directo y finaliza el proceso.

3. **Configurar el acceso directo para abrir maximizado**:
   - Haz clic derecho en el acceso directo que creaste y elige `Propiedades`.
   - En la pestaña `Acceso directo`, en el campo `Ejecutar`, elige `Maximizada`.
   - Haz clic en `Aceptar` para guardar los cambios.

Al hacer doble clic en este acceso directo, se abrirá la carpeta especificada y el archivo de texto en Notepad en modo maximizado. Asegúrate de tener los permisos necesarios para acceder a la carpeta y al archivo.

Citar
Si deseas que todos los archivos de texto (`*.txt`) se abran maximizados por defecto al hacer doble clic en ellos, puedes hacer uso del Registro de Windows para ajustar esta configuración de forma global. A continuación, te guiaré a través de los pasos para lograr esto en Windows 7:

**Nota importante: Antes de modificar el Registro de Windows, te recomiendo encarecidamente que hagas una copia de seguridad del Registro o de tu sistema. Modificar incorrectamente el Registro puede causar problemas graves en el sistema operativo.**

1. **Abrir el Editor del Registro**:
   - Presiona `Win + R` para abrir el cuadro de diálogo "Ejecutar".
   - Escribe `regedit` y presiona Enter para abrir el Editor del Registro.

2. **Navegar hasta la clave del Registro correcta**:
   - Ve a la siguiente ubicación en el Editor del Registro:
     ```
     HKEY_CLASSES_ROOT\txtfile\shell\open\command
     ```

3. **Modificar la entrada del Registro**:
   - Haz clic derecho en la entrada `Default` en el panel derecho y elige `Modificar`.
   - En el campo `Información del valor`, agrega `/max` al final del valor existente. Por ejemplo, si el valor es `"\"%1\""`, cámbialo a `"\"%1\" /max"`.

4. **Confirmar los cambios**:
   - Haz clic en `Aceptar` para guardar los cambios en el Registro.

Una vez que hayas realizado estos cambios, todos los archivos de texto (`*.txt`) deberían abrirse maximizados por defecto al hacer doble clic en ellos.

Por favor, ten en cuenta que modificar el Registro de Windows es una tarea avanzada y puede tener consecuencias no deseadas si no se realiza correctamente. Si no te sientes cómodo realizando estos cambios por tu cuenta, te sugiero que busques asistencia de alguien con experiencia en la modificación del Registro de Windows.
Veremos, veremos...
328  Foros Generales / Foro Libre / Re: Presentación en: 12 Agosto 2024, 18:49 pm
O sea... te pagan para que hagas imágenes engañosas para estudiar cómo reaccionan sus empleados, según entendí. Raro me resulta. Como sea, lo que me parece interesante desde hace un tiempo y no parece aplicarse son trampas para cazar ladrones. Bah, hay algunos videos sí, de gente que aparenta dejar un celular olvidado a ver si quien está al lado lo devuelve o se lo guarda. Pero yo digo más como que alguien deje algo en la puerta de un almacén o en una plaza pública, mientras compra o juega, es decir, en teoría uno no debería estarse preocupando de si alguien se lo lleva. También servirían para testear la moralidad de un tesorero y similares antes de decidir si mantenerlos en el puesto.
329  Programación / Programación General / Lograr que el pasto quede bien. en: 12 Agosto 2024, 17:42 pm
El pasto que se ve arriba, se coloca con código repetidamente, con distinta posición, tamaño y reflejo, según dónde esté, y tiene algo de random, pero hay un punto en que hay un gran cambio (aunque a la vista quizá no se note) y es lo que quiero mejorar.

Lo que está a la derecha de la línea no se verá en la imagen que necesito, y tampoco la parte de más arriba (empieza poco después que empieza el pasto del horizonte).
Código
  1. // Pastos grandes al costado:
  2. Pastos = 0;
  3. do {
  4. Pastos++;
  5. attachMovie("mPasto", "Pasto"+Pastos, Pastos);
  6. setProperty ("Pasto"+Pastos, _x, 225+Pastos/6+random(Pastos/3));
  7. setProperty ("Pasto"+Pastos, _y, 10+Pastos);
  8. setProperty ("Pasto"+Pastos, _xscale, 1+Pastos/2.5*(1-2*random(2)));
  9. setProperty ("Pasto"+Pastos, _yscale, 1+Pastos/2.5);
  10. } while (Pastos<207);
  11. // Delante:
  12. do {
  13. Pastos++;
  14. attachMovie("mPastos", "Pasto"+Pastos, Pastos);
  15. setProperty ("Pasto"+Pastos, _x, Pastos/6+random(Pastos/3));
  16. setProperty ("Pasto"+Pastos, _y, Pastos);
  17. setProperty ("Pasto"+Pastos, _xscale, 1+Pastos/2.5*(1-2*random(2)));
  18. setProperty ("Pasto"+Pastos, _yscale, 1+Pastos/10);
  19. } while (Pastos<250);

O sea, se colocan pastos al costado del muro, y quedan por delante pero, como están al costado, no se nota (para que queden más parejos, vuelvo a generar la imagen, para mí está bien en esto).
Luego, se precisa que los pastos queden delante del muro, pero esos deben ser más cortos delante, y del tamaño de antes en la derecha, así digamos:
muro:::
.......:::
donde los puntos son la altura que deben tener los pastos.

¿Cómo lo logro?

Se me acaba de ocurrir crear otro símbolo, con un pasto acorde, es decir, si el que se inserta en el 1er while es así ::: este sería ...:::
pero me gustaría por curiosidad saber la solución mediante código. El problema es que el tamaño se basa en la cantidad de pastos colocados, algo así:
Muro, pasto1 de tamaño1
Muro, pasto2 de tamaño2
etc, nro de pasto = tamaño digamos.
Pero cuando ya no hay muro habría que hacer (PARECE):
Pasto200 de tamaño 20, pasto201 de tamaño 200
Pasto202 de tamaño 21, pasto203 de tamaño 201
etc, y se pierde la fórmula y no sé cómo sería. Quizá usando más contadores...

EDIT: He creado la otra imagen. He tenido que moverlas porque estaban centradas y en ese caso al agrandarlas se agrandan hacia arriba y abajo, lo cual causa que cada línea de pastos queden así:
Código:
    :::
::::::
    :::
Creo que ya arreglé eso. Pero tengo problemas para entender cuánto debo mover las imágenes, o no sé qué está pasando, porque me quedó así:

¿Por qué esa imagen diferente se está insertando ahí si su posición en su película es la misma que las demás y la fórmula que uso también?
Código
  1. // Pastos grandes al costado del muro:
  2. Pastos = 0;
  3. do {
  4. Pastos++;
  5. attachMovie("mPasto", "Pasto"+Pastos, Pastos);
  6. setProperty ("Pasto"+Pastos, _x, 230+Pastos/6+random(Pastos/3));
  7. setProperty ("Pasto"+Pastos, _y, -10+Pastos);
  8. setProperty ("Pasto"+Pastos, _xscale, 1+Pastos/2.5*(1-2*random(2)));
  9. setProperty ("Pasto"+Pastos, _yscale, 1+Pastos/2.5);
  10. } while (Pastos<193);
  11. // Delante:
  12. Pastos++;
  13. attachMovie("mPastos2", "Pasto"+Pastos, Pastos);
  14. setProperty ("Pasto"+Pastos, _x, 193+random(Pastos));
  15. setProperty ("Pasto"+Pastos, _y, -10+Pastos);
  16. setProperty ("Pasto"+Pastos, _xscale, 1+Pastos/2.5);
  17. setProperty ("Pasto"+Pastos, _yscale, 1+Pastos/2.5);

Edit2: Ya arreglé eso, es que tenía una película Pasto, otra Pastos que no usaba, e hice Pastos2 y edité Pastos pero esa no la usaba, por eso el lío. Se me rompió la PC hace unos días y con tanto lío que tengo ya de por sí, peor aún xD
Va mejorando, pero va a tardar porque no le dedico tanto tiempo.
330  Foros Generales / Foro Libre / Re: Presentación en: 12 Agosto 2024, 17:04 pm
Parece que pensé mal: Como dijiste trabajar en seguridad pensé que eras un white hat.
Páginas: 1 ... 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 44 45 46 47 48 ... 240
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines