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


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 ... 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 [91] 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 ... 243
901  Sistemas Operativos / Windows / Re: ¿Como hacer que se reproduzca un sonido cada 1 hora en Windows 7? en: 1 Junio 2023, 20:15 pm
Hay tareas configuradas que no había visto o no existían, al seleccionar una aparecen tabs, una de las cuales es desencadenadores, ahí sí es posible configurar cada 1 hora.

¿Pero qué hago? ¿cómo le indico que debe reproducir un sonido? ¿lo abre con Winamp o puede ser algo no invasivo? Porque si estoy haciendo algo y de repente la pantalla se me cambia a Winamp sería molesto.
902  Comunicaciones / Dispositivos Móviles (PDA's, Smartphones, Tablets) / Re: grabar una conversacion en: 26 Mayo 2023, 15:10 pm
A este ex presidente uruguayo supuestamente unos periodistas argentinos lo grabaron sin que él supiera
https://www.youtube.com/watch?v=m3GaIRLPL8E
¡Nos hubiéramos perdido de algo muy gracioso!
Lo que se debe hacer en mi opinión es considerar que las paredes oyen, o tener mucho cuidado de qué se dice, o a quién. ¿Por qué a un acusado de robo le avisan que lo van a grabar? No tiene sentido: Si es un poquititito inteligente y no quiere delatarse (si realmente robó) no lo hará, y si lo hace que se embrome y mejor para todos así va a donde le corresponde y se gasta menos en el juicio. Sociedad mal programada :P
903  Programación / Programación General / Re: Ayuda con cálculos para que la trayectoria de una pelota cumpla ciertas condiciones. en: 26 Mayo 2023, 11:51 am
Cambié BallY por BallZ y funciona bien ;-) salvo con mucha fuerza, pasa por debajo de la red y pica después de donde debe ¿quizá es por cómo calculos las posiciones? ¿o un error del Flash que uso?
Te muestro:
https://drive.google.com/file/d/1DjvvtvnTAwY5aiseW7afowmS0nZdFTwL/view?usp=drive_link

Una duda: ¿En qué casos sólo es posible 1 ángulo? Quisiera obtener alguno para asegurarme de que funcione bien también en esos casos.
904  Comunicaciones / Dispositivos Móviles (PDA's, Smartphones, Tablets) / Re: grabar una conversacion en: 25 Mayo 2023, 12:54 pm
Los burócratas te dirán que pidas a la persona que escriba su promesa y la firme. Luego ella dirá que no quiere o si lo presentas que no escribió eso, que imitaste su letra y firma o que la amenazaste para que lo escribiera, pero con la grabación podría decir lo mismo :laugh:

Mejor no aceptes demasiadas promesas, o pide plazos.

Me recuerda a un tema que hice pero ya no recuerdo respecto a él, a ver:
https://foro.elhacker.net/foro_libre/iquestque_pasa_si_un_electricista_dice_que_no_le_pague-t515928.0.html
Síp, te puede servir a menos que sea un trabajo que se acordó mantener en secreto.
905  Comunicaciones / Dispositivos Móviles (PDA's, Smartphones, Tablets) / Re: grabar una conversacion en: 25 Mayo 2023, 04:38 am
¿No es normal que tengan? :o Si hasta graban videos con voz. Pensé que podían grabarse clases por ejemplo, yo lo hubiera hecho, hasta iría con una grabadora por la calle si pudiera conseguir una y demás. Si es por autoprotección o para demostrar ciertas cosas, no me parece mal, pero sí si por ejemplo acordaste hacer un intercambio con una mujer no profesional y quieres tener pruebas de que estuvo de acuerdo, es decir en ese caso sí me parece mal porque la persona en cierta medida te está haciendo un favor (si no es para acusarte falsamente luego y quitarte dinero, claro) y se está arriesgando (me refiero en este contexto a su imagen de mujer que no hace esas cosas) con la condición de que no la expongas (si se acordó así), entonces grabarle la conversación sería como no cumplir el contrato, por más que digas "es por autoprotección, sólo por las dudas".

Eso de ilegal en estos casos no sé si considerarlo justificado. Cuando hablas o miras, memorizas. Si no tienes tan buena memoria o si quieres recordarlo mejor ¿entonces te jodes? No le veo sentido, simplemente usas un aparato como quien pueda usar mejor su memoria, no hay diferencia. El único problema que veo es que eso lo pueda percibir un tercero, para el que no fue hecho, pero a ver, uf, si grabas a alguien caminando, no caminaba para ti tampoco ¿entonces tú tampoco deberías verle hacer eso? ¿pero debería molestarle que le mires, memorices o grabes? Yo no quiero que me hagan algo así porque temo que sea para lastimarme o reirse de mí, etc, pero si es una mujer linda, o un pájaro no tan común ¿entonces cual es el drama?

Por otro lado, hace poco leí que en Japón es ilegal hacer intercambios, a las idols incluso les prohiben tener pareja, todo muy prohibido, sin sentido, no sé qué intentan hacer con eso, pero me fui de tema.

Yo tenía un MP4 que grababa, aunque con calidad baja. Consigue una minigrabadora y listo, si es legal en tu país claro...
906  Programación / Programación General / Re: Proyecto de Motor de Juegos (Interrupción de Teclado) en: 24 Mayo 2023, 12:02 pm
Sí, sería de explicar todo lo que has desarrollado del tutorial, desarrollar y explicar paso a paso como para que alguien más pueda seguir e implementar su propia versión a partir de eso.
El código te lo di en un link, te lo dejo acá:
Código
  1. fscommand ("fullscreen", "true");
  2. Player.Facing = 1;
  3. Player.Attacking = 0;
  4. Player.Action = 1;
  5. // 0 crouching, 0.5 startingjump, 1 nothing, 2 walking, 3 falling, 3.5 minjump, 4 jumping.
  6. // /////////////////////////////////////////////
  7. // //////////////////  Bond  ///////////////////
  8. // /////////////////////////////////////////////
  9. function PersControl () {
  10. if (Player.Action == 2) {
  11. // Si el personaje está caminando.
  12. if (Key.isDown(65)) {
  13. // Si se presiona A.
  14. StartingJump();
  15. } else if (Key.isDown(83)) {
  16. // Si se presiona S.
  17. Attack();
  18. } else if (Key.isDown(40)) {
  19. // Si se presiona abajo.
  20. Crouch();
  21. } else if (Key.isDown(39)) {
  22. // Si se presiona derecha.
  23. FaceRight();
  24. Player._x = Player._x+0.9;
  25. } else if (Key.isDown(37)) {
  26. // Si se presiona izquierda.
  27. FaceLeft();
  28. Player._x = Player._x-0.9;
  29. } else {
  30. Quiet();
  31. }
  32. //FALTA THROW
  33. } else if (Player.Attacking == 0) {
  34. // Si el personaje no está atacando.
  35. if (Player.Action == 1) {
  36. // Si el personaje está en reposo.
  37. if (Key.isDown(65)) {
  38. // Si se presiona A.
  39. StartingJump();
  40. } else if (Key.isDown(83)) {
  41. // Si se presiona S.
  42. Attack();
  43. } else if (Key.isDown(40)) {
  44. // Si se presiona abajo.
  45. Crouch();
  46. } else if (Key.isDown(39)) {
  47. // Si se presiona derecha.
  48. FaceRight();
  49. Player._x = Player._x+0.9;
  50. Walk();
  51. } else if (Key.isDown(37)) {
  52. // Si se presiona izquierda.
  53. FaceLeft();
  54. Player._x = Player._x-0.9;
  55. Walk();
  56. }
  57. //FALTA THROW
  58. } else if (Player.Action == 3) {
  59. // Si el personaje está cayendo.
  60. Player.SpeedY = Player.SpeedY+0.1;
  61. MovingJump();
  62. if (Player._y>=554) {
  63. // Si el personaje toca el suelo.
  64. Player._y = 554;
  65. // Acá no debería haber Quiet sino FallEnd o...
  66. // depende de la velocidad de la caída???
  67. Quiet();
  68. }
  69. //FALTA: AT, THROW
  70. } else if (Player.Action == 4) {
  71. // Si el personaje está saltando.
  72. Jump();
  73. //FALTA: AT, THROW
  74. } else if (Player.Action == 0.5) {
  75. // Si el personaje está empezando a saltar.
  76. if (Key.isDown(39)) {
  77. // Si se presiona derecha.
  78. if (Player.Facing == -1) {
  79. Player.Facing = 1;
  80. }
  81. Player.SpeedX = 0.9;
  82. } else if (Key.isDown(37)) {
  83. // Si se presiona izquierda.
  84. if (Player.Facing == 1) {
  85. Player.Facing = -1;
  86. }
  87. Player.SpeedX = -0.9;
  88. } else {
  89. Player.SpeedX = 0;
  90. }
  91. //FALTA: AT, THROW, Down?
  92. } else if (Player.Action == 0) {
  93. // Si el personaje está agachado.
  94. if (Key.isDown(40)) {
  95. // Si se presiona abajo.
  96. if (Key.isDown(65)) {
  97. // Si se presiona A.
  98. StartingJump();
  99. } else if (Key.isDown(83)) {
  100. // Si se presiona S.
  101. Player.Attacking = 1;
  102. Player.gotoAndPlay(124);
  103. }
  104. } else {
  105. Quiet ();
  106. }
  107. } else if (Player.Action == 3.5) {
  108. // Si el personaje está saltando pero aún no llegó a cierta altura.
  109. Player.SpeedY = Player.SpeedY+0.1;
  110. if (Player.SpeedY<-3) {
  111. MovingJump();
  112. } else {
  113. // Si el personaje llegó a cierta altura (y perdió cierta velocidad).
  114. Player.Action = 4;
  115. Jump();
  116. }
  117. //FALTA: AT, THROW???
  118. }
  119. //¿FALTA: AT, THROW, AG?
  120. }
  121. }
  122. //JUMP, AG WHILE STARTING AT? AFTER?
  123. //AG
  124. // Otras funciones.
  125. function StartingJump () {
  126. Player.gotoAndPlay(96);
  127. Player.Action = 0.5;
  128. }
  129. function MovingJump () {
  130. Player._x = Player._x+Player.SpeedX;
  131. Player._y = Player._y+Player.SpeedY;
  132. }
  133. function MinJump () {
  134. Player.Action = 3.5;
  135. Player.SpeedY = -4;
  136. MovingJump();
  137. }
  138. function Jump () {
  139. if (Key.isDown(65)) {
  140. // Si se presiona A.
  141. Player.SpeedY = Player.SpeedY+0.1;
  142. if (Player.SpeedY>=0) {
  143. // Si el personaje comienza a caer.
  144. Fall();
  145. }
  146. } else {
  147. // Si se suelta A.
  148. Player.SpeedY = 0.1;
  149. Fall();
  150. }
  151. MovingJump();
  152. }
  153. function Fall () {
  154. Player.Action = 3;
  155. Player.play();
  156. }
  157. function Walk () {
  158. Player.gotoAndPlay(35);
  159. Player.Action = 2;
  160. }
  161. function Attack () {
  162. Player.gotoAndPlay(2);
  163. Player.Attacking = 1;
  164. Player.Action = 1;
  165. }
  166. function FaceRight () {
  167. if (Player.Facing == -1) {
  168. Player.Facing = 1;
  169. Player._xscale = 100;
  170. }
  171. }
  172. function FaceLeft () {
  173. if (Player.Facing == 1) {
  174. Player.Facing = -1;
  175. Player._xscale = -100;
  176. }
  177. }
  178. function Crouch () {
  179. Player.gotoAndStop(96);
  180. Player.Action = 0;
  181. }
  182. function Quiet () {
  183. Player.gotoAndStop(1);
  184. Player.Action = 1;
  185. }
  186. //Player.SpeedX = 0.9*Player.Facing;
  187. //Jump();
Algunas cosas están sin hacer o confusas, estoy aprendiendo.

Las imágenes es un poco más complicado explicar cómo hacer que aparezcan, pero me parece que depende mucho del programa que uses. Usando Quickbasic o Clipper, no tengo idea cómo hacer lo que puedo hacer con Flash. También he probado algún que otro programa muy poquito y no me parecieron tan visuales y fáciles como él.

De nuevo no te entiendo, en el leguaje que uso simplemente pones que si se presiona una tecla se hace X cosa u otra dependiendo de ciertas condiciones, tú hablas de crear una tabla y cosas que ¿son de lenguaje de bajo nivel? Creo que mi Flash no permite jugar en modo multijugador, pero probablemente te convenga usar un lenguaje de más alto nivel.
907  Programación / Programación General / Re: Ayuda con cálculos para que la trayectoria de una pelota cumpla ciertas condiciones. en: 24 Mayo 2023, 08:43 am
He estado pensando en otras cosas o cansado, pero aquí vuelvo ;D

Fíjate bien lo que te puse, y de ser necesario, ve las  explicaciones de mensajes anteriores, porque además te estás saltando algún paso.
Vale, luego de leer tu post.

Citar
Por ejemplo, aquí:

Código:
DistanciahastaRed = DistanciahastaDestinoXY*Math.abs(RedZ-BallZ)/Math.abs(DistanciahastaDestinoY);

En vez de RedZ-BallZ va RedY - BallY.
Ok, asumí que RedY era la altura así que lo llamé RedZ, y cuando vi -BallY me confundí y lo cambié por BallZ, supongo que fue por eso. Me confunde que Y sea Z...

Citar
Luego, como te comenté (y expliqué con más detalle en mi segundo mensaje), si Disc es negativo, no puedes hacer el tiro, no tienes la fuerza necesaria, así que ya ni siquiera tiene sentido calcular los ángulos y todo lo demás.
¿Qué sucede si se calcula? Pensé que el tiro saldría corto ¿no ocurre eso? Si no se tiene suficiente fuerza igual debe haber un tiro, como si el personaje hubiera querido hacer un buen tiro. No tiene sentido que no se haga un tiro.

Citar
En todo caso, podrías escoger un nuevo destino más cercano, como lo mencionaste en relación al punto 5, y repetir el procedimiento a ver si este sí lo puedes hacer.
Sí ¿y si el más cercano tampoco sirve?

Citar
Además, fíjate que después de calcular AlturaEnRedTheta y AlturaEnRedPhi puse:
"Si ambos pasan por encima, elige el más alto o bajo, según prefieras"
Pero tú ya directamente supones que ambos lo hacen y pasas a elegir el ángulo más bajo. Primero debes comprobar si alguno de los ángulos pasa por arriba de la red. Si sólo uno de los ángulos lo hace, obviamente lo tienes que usar, no hay otra opción. Únicamente si ambos pasan sobre la red, toca elegir el más bajo o alto. Y naturalmente, si ninguno lo consigue, toca aquí también elegir nuevo destino o lo que quieras.
Pensé que tu método indicaba si pasaban o no.
...
Se me hizo líoso hacerlo, pero creo que está. También corregí, creo, que en vez de usar los ángulos usaba las alturas. ¿Disc qué abrevia o qué significa?

Citar
este cálculo no es correcto:
Código:
    BallZSpeed = BallZ-BallZAnterior;
porque simplemente te daría la velocidad promedio a lo largo del último intervalo de tiempo, en este caso, el último segundo (porque creo que incrementas el tiempo un segundo a la vez, ¿no?), pero tú lo que buscas es el valor de la velocidad en el instante actual, que es distinto. La forma de hacerlo sería esta:
Código:
    BallZSpeed =  VelocidadZ - Gravedad * Tiempotranscurridodeltiro;
Creo que eso me quedó sin borrar del método anterior, creo que no influye salvo en el pique, que aún no lo arreglé. Gracias igual, si llego a eso y no lo puedo resolver te consulto. Lo borro por ahora a ver.

Citar
Una última cosa: supongo que estás usando escalas adecuadas, ¿no?
Probablemente no, el personaje es muy bajo por ejemplo. En el juego original los saques se hacen por encima del alcance de la raqueta y no se nota, pero en mi caso son acordes al alcance y me parece un poco bajo. El juego original:
https://www.youtube.com/watch?v=fc0_P2IGgJ4
¿Crees que habrá mucha diferencia en las escalas con el mío? Que yo sepa lo único que hice fue que la cancha entrara toda en la pantalla y también parte del fondo y los laterales, ya que en el juego original hay como paredes invisibles que si la bola toca es punto :-\ (no se nota salvo casos muy poco probables). También achiqué un poco al personaje porque ahí pareciera que ocuparan demasiado de la cancha.

En mi juego la cancha mide 239.9 de ancho (sin contar el corredor de dobles) y 480 de largo. Ese .9 es por motivos que no comprendo ni sé arreglar (ni volveré a dedicar tiempo a intentarlo), pero es mínimo, debería ser 240. La altura de la red es de unos 17.4 (pero la bola debe pasar a 18.6 mínimo). En fin, puse la gravedad que me pareció agradable a mi vista, no creo que sea ni tan poca ni tanta, pero ahora que lo dices, si con tu método es menos intensa aunque se use el mismo número, puede que deba aumentarla.
En el juego la fuerza de los tiros depende del tiempo de preparación, la fuerza de brazos, piernas, calidad de la raqueta y cuánto se usó en darle efecto a la bola, no sé si algo más... No he pensado o consultado tanto sobre eso. No tiene sentido que te de más detalles de eso tampoco ¿no? Te digo porque me llama la atención el 25 que pusiste ¿a qué se debe?

No tengo mucho interés en que sea tan realista en cuanto a velocidades o tamaños (especialmente la bola, sino no la veo mucho), tengo pensado que haya gran variedad de campeonatos variando el tamaño de algunas cosas por ejemplo. En otros aspectos sí quiero que sea realista, como he explicado.

Bueno, reviso el código de principio a fin, lo comparo con lo que has puesto.

Pusiste:
Disc = v0 * v0 * v0 * v0 - (g * (g * DistanciahastaDestinoXY * DistanciahastaDestinoXY - 2 * v0 * v0 * h))

Puse:
Código
  1. Parte = AlexFuerzadetiros*AlexFuerzadetiros*AlexFuerzadetiros*AlexFuerzadetiros;
  2. Disc = Parte-(Gravedad*(Gravedad*DistanciahastaDestinoXY*DistanciahastaDestinoXY-2*AlexFuerzadetiros*AlexFuerzadetiros*BallZ));

Luego debido a los ifs es complicado poner parte por parte, lo haré más adelante; este es el código con las partes más relevantes de este contexto supongo:
Código
  1. Gravedad = 0.01;
  2. RedZ = 18.6;
  3. // Datos para determinar velocidades del tiro.
  4. DistanciahastaDestinoX = BallX-280.1;
  5. DistanciahastaDestinoY = BallY-180;
  6. // DistanciahastaRed = BallY-300;
  7. // DistanciahastaMinsafeBallZ = BallZ-18.6;
  8. DistanciahastaDestinoXY = Math.sqrt(DistanciahastaDestinoX*DistanciahastaDestinoX+DistanciahastaDestinoY*DistanciahastaDestinoY);
  9. // Se calcula el ángulo o ángulos.
  10. Parte = AlexFuerzadetiros*AlexFuerzadetiros*AlexFuerzadetiros*AlexFuerzadetiros;
  11. Disc = Parte-(Gravedad*(Gravedad*DistanciahastaDestinoXY*DistanciahastaDestinoXY-2*AlexFuerzadetiros*AlexFuerzadetiros*BallZ));
  12. if (Disc<0) {
  13.    // Fuerza insuficiente, si es posible habrá que acercar el destino.
  14.    TiroRealizable = "Fuerza insuficiente";
  15. } else {
  16.    DistanciahastaRed = DistanciahastaDestinoXY*Math.abs(RedZ-BallY)/Math.abs(DistanciahastaDestinoY);
  17.    // Le he llamado RedZ a lo que has llamado RedY.
  18.    // Se calcula el ángulo Z;
  19.    theta = Math.atan((AlexFuerzadetiros*AlexFuerzadetiros+Math.sqrt(Disc))/(Gravedad*DistanciahastaDestinoXY));
  20.    // Se calcula el tiempo que se tarda en llegar a la red.
  21.    TiempoHastaRedTheta = (DistanciahastaRed)/(AlexFuerzadetiros*Math.cos(theta));
  22.    // Se calcula la altura a la que pasa la bola al llegar a la red.
  23.    AlturaEnRedTheta = BallZ+AlexFuerzadetiros*Math.sin(theta)*TiempoHastaRedTheta-(Gravedad*TiempoHastaRedTheta*TiempoHastaRedTheta)/2;
  24.    if (Disc == 0) {
  25.        // Sólo hay 1 ángulo Z posible.
  26.        if (AlturaEnRedTheta>=18.6) {
  27.            // Si la bola pasa la red con ese ángulo, usarlo.
  28.            TiroRealizable = "1 ángulo, ok";
  29.            Angulo = theta;
  30.        } else {
  31.            TiroRealizable = "1 ángulo, imposible";
  32.            // Probar acercar destino supongo.
  33.            Angulo = "Ninguno";
  34.        }
  35.    } else {
  36.        // Disc>0, hay 2 angulos posibles, calcular el faltante.
  37.        phi = Math.atan((AlexFuerzadetiros*AlexFuerzadetiros-Math.sqrt(Disc))/(Gravedad*DistanciahastaDestinoXY));
  38.        TiempoHastaRedPhi = (DistanciahastaRed)/(AlexFuerzadetiros*Math.cos(phi));
  39.        AlturaEnRedPhi = BallZ+AlexFuerzadetiros*Math.sin(phi)*TiempoHastaRedPhi-(Gravedad*TiempoHastaRedPhi*TiempoHastaRedPhi)/2;
  40.        if (AlturaEnRedTheta>=18.6) {
  41.            if (AlturaEnRedPhi>=18.6) {
  42.                // Con ambos ángulos la bola pasa la red, usar el más bajo.
  43.                if (AlturaEnRedTheta<AlturaEnRedPhi) {
  44.                    Angulo = theta;
  45.                } else {
  46.                    Angulo = phi;
  47.                }
  48.            } else {
  49.                // Sólo sirve el 1er ángulo.
  50.                Angulo = theta;
  51.            }
  52.        } else if (AlturaEnRedPhi>=18.6) {
  53.            // Sólo sirve el 2ndo ángulo.
  54.            Angulo = phi;
  55.        } else {
  56.            // Ningún ángulo sirve.
  57.            Angulo = "Ninguno";
  58.            // Probar acercar destino supongo.
  59.        }
  60.    }
  61.    if (Angulo != "Ninguno") {
  62.        // Cálculo de las velocidades.
  63.        VelocidadAdelante = AlexFuerzadetiros*Math.cos(Angulo);
  64.        VelocidadArriba = AlexFuerzadetiros*Math.sin(Angulo);
  65.        // Esta variable es redundante, pero clarifica lo que se esta haciendo.
  66.        VelocidadZ = VelocidadArriba;
  67.        if (DistanciahastaDestinoX == 0) {
  68.            BallXSpeed = 0;
  69.            BallYSpeed = VelocidadAdelante*-1;
  70.        } else {
  71.            AnguloPendiente = Math.atan(DistanciahastaDestinoY/DistanciahastaDestinoX);
  72.            BallXSpeed = VelocidadAdelante*Math.cos(AnguloPendiente)*-1;
  73.            BallYSpeed = VelocidadAdelante*Math.sin(AnguloPendiente)*-1;
  74.        }
  75.        // Datos para determinar posiciones de la pelota.
  76.        Tiempotranscurridodeltiro = 0;
  77.        BallXwhenstriked = BallX;
  78.        BallYwhenstriked = BallY;
  79.        BallZwhenstriked = BallZ;
  80.    }
  81. }

Dijiste:
Si Disc < 0, no puedes hacer el tiro

Puse:
Código:
if (Disc<0) {
// Fuerza insuficiente, si es posible habrá que acercar el destino.
TiroRealizable = "Fuerza insuficiente";
} else {
Y que yo sepa nada ocurrirá ahí, en el caso de true. Lo de cambiar destino lo haré más adelante.

Dijiste:
Si Disc == 0, hay un solo angulo posible
Si Disc > 0, hay dos angulos
Esos casos son mi else, calculo 1 ángulo y luego si Disc>0 calculo el otro. Alteré un poco el orden de tu código pero creo que no hay problema.

Haces:
theta = arctan((v0 * v0 + raiz(Disc)) / (g * DistanciahastaDestinoXY))
DistanciahastaRed = DistanciahastaDestinoXY * abs(RedY - BallY) / abs(DistanciahastaDestinoY)
TiempoHastaRedTheta = (DistanciahastaRed) / (v0 * cos(theta))

Hice:
Código
  1. DistanciahastaRed = DistanciahastaDestinoXY*Math.abs(RedZ-BallY)/Math.abs(DistanciahastaDestinoY);
  2. // Le he llamado RedZ a lo que has llamado RedY.
  3. theta = Math.atan((AlexFuerzadetiros*AlexFuerzadetiros+Math.sqrt(Disc))/(Gravedad*DistanciahastaDestinoXY));
  4. TiempoHastaRedTheta = (DistanciahastaRed)/(AlexFuerzadetiros*Math.cos(theta));
  5. AlturaEnRedTheta = BallZ+AlexFuerzadetiros*Math.sin(theta)*TiempoHastaRedTheta-(Gravedad*TiempoHastaRedTheta*TiempoHastaRedTheta)/2;

Lo último te lo copié de esto:
AlturaEnRedTheta = h + v0 * sen(theta) * TiempoHastaRedTheta - (g * TiempoHastaRedTheta * TiempoHastaRedTheta) / 2

Luego lo que hago depende del caso como habías dicho:

Código
  1. if (Disc == 0) {
  2. // Sólo hay 1 ángulo Z posible.
  3. if (AlturaEnRedTheta>=18.6) {
  4. // Si la bola pasa la red con ese ángulo, usarlo.
  5. TiroRealizable = "1 ángulo, ok";
  6. Angulo = theta;
  7. } else {
  8. TiroRealizable = "1 ángulo, imposible";
  9. // Probar acercar destino supongo.
  10. Angulo = "Ninguno";
  11. }
  12. } else {
  13. // Disc>0, hay 2 angulos posibles, calcular el faltante.
  14. phi = Math.atan((AlexFuerzadetiros*AlexFuerzadetiros-Math.sqrt(Disc))/(Gravedad*DistanciahastaDestinoXY));
  15. TiempoHastaRedPhi = (DistanciahastaRed)/(AlexFuerzadetiros*Math.cos(phi));
  16. AlturaEnRedPhi = BallZ+AlexFuerzadetiros*Math.sin(phi)*TiempoHastaRedPhi-(Gravedad*TiempoHastaRedPhi*TiempoHastaRedPhi)/2;
  17. if (AlturaEnRedTheta>=18.6) {
  18. if (AlturaEnRedPhi>=18.6) {
  19. // Con ambos ángulos la bola pasa la red, usar el más bajo.
  20. if (AlturaEnRedTheta<AlturaEnRedPhi) {
  21. Angulo = theta;
  22. } else {
  23. Angulo = phi;
  24. }
  25. } else {
  26. // Sólo sirve el 1er ángulo.
  27. Angulo = theta;
  28. }
  29. } else if (AlturaEnRedPhi>=18.6) {
  30. // Sólo sirve el 2ndo ángulo.
  31. Angulo = phi;
  32. } else {
  33. // Ningún ángulo sirve.
  34. Angulo = "Ninguno";
  35. // Probar acercar destino supongo.
  36. }
  37. }
¿Todo bien?

Habías dicho:
Código:
phi = arctan((v0 * v0 - raiz(Disc)) / (g * DistanciahastaDestinoXY))
TiempoHastaRedPhi = (DistanciahastaRed) / (v0 * cos(phi))
AlturaEnRedPhi = h + v0 * sen(phi) * TiempoHastaRedPhi - (g * TiempoHastaRedPhi * TiempoHastaRedPhi) / 2

Yo ahí puse:
Código
  1. phi = Math.atan((AlexFuerzadetiros*AlexFuerzadetiros-Math.sqrt(Disc))/(Gravedad*DistanciahastaDestinoXY));
  2. TiempoHastaRedPhi = (DistanciahastaRed)/(AlexFuerzadetiros*Math.cos(phi));
  3. AlturaEnRedPhi = BallZ+AlexFuerzadetiros*Math.sin(phi)*TiempoHastaRedPhi-(Gravedad*TiempoHastaRedPhi*TiempoHastaRedPhi)/2;

Luego dices:
Código:
VelocidadAdelante = v0 * cos(angulo)
VelocidadArriba = v0 * sen(angulo)

// Esta variable es redundante, pero clarifica lo que se esta haciendo
VelocidadZ = VelocidadArriba

Puse:
Código:
if (Angulo != "Ninguno") {
// Cálculo de las velocidades.
VelocidadAdelante = AlexFuerzadetiros*Math.cos(Angulo);
VelocidadArriba = AlexFuerzadetiros*Math.sin(Angulo);
// Esta variable es redundante, pero clarifica lo que se esta haciendo.
VelocidadZ = VelocidadArriba;

Dices:
Código:
si (DistanciahastaDestinoX == 0)
   BallYSpeed = VelocidadAdelante
   BallXSpeed = 0
sino
   AnguloPendiente = arctan(DistanciahastaDestinoY / DistanciahastaDestinoX)
   BallXSpeed = VelocidadAdelante * cos(AnguloPendiente)
   BallYSpeed = VelocidadAdelante * sen(AnguloPendiente)

Puse:
Código:
if (DistanciahastaDestinoX == 0) {
BallXSpeed = 0;
BallYSpeed = VelocidadAdelante*-1;
} else {
AnguloPendiente = Math.atan(DistanciahastaDestinoY/DistanciahastaDestinoX);
BallXSpeed = VelocidadAdelante*Math.cos(AnguloPendiente)*-1;
BallYSpeed = VelocidadAdelante*Math.sin(AnguloPendiente)*-1;
}
Los *-1 los quito si veo que los tiros van para atrás o algo.

Los cambios en la pantalla por el movimiento los hago así:
Código:
Tiempotranscurridodeltiro = Tiempotranscurridodeltiro+1;
BallX = BallXwhenstriked+BallXSpeed*Tiempotranscurridodeltiro;
BallY = BallYwhenstriked+BallYSpeed*Tiempotranscurridodeltiro;
BallZ = BallZwhenstriked+VelocidadZ*Tiempotranscurridodeltiro-(Gravedad*Tiempotranscurridodeltiro*Tiempotranscurridodeltiro)/2;

Veo que habías dicho:
x = v0 * cos(θ) * t
y = v0 * sen(θ) * t - (g * t2)/2

Y más recientemente:
BallZ = h + VelocidadZ * t - (g * t * t)/2

Ahí me maree. BallZ lo tengo igual parece, lo otro no y como es la perspectiva 2d me confundo.

Bueno, pruebo el código, grabo video y demás y te muestro el resultado.
...
De momento me da errores gráficos no sé bien por qué (la pantalla se agranda o se achica, me ha pasado otras veces cuando se ordena modificar el tamaño de un objeto inexistente). He probado con distintas fuerzas y obtuve casos de fuerza insuficiente y de 2 ángulos pero que ninguno sirve. Agregué más estados de la variable TiroRealizable para ver eso. No sé, voy a probar quitar el código e irlo poniendo de a poco a ver cual es el problema. O pruebo desde la versión anterior mejor.
...
Ya arreglé el tema de los gráficos pero sólo obtengo casos de fuerza insuficiente si le pongo muy poca o casos de "2 ángulos pero ninguno sirve".
Por ejemplo:
Gravedad = 0.01
RedZ = 18.6
AlexFuerzadetiros = 2.975
AlexX = 488
AlexY = 548
DistanciahastaDestinoX = 240.9
DistanciahastaDestinoY = 368
DistanciahastaDestinoXY = 439.837253992883
Parte = 78.333562890625
Disc = 66.960524890625
DistanciahastaRed = 632.744136586501
theta = 1.31809820149062
TiempoHastaRedTheta = 850.689542137363
AlturaEnRedTheta = -1122.89688542468
phi = 0.150652307511496
TiempoHastaRedPhi = 215.123727738993
AlturaEnRedPhi = -90.2989548532666
TiroRealizable = "2 ángulos, pero ninguno sirve"
Angulo = "Ninguno"
BallXwhenstriked = 521
BallYwhenstriked = 548
BallZwhenstriked = 45.04

Medio supongo que tiene que ver con esas alturas negativas en la red, voy a revisar si hice algo mal ahí y si es el caso edito el post medio pronto, sino es que no sé.
908  Programación / Programación General / Re: ¿Qué tipo de diagrama os parece más útil en el diseño de software? en: 23 Mayo 2023, 15:36 pm
Sólo uso diagramas si me resulta muy complicado entender el código.

¿No depende del tipo de programa que uno haga o el lenguaje que se use?

Hay programas en que no hay realmente un flujo sino muchas posibilidades, o estados, entonces parece que conviene escribir los estados y si en ciertos casos pueden cambiar, o cuando y en qué sentido, o al menos en personajes de videojuegos lo veo un poco así.
Del estado Quieto puede pasar a Caminando (<- o ->), Saltando (A), Atacando (S), aGachándose (flecha abajo) o Lanzando (D).
Del estado C puede pasar a Q, S, A, G o L.
De S: Q, SA o SL.
De A: Q o AG.
De G: Q, AG o LG.
De L: Q o LG.

Un ejemplo nada más, y en realidad suele ser más complicado, por ejemplo porque una cosa es el estado saltando y otra cayendo.

¿Puedes ayudarme con esto
https://foro.elhacker.net/foro_libre/iquestcomo_hacer_un_diagrama_de_flujo_de_elegir_desafios_en_juegos-t517881.0.html
?
909  Foros Generales / Dudas Generales / Re: Hola, creéis en el Bitcoin y en la app Inmediate Edge y todo eso y en un Borker o brocker? en: 22 Mayo 2023, 21:43 pm
¿Por qué tu tío quiere que se lo rellenes? ¿es manco, ciego o en eso eres más hábil que él?
910  Foros Generales / Dudas Generales / Re: Me hackearon el facebook en: 20 Mayo 2023, 16:57 pm
Alguien me ayuda a recuperar mi cuenta de facebook?,y que me enseñe a hackear o a inyectar archivos con virus que reseteen el cell
¿No quieres que te enseñen a ser millonario haciendo poco esfuerzo también? Puestos a pedir cosas que no tienen nada que ver una con la otra, digo, o sino quisiera que me expliques qué tiene que ver querer recuperar tu cuenta con lo otro que dijiste, porque si me roban y fuese a la policía pediría que me ayuden a recuperar lo que me robaron, no también que me enseñen a robar, en todo caso que me enseñen a que no me roben o a robarle al que me robó ¿pero tú conoces al que te hackeó? También entiendo que esto no es la policía, pero en fin, como que no le vi mucho sentido o conexión al 2ndo y 3er pedido, más bien parece "quiero aprender a hacer maldades pero no me van a enseñar si lo pido a menos que diga una buena excusa".

Disculpa si es indebido que no confíe en ti, pero tampoco he dicho que realmente quieras hacer maldades, sólo que me parece.
Páginas: 1 ... 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 [91] 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 ... 243
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines