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


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 236
21  Media / Juegos y Consolas / Aumentar máxima cantidad de disparos en pantalla. en: 26 Abril 2025, 04:47 am
Algo extremadamente molesto del juego Donkey Kong 3 de NES es que si hay 2 disparos tuyos, no puede haber un 3ero, por lo que si fallaste 2 veces (lo cual es bastante normal en mi caso, porque los bichos son chicos y se mueven de forma bastante random, además suelo usar turbo) y tienes un enemigo encima acercándose (muy normal también) y quieres dispararle, no puedes y deberías esquivar hasta que uno de tus disparos desaparezca. Es como estresante, tienes el bicho al lado y no puedes dispararle ¿no es un juego de disparos?

Hay otros ejemplos, como el Galaxian, donde sólo puede haber 1 disparo tuyo en la pantalla, y tarda más en desaparecer que los de DK3, así que es peor, aunque no hay tantos bichos acercándose a la vez.

¿Habrá algún modo de romper ese límite?

Por ejemplo poniendo un cheat en un emulador o modificando el rom.

Citar
¡Muy buena observación!  
Lo que mencionas es **totalmente cierto**: en varios juegos clásicos de arcade (y sus versiones de consola como NES), había límites estrictos en la cantidad de disparos que podías tener activos al mismo tiempo. Esto se debía principalmente a **limitaciones de hardware** de la época (CPU, memoria, etc.), pero también era un recurso de **diseño de dificultad intencional**.

---

## Sobre tu pregunta: **¿Se puede romper ese límite?**

**¡Sí, es posible!** Hay varias maneras:

### 1. **Utilizar cheats (códigos de trucos) en emuladores**
Muchos emuladores modernos (como **FCEUX**, **Nestopia**, **Mesen**, etc.) permiten insertar códigos tipo **Game Genie**, **Pro Action Replay**, o incluso usar parches de memoria para modificar dinámicamente el comportamiento del juego.

- **Ejemplo**: podrías buscar un código Game Genie que elimine o modifique la restricción de disparos.
- **En FCEUX**, además puedes usar el **Memory Viewer** para buscar la variable que cuenta tus disparos y cambiarla para que no limite.

---

### 2. **Modificar directamente el ROM**
Esto es más avanzado, pero totalmente posible.

- Puedes usar un **desensamblador** de NES (como **IDA Pro**, **Ghidra**, o incluso herramientas especializadas de NES) para encontrar el código que maneja la cantidad de disparos activos.
- Luego, podrías:
  - Eliminar la comparación que limita el número de disparos.
  - O aumentar el número máximo permitido.

Esto básicamente requiere hacer un **parche IPS** o editar el ROM manualmente con un **hex editor**.

---

### 3. **Buscar hacks ya hechos**
Algunos fans ya han creado **hacks de ROMs** donde arreglan limitaciones molestas como esta. Puede que exista un hack de Donkey Kong 3 o Galaxian que elimine la restricción de disparos.

Sitios como:
- [ROMhacking.net](https://www.romhacking.net/)
- [NESWorld](http://www.nesworld.com/)

tienen miles de hacks de mejora y podría haber uno que te sirva.

---

## ¿Cómo funcionaría técnicamente el límite de disparos?

Usualmente, el juego tiene una **variable de conteo** de disparos activos. El flujo suele ser algo así:

```assembly
si (disparos_activos < 2) {
    crear_disparo();
}
```

Así que para romper eso, podrías:

- Forzar `disparos_activos` a 0 siempre.
- O eliminar el chequeo de cantidad (`< 2`).
- O aumentar el número máximo a, digamos, 10.

---

## ¿Quieres que te ayude a intentar encontrar o crear un código para romper esa limitación en **Donkey Kong 3** específicamente?

Podríamos:
- Buscar un **cheat** ya hecho.
- O diseñar juntos uno usando memoria RAM en un emulador como **FCEUX**.

🚀 **Si quieres, dime qué emulador usas y atacamos el problema juntos**. 🚀

---

¿Te gustaría que incluso te prepare un pequeño **tutorial paso a paso** para intentar modificarlo tú mismo? 🔥  
(¡No es tan difícil como parece!)

No esperaba tan buena respuesta, pero lo intento otro día.
22  Foros Generales / Dudas Generales / Re: ¿De qué maneras puedo conseguir dinero en internet? en: 24 Abril 2025, 00:09 am
Ayer alguien me comentó que gana dinero respondiendo encuestas, pero dudo que sea cierto.

Si yo supiera cómo, desde hace tiempo estaría ganando, supongo. Se ofrecen trabajos de Freelancer, pero son difíciles, por ejemplo en uno pedían hacer una página web.
23  Programación / Scripting / Re: [AYUDA] CMD codigo minutos a segundos en: 23 Abril 2025, 00:50 am
Deepseek me respondió esto:
Citar
### Solución para convertir minutos a segundos en el comando `shutdown`
Puedes modificar tu script para que acepte minutos (incluso con decimales, como `4.3`) y los convierta automáticamente a segundos. 

Aquí tienes una versión mejorada de tu script: 

```cmd
@echo off
set /p minutos="Tiempo hasta apagar el dispositivo (en minutos)? : "

:: Reemplazar coma por punto por si el usuario introduce 4,3 en lugar de 4.3
set minutos=%minutos:,=.%

:: Calcular segundos (minutos * 60) usando PowerShell para soportar decimales
for /f %%a in ('powershell -command "[math]::Floor(%minutos% * 60)"') do set segundos=%%a

echo Apagando el equipo en %segundos% segundos (%minutos% minutos)...
shutdown /s /t %segundos%
```

### Explicación:
1. **`set /p minutos=...`** → Pide al usuario que introduzca el tiempo en minutos. 
2. **`%minutos:,=.%`** → Convierte comas en puntos para evitar errores con decimales (ej: `4,3` → `4.3`). 
3. **`powershell -command "[math]::Floor(%minutos% * 60)"`** → Usa PowerShell para hacer la multiplicación (`minutos × 60`) y redondear hacia abajo. 
4. **`shutdown /s /t %segundos%`** → Ejecuta el comando de apagado con el tiempo en segundos. 

### Ejemplo de uso:
- Si el usuario introduce **`4.3`**, el script calculará: 
  `4.3 × 60 = 258 segundos` → `shutdown /s /t 258`. 

### Alternativa sin PowerShell (solo minutos enteros)
Si prefieres evitar PowerShell y solo necesitas minutos enteros (sin decimales), puedes hacerlo así: 
```cmd
@echo off
set /p minutos="Tiempo hasta apagar el dispositivo (en minutos, enteros)? : "
set /a segundos=%minutos% * 60
shutdown /s /t %segundos%
```

### Conclusión
La versión mejorada permite introducir minutos en lugar de segundos, haciéndolo más práctico. 

Si tienes más dudas sobre scripts en `CMD`, ¡avísame!

Si no te sirve, lo siento.

https://chat.deepseek.com/
24  Media / Diseño Gráfico / Baldosas con efecto de horizonte y distintos colores. Programando. en: 22 Abril 2025, 06:49 am
Sé cómo hacer una cosa o la otra, no ambas a la vez.

Con efecto de horizonte es que entre más arriba están, más pequeñas son. Eso lo puedo hacer trazando líneas, no programo.

Si quisiera que tengan colores al azar, las podría pintar manualmente, pero me preguntaba cómo sería hacerlo con programación.

Un ejemplo:


Puse unas baldosas abajo, y luego unas arriba más chicas, demasiado, así se nota que quedaría mal, pero así reinsertando la misma imagen es como le podría cambiar los colores con programación, sino no sé.

¿Cómo programando reinserto imágenes, achicándolas, de modo que las líneas diagonales conserven el ángulo?

Lo que se me acaba de ocurrir es poniéndoles lo que llaman Sesgar, pero no sé qué valores debería poner...

No, tampoco, quedaría así más o menos:


Pasa que están mal las de abajo, ahora que me doy cuenta. Las diagonales deben tener distinto ángulo.

Además, me di cuenta de que puedo dibujar todo y luego programar que cada espacio tenga un color al azar, pero la idea es programar un copy paste de las filas de baldosas, no hacer eso yo. Además deben tener distinto tamaño, cambiárselo manualmente es mucha cosa.
25  Programación / Programación General / Array no se genera bien. en: 21 Abril 2025, 07:08 am
Variable _level0.L2SaE10 está bien.
Variable _level0.L2SaE11 está bien.
Variable _level0.L2SaE12 no:
Citar
 Variable _level0.L2SaE10 = [object #30] [
    0:"0",
    1:"v",
    2:"v",
    3:"X"
  ]
  Variable _level0.S0vvXBestAction = "Desconocida"
  Variable _level0.S0vvXTurno = "X"
  Variable _level0.S0vvXFirstAPosible = 1
  Variable _level0.S0vvXLastAPosible = 2
  Variable _level0.L2SaE11 = [object #31] [
    0:"v",
    1:"0",
    2:"v",
    3:"X"
  ]
  Variable _level0.Sv0vXBestAction = "Desconocida"
  Variable _level0.Sv0vXTurno = "X"
  Variable _level0.Sv0vXFirstAPosible = 0
  Variable _level0.Sv0vXLastAPosible = 2
  Variable _level0.L2SaE12 = [object #15]
  Variable _level0.Svv0XBestAction = "Desconocida"
  Variable _level0.Svv0XTurno = "X"
  Variable _level0.Svv0XFirstAPosible = 0
  Variable _level0.Svv0XLastAPosible = 1

Ven que
  Variable _level0.L2SaE12 = [object #15]
es como un acceso directo a un array, no es uno independiente.

El error tiene que ver con EvaluarConocimientoSobreSEt1, la penúltima función:
Código
  1. // Signos en línea en tableros cuadrados:
  2. // Este programa tiene básicamente ?????????????????????????????????????? etapas,
  3. // que se pueden resumir así:
  4. // Nota: La situación inicial, en que hay 0 signos colocados,
  5. // estará guardada en la lista nro 0.
  6. // 1:
  7. // Probar acciones en cada situación de la lista,
  8. // guardando en una nueva lista las nuevas situaciones (que no...
  9. // sean victoria ni empate). Repetir con cada lista hasta la que...
  10. // tenga situaciones en que sólo 1 acción es posible (por...
  11. // ejemplo en el 3 en línea es 8).
  12. // 2: ACTUALIZAR ESTA
  13. // En las situaciones no resueltas, probar las acciones.
  14. // Si las consecuencias tienen RE, anotar cuantas de ellas...
  15. // son victoria de X, 0 o empate y anotar la acción que...
  16. // cause la RE más favorable, considerando secundariamente...
  17. // las cantidades.
  18. JuntosRequeridos = 2;
  19. CasillerosPorFila = 2;
  20. // Contando desde 0:
  21. MaxColumna = CasillerosPorFila-1;
  22. Casilleros = CasillerosPorFila*CasillerosPorFila;
  23. // Están numerados así:
  24. // 0 1
  25. // 2 3
  26. MaxCasillero = Casilleros-1;
  27. // En las listas L_SaE se irán poniendo las situaciones a...
  28. // experimentar que tengan _ signos colocados.
  29. // En la lista 0 agregar una situación, aún no se dice cual:
  30. L0SaE1 = [];
  31. // A continuación se especifica cómo es, agregando v
  32. // (que significa vacío) en lo que serían los casilleros,
  33. // los elementos del array:
  34. ValoraAgregar = -1;
  35. do {
  36. ValoraAgregar++;
  37. L0SaE1.push("v");
  38. } while (ValoraAgregar < MaxCasillero);
  39. delete ValoraAgregar;
  40. // Los datos de las situaciones no están en las listas,
  41. // se crean aparte. Con esta variable se evita repetidamente...
  42. // convertir en texto y concatenar:
  43. S_ = "S"+(L0SaE1.join(""));
  44. // Datos de la situación:
  45. // Usada para fácilmente saber de qué signo es turno:
  46. set (S_+"Turno", "X");
  47. // En otros casos usada para evitar probar acciones...
  48. // innecesarias y con LastAPosible para saber si sólo queda 1:
  49. set (S_+"FirstAPosible", 0);
  50. set (S_+"LastAPosible", MaxCasillero);
  51. NroDeListaRevisandose = -1;
  52. // Última lista que se revisará en la etapa 1:
  53. LastListaDeEt1 = MaxCasillero;
  54. // /////////////////////////////////////////////
  55. // /////////////////  Etapa 1  /////////////////
  56. // /////////////////////////////////////////////
  57. // Usada a continuación y durante la etapa 1 (Et1)...
  58. // cuando no hay más situaciones en la lista revisándose:
  59. function BuscarOtraListaEt1 () {
  60. trace("Ejecutando BuscarOtraListaEt1");
  61. NroDeListaRevisandose++;
  62. // Si las situaciones de la lista tienen más de 1 opción:
  63. if (NroDeListaRevisandose < LastListaDeEt1) {
  64. // Para evitar concatenar repetidamente:
  65. L_SaE = "L"+NroDeListaRevisandose+"SaE";
  66. NextL_SaE = "L"+(NroDeListaRevisandose+1)+"SaE";
  67. NroDeSExperimentandose = 1;
  68. // También para evitar concatenar repetidamente:
  69. // L_SaE_ = L_SaE+NroDeSExperimentandose;
  70. L_SaE_ = L_SaE+"1";
  71. // Usado en EvaluarConocimientoSobreSEt1 para...
  72. // nombrar las situaciones nuevas que se logren:
  73. SituacionesNuevas = 0;
  74. trace("Comienzan experimentos en una nueva lista, la "+NroDeListaRevisandose);
  75. PrepararSaE();
  76. } else {
  77. trace( "La próxima lista tiene situaciones de sólo 1 opción; inicia la etapa 2.");
  78. // IniciarEtapa2();
  79. gotoAndStop(4);
  80. }
  81. }
  82. BuscarOtraListaEt1();
  83. // Usada cuando se elege una SaE, en BuscarOtraListaEt1 y...
  84. // BuscarOtraSituacionEt1:
  85. function PrepararSaE () {
  86. trace("Ejecutando PrepararSaE");
  87. trace("Se inician experimentos en otra situación de la lista, la nro "+NroDeSExperimentandose);
  88. SituacionBase = eval(L_SaE_);
  89. S_ = "S"+(SituacionBase.join(""));
  90. Turno = eval(S_+"Turno");
  91. FirstActionPosible = eval(S_+"FirstAPosible");
  92. LastActionPosible = eval(S_+"LastAPosible");
  93. Action = FirstActionPosible;
  94. }
  95. // Usada en frame 2 (o etapa 1) repetidamente:
  96. function BuscarSituacionesDistantes () {
  97. // Plantear situación porque puede modificarse pero...
  98. // podría requerirse su estado original luego:
  99. Situacion = SituacionBase.slice();
  100. trace("La situación experimentándose es "+Situacion);
  101. EvaluarAplicabilidadEt1();
  102. }
  103. // Usada luego de que cambia la SaE y/o la acción:
  104. function EvaluarAplicabilidadEt1 () {
  105. trace("Ejecutando EvaluarAplicabilidadEt1");
  106. if (Situacion[Action] == "v") {
  107. trace("La acción "+Action+" es realizable.");
  108. AplicarAccionEt1();
  109. } else {
  110. trace("La acción "+Action+" no es realizable.");
  111. BuscarOtraAccionEt1();
  112. }
  113. }
  114. // Usada luego de EvaluarAplicabilidadEt1,
  115. // si una acción es realizable:
  116. function AplicarAccionEt1 () {
  117. trace("Ejecutando AplicarAccionEt1");
  118. Situacion[Action] = Turno;
  119. trace("Se realizó la acción "+Action+"; ahora la situación es "+Situacion);
  120. // ¿Ganó?
  121. // Si no se detecta victoria vertical,
  122. // revisa de otros modos (ver las funciones Chequear):
  123. ChequearVertical();
  124. if (Win == "No") {
  125. EvaluarConocimientoSobreSEt1();
  126. }
  127. // ¿Queda alguna acción sin probar en la situación?
  128. BuscarOtraAccionEt1();
  129. }
  130. // Usada en EvaluarAplicabilidadEt1 cuando una acción no es...
  131. // realizable, y luego de AplicarAccionEt1:
  132. function BuscarOtraAccionEt1 () {
  133. trace("Ejecutando BuscarOtraAccionEt1");
  134. if (Action < LastActionPosible) {
  135. // Si queda alguna acción sin probar...
  136. // en la situación, probarla:
  137. Action++;
  138. // Se ejecutará BuscarSituacionesDistantes.
  139. } else {
  140. trace("No hay más acciones realizables.");
  141. BuscarOtraSituacionEt1();
  142. }
  143. }
  144. // Usada en AplicarAccionEt1 cuando no hay victoria (ni empate,
  145. // aunque por ahora no ocurren):
  146. function EvaluarConocimientoSobreSEt1 () {
  147. trace("Ejecutando EvaluarConocimientoSobreSEt1");
  148. SituacionJoined = Situacion.join("");
  149. NewS_ = "S"+SituacionJoined;
  150. NewS_BestAction = NewS_+"BestAction";
  151. // ¿Se ha llegado antes a la situación?
  152. if (eval(NewS_BestAction) == undefined) {
  153. // No, anotar que debe investigarse:
  154. SituacionesNuevas++;
  155. // Copiar array (porque no se puede normalmente):
  156. trace("Situación a copiar a "+NextL_SaE+SituacionesNuevas+" es "+Situacion);
  157. set (NextL_SaE+SituacionesNuevas, Situacion.slice());
  158. trace("Esa situación no está anotada; se anota como nro "+SituacionesNuevas);
  159. set(NewS_BestAction, "Desconocida");
  160. if (Turno == "X") {
  161. set (NewS_+"Turno", "0");
  162. } else {
  163. set (NewS_+"Turno", "X");
  164. }
  165. // Averiguar cual es su 1er acción posible:
  166. AccionRevisandose = -1;
  167. do {
  168. AccionRevisandose++;
  169. if (Situacion[AccionRevisandose] == "v") {
  170. set (NewS_+"FirstAPosible", AccionRevisandose);
  171. break;
  172. }
  173. } while (true);
  174. // Averiguar cual es su última acción posible:
  175. AccionRevisandose = Casilleros;
  176. do {
  177. AccionRevisandose--;
  178. if (Situacion[AccionRevisandose] == "v") {
  179. set (NewS_+"LastAPosible", AccionRevisandose);
  180. break;
  181. }
  182. } while (true);
  183. }
  184. }
  185. // Usada en BuscarOtraAccionEt1 cuando no hay más acciones posibles:
  186. function BuscarOtraSituacionEt1 () {
  187. trace("Ejecutando BuscarOtraSituacionEt1");
  188. NroDeSExperimentandose++;
  189. if (eval(L_SaE+NroDeSExperimentandose) != undefined) {
  190. // Hay otra situación en la lista,
  191. // prepararse a usarla:
  192. L_SaE_ = L_SaE+NroDeSExperimentandose;
  193. PrepararSaE();
  194. } else {
  195. trace( "No hay más situaciones a experimentar en la lista actual, se mirará otra.");
  196. BuscarOtraListaEt1();
  197. }
  198. }

ChequearVertical y otras funciones que ella usa creo que son irrelevantes ahí así que no las puse.

Pero los traces parecen bien, dice:
Citar
La situación experimentándose es v,v,v,X
Ejecutando EvaluarAplicabilidadEt1
La acción 2 es realizable.
Ejecutando AplicarAccionEt1
Se realizó la acción 2; ahora la situación es v,v,0,X
Ejecutando EvaluarConocimientoSobreSEt1
Situación a copiar a L2SaE12 es v,v,0,X
Esa situación no está anotada; se anota como nro 12

// Copiar array (porque no se puede normalmente):
trace("Situación a copiar a "+NextL_SaE+SituacionesNuevas+" es "+Situacion);
set (NextL_SaE+SituacionesNuevas, Situacion.slice());

Si dice que la situación a copiar (Situacion) es v,v,0,X, debería generarse un array con eso, y le puse slice para que el array sea una copia y no un acceso directo (o el nombre que le corresponde), funcionó en todos los casos anteriores ¿qué pasa?

Hablando con GPT le plantié la posibilidad de que Macromedia Flash 5 esté limitado a 32 arrays, porque vean que llega hasta 31, que si se cuenta el 0 (si existe) son 32, y dijo que sí tiene problemas con eso pero puede que lo haya alucinado ¿qué pasa? ¿qué hago para averiguar el error?

Situacion, que es un array, en ese momento es v,v,0,X.

El nombre del array a crear es L2SaE12.

Quiero que se genere ese array, conteniendo una copia (independiente, no acceso directo) de Situacion.

El nombre se genera bien, pero el contenido es una copia acceso directo.

@_@


EDIT: No sé qué pasó que ahora me funciona:
Citar
  Variable _level0.L2SaE10 = [object #28] [
    0:"0",
    1:"v",
    2:"v",
    3:"X"
  ]
  Variable _level0.S0vvXBestAction = "Desconocida"
  Variable _level0.S0vvXTurno = "X"
  Variable _level0.S0vvXFirstAPosible = 1
  Variable _level0.S0vvXLastAPosible = 2
  Variable _level0.L2SaE11 = [object #29] [
    0:"v",
    1:"0",
    2:"v",
    3:"X"
  ]
  Variable _level0.Sv0vXBestAction = "Desconocida"
  Variable _level0.Sv0vXTurno = "X"
  Variable _level0.Sv0vXFirstAPosible = 0
  Variable _level0.Sv0vXLastAPosible = 2
  Variable _level0.L2SaE12 = [object #30] [
    0:"v",
    1:"v",
    2:"0",
    3:"X"
  ]
  Variable _level0.Svv0XBestAction = "Desconocida"
  Variable _level0.Svv0XTurno = "X"
  Variable _level0.Svv0XFirstAPosible = 0
  Variable _level0.Svv0XLastAPosible = 1

Parece haber un array menos, no sé por qué, usando esto:
https://text-compare.com/es/

Lo único que vi de diferente es que puse como comentario esto y le cambié el valor:
// LastListaDeEt1 = Casilleros;

y:
 if (NroDeListaRevisandose < Casilleros) {
en vez de usar LastListaDeEt1, que cuando hice las pruebas no sé si lo tenía como MaxCasilleros o eso +1, pero no veo que sea relevante, eso sólo hace que se revisen más listas...

Tengo la versión anterior, que fallaba, voy a ver por qué la cantidad de arrays es distinta.

Porque al revisar una lista que no tiene situaciones, Situacion queda indefinida, no es un array, entonces es 1 menos.

¿Pero qué tiene que ver cuántas listas revisa con si graba bien una situación o no?

O sea, está revisando la lista 1, situación v,v,v,X.
Realizando la acción 2, llega a v,v,0,X.
Debe grabarla.

¿Por qué si revisa la lista 2 y/o 3 la variable se ve bien y sino no? No veo que tenga relación esa variable (cuántas listas se revisan) con cómo se graba una situación.

A ver gente:
Se hace esto:
   if (NroDeListaRevisandose < LastListaDeEt1) {
eso determina cuántas listas de situaciones se revisan.

Si al principio pongo que LastListaDeEt1 = 1
va a revisar sólo la lista 0, y la última situación nueva a la que llega es:
  Variable _level0.L1SaE4 = [object #19] [
    0:"v",
    1:"v",
    2:"v",
    3:"X"

Si en cambio le pongo 2, revisa hasta la lista 1 y me está funcionando bien:
 Variable _level0.L2SaE12 = [object #31] [
    0:"v",
    1:"v",
    2:"0",
    3:"X"
  ]
  Variable _level0.Svv0XBestAction = "Desconocida"
  Variable _level0.Svv0XTurno = "X"
  Variable _level0.Svv0XFirstAPosible = 0
  Variable _level0.Svv0XLastAPosible = 1

No tengo mucha idea de qué pasó, por qué antes no funcionaba y ahora sí, ah... si le pongo 3 ocurre el error ¿pero por qué? Lo pensaré.
26  Media / Diseño Gráfico / Re: Dibujar asteroides mediante programación. en: 21 Abril 2025, 05:46 am
No sabía que existía esa opción ni sé bien en qué consiste. Había oído de RPG Maker y Unity o algo así, pero quiero saber cómo hacer las cosas con lo que tengo ¿no alcanza para hacerlas?
27  Media / Diseño Gráfico / Dibujar asteroides mediante programación. en: 20 Abril 2025, 07:40 am
Tengo estos dibujos simples:


Un circulo rojizo y un circulito cuyo color es irrelevante creo.

Tengo este código, lo que hace es insertar circulitos en el grande, de modo que tengan tamaños y otros aspectos un poco al azar:
Código
  1. function VariarMeteoro () {
  2. Diametro = 44;
  3. Radio = Diametro/2;
  4. // Insertarle imágenes:
  5. Imagen = 0;
  6. do {
  7. Imagen++;
  8. Name = "Imagen"+Imagen;
  9. Meteor.attachMovie("sCirculo", Name, Imagen);
  10. Name = "Meteor."+Name;
  11. // Para los tamaños y rotación:
  12. setProperty (Name, _xscale, 400*Math.random());
  13. setProperty (Name, _yscale, 400*Math.random());
  14. setProperty (Name, _rotation, 360*Math.random());
  15. // Para las posiciones:
  16. X = Math.random()*Diametro - Radio;
  17. setProperty (Name, _x, X);
  18. MaxY = Math.sqrt(Radio*Radio - X*X);
  19. Y = Math.random() * (MaxY*2) - MaxY;
  20. setProperty (Name, _y, Y);
  21. // Para los colores:
  22. ColorDeName = new Color(Name);
  23. Brillo = 0.2 + 0.8 * Math.random();
  24. Rojo = Math.round(MaxRojo * Brillo);
  25. Verde = Math.round(MaxVerde * Brillo);
  26. Azul = Math.round(MaxAzul * Brillo);
  27. ColorElegido = (Rojo << 16) | (Verde << 8) | Azul;
  28. ColorDeName.setRGB(ColorElegido);
  29. } while (Imagen < 1000);
  30. }
Nota: MaxRojo, verde, etc, están definidos antes, son igual al color más brillante del circulo grande.

Ejemplos de los resultados posibles (ignoren lo naranja de abajo):


No me gustan ¿cómo podrían mejorar?

El problema de las imágenes de asteroides en Internet es que ponen la sombra en un lado, y yo quiero que el objeto rote, así que la sombra mejor en el medio, como puse al inicio. Pero tiene que tener algo asimétrico para que se note que está rotando, y para que parezca un asteroide. Pensé en poner puntos negros, simulando cráteres. Los varié pero ya vieron el resultado. También había probado un asteroide más gris.

Ah, eso también, la idea es que puedan tener colores distintos, o sea, uno que sea rojo, otro verde...

Es para un juego:
https://youtu.be/tNznYLbcV1U

Acá les dejo un rar:
https://drive.google.com/file/d/1gmUKRd5hD86KtXJBlR8gUfliItkZ38dQ/view?usp=sharing
que lo tiene como exe, como swf y tiene el fla totalmente editable. Algunos objetos con código son invisibles no porque los haya querido esconder sino porque pesarían más si son visibles, tengo que anotar al principio donde están, pero básicamente dibujen algo en el objeto Vacío y así lo verán mejor.
28  Programación / Programación General / Re: Insertar imágenes en un área circular. en: 20 Abril 2025, 06:52 am
Bien, una vez elegido X, es como si se trazara una línea vertical que pasa por X.

Luego, de esa línea obtienes el punto más alto que toca el circulo, el mayor valor de Y. Mediante una fórmula similar a una que hasta yo conozco.

Tendría que investigar por qué esa fórmula es así, por qué da el resultado, porque a mí me parece como magia xD pero me voy a dedicar a otras cosas.
29  Programación / Python / Re: [Taller/Aporte] Introduccion a Redes Neuronales Artificiles e inteligencia artificial con Python en: 19 Abril 2025, 07:36 am
Simplemente para que sepas, me interesa pero no lo entiendo. Podría decir que falta ver un ejemplo, el resultado, lo gráfico de eso ya que se habla de algo gráfico, pero creo que ni así lo entendería.
30  Programación / Programación General / Re: Insertar imágenes en un área circular. en: 19 Abril 2025, 04:36 am
Ok, pero la medida que puse es la que se muestra al cliquear el objeto, no incluye las lineas.

El chiquito ni siquiera tiene líneas.

¡Me funcionó bien! ¿pero cómo? No entiendo mucho la lógica de esto, o sea, entre más hacia el extremo esté X, menos al extremo debe estar Y, sí, pero ¿cómo calculas exacto cuánto?
sqrt(r^2 - x^2)
¿pero por qué funciona? No sé mucho del por qué de ciertas ecuaciones, entiendo que el área de un rectángulo es base*altura porque la base se repite altura veces, hasta ahí llego xD
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 236
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines