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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Mensajes
Páginas: 1 ... 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [55] 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ... 188
541  Programación / Programación General / Re: Ayuda con cálculos para que la trayectoria de una pelota cumpla ciertas condiciones. en: 23 Noviembre 2022, 10:51 am
Esto se resuelve con cálculo de parábolas. Si entiendo bien, lo que quieres hacer es averiguar cuánta "fuerza" en x y en y debes ejercer para que la pelota caiga en un punto específico (y obviamente, que pase la red) ¿no?
Y en z.

Citar
En tu mensaje no indicas que la pelota pueda hacer curva en el eje x
¿Como sucede aquí:
https://www.youtube.com/watch?v=yDIWBPwzi_0
?
Por ahora no.

Citar
no hay necesidad de complicarte usando 3 dimensiones al hacer los cálculos, cuando en realidad es un problema de sólo 2 dimensiones
Pero son 3 velocidades a calcular...

Citar
El trayecto que recorre depende de la velocidad inicial, (lo que llamas fuerza), de su ángulo, y de la gravedad (lo que llamas "velocidad" de caída). Recalco lo de velocidad inicial, puesto que la fuerza es otra cosa y no se relaciona directamente con la velocidad. En tu programa la puedes seguir llamando fuerza sin problemas, pero aquí usaremos el término adecuado.
¿Me puedes dar más info?

Citar
También hay que aclarar que no se distribuye de la manera en que piensas
Más o menos lo tengo claro sí, hace años un profesor de matemática me dijo que yo estaba contando mal, usando el método del taxista, me explicó y más o menos entendí.
Lo que dije fue simplificando.

Citar
la velocidad total no es igual a la suma de las velocidades horizontal y vertical
¿Tampoco en caso de que se dedique el 100% a una velocidad sola?

Citar
g es la gravedad
Por las dudas: Mi "simulación" de la gravedad funciona así:
https://foro.rinconmatematico.com/index.php?topic=51754.msg205838#msg205838
¿Es como en la realidad? ¿cómo es en la realidad?

Citar
Ojo: si la distancia a recorrer es muy larga y tenemos poca "fuerza", puede darse el caso de que sea imposible alcanzar el destino.
Lo tenía en cuenta.

Citar
También aclaro que para simplificar he hecho algunas suposiciones basándome en tu mensaje (por ejemplo, no especificas si hay variaciones en la altura inicial)
No me di cuenta de especificarlo: Sí, puede variar.
Pídeme lo que creas necesario.

Citar
aunque la posición de la red sea fija, en cada tiro, si cambia la posición inicial de la pelota y/o el destino, la distancia hacia la red también cambiará
Correcto.

Citar
Veo que tienes la variable DistanciahastaRed, aunque no sé si la calculas con cada tiro
Es la idea, aunque aún no la apliqué. Por las dudas: Esa distancia la calculo usando sólo la distancia Y. No sé si así sirve.


Perdona pero no me cierra mucho que resuelvas el problema usando sólo 2 dimensiones, además de que calculas 2 velocidades y yo necesito 3, o al menos con 2 no veo cómo puede funcionar.

Antes de intentar aplicar tu método decime qué piensas de esto (me lo dijeron hace tiempo o le agregué Z basado en lo que me habían dicho):
Código
  1. Norma = Math.sqrt(DistanciahastaDestinoX*DistanciahastaDestinoX+DistanciahastaDestinoY*DistanciahastaDestinoY+BallZ*BallZ);
  2.  
  3. BallXSpeed = DistanciahastaDestinoX/Norma*-AlexFuerzadetiros;
  4.  
  5. BallYSpeed = DistanciahastaDestinoY/Norma*-AlexFuerzadetiros;
  6.  
  7. BallZSpeed = BallZ/Norma*-AlexFuerzadetiros;
  8.  

AlexFuerzadetiros es lo que antes llamé AlexFuerza.

BallZ es lo mismo que decir DistanciahastaDestinoZ ya que el destinoZ es 0 (el suelo) y BallZ es la altura a la que está la pelota, es la distancia al suelo...

Este proceso me da buenos resultados AUNQUE como podrás deducir no cumple todas las condiciones.
La 3 (pasar por encima de la red) no la cumple a menos que el jugador estuviera muy cerca de la red o algo así.
La 4 (caer en la cancha rival) no la cumple si la fuerza es muy baja, pero también ocurre porque el método no tiene en cuenta que la pelota cae +0.01 por segundo.
Lo que pasa con la 5 (caer en cierto punto) es muy similar a lo que pasa con la 4.

Bueno ¿qué opinás de este método? ¿va bien encaminado y necesita ajustes, o hacer esos ajustes es más complicado que usar tu método? Es que me supera. Igual lo intentaré aplicar próximamente a ver qué resulta.

Por si te interesa te dejo lo que tengo hecho del juego:
https://workupload.com/file/WDjGSMhbSje
Es un rar con un exe dentro. Te pasaría un swf en vez de eso pero dudo que lo puedas reproducir. Está enlentecido porque intento ver claramente algunas cosas.
Etapa 1: Te movés con las flechas del teclado. Al presionar la tecla A, eleva la pelota y pasa a la etapa 2.
Etapa 2: Al presionar A de nuevo, saca. Si la pelota vuelve a la mano (si no presionas A antes de que pasen algunos segundos), vuelve a la etapa 1.
Cliqueando en el botón Reset o presionando Space vuelve a empezar.
542  Foros Generales / Foro Libre / Re: Dudas sobre el comunismo, o de lo que algunos llaman comunismo. en: 23 Noviembre 2022, 03:47 am
Leído, excepto el link.

Machacador, hago este tema porque siento deseo de entender estas cuestiones, cómo es posible que haya gente que las defienda (incluso en este foro, PARECE, no sé) y otros que las ataquen, es decir, eso pasa con muchas cosas, se ataca por ejemplo (yo incluso) a la idea de que un ser creó el universo de la mejor manera que podía crearlo, sin que tuviera que luchar contra otro ser, y otros la defienden o al ser en cuestión (dicen que es bueno y muy poderoso/inteligente), pero en general cuando hay así 2 bandos opuestos yo siento que uno tiene razón y lo apoyo, pero en este caso del comunismo...


En cuanto a tu amenaza, lo lamento, pero debo decir que en otro foro, de videojuegos, había gente que se dedicaba a abrir temas contra ciertos extrangeros y grupos políticos, cosa que era desagradable porque una cosa es querer informarse o incluso informar, pero otra es la propaganda excesiva, por lo que comprendo que los dueños del foro o quienes lo cuidan tengan cierto miedo de que empiece a suceder eso; quizá criticaste muy seguido o cuando no venía a cuento.
543  Foros Generales / Foro Libre / Dudas sobre el comunismo, o de lo que algunos llaman comunismo. en: 21 Noviembre 2022, 21:44 pm
1- ¿Crees que lo que pasó en Venezuela fue culpa de comunistas, o más bien de tontos (puede ocurrir que alguien sea de un grupo valioso o querible, por ejemplo un médico, pero que aún así cometa un error grave que produzca desastres en cuyo caso no es tanto culpa de los médicos o de la medicina, sino más bien de la torpeza de un individuo de ese grupo, no del grupo en sí). Argumenta tu respuesta.

2- ¿Es cierto que en Corea del Norte la gente vive casi como si fueran robots? Es decir, que no tienen libertad de quejarse sobre sus líderes, o más bien que si lo hacen se los castiga severamente. Además de que el acceso a Internet es muy limitado, entre otras limitaciones. ¿Cómo es el tema? ¿eso es comunismo? ¿hay gente que apoya eso? ¿por qué?

3- ¿A qué le llamas comunismo?

4- ¿Es cierto que hubo comunistas que mataron a más personas de las que mató el nazismo? O bueno, que mataron a muchos de su propio país por motivos injustificados. Un tal Stalin o Lenin, no sé. ¿Hay gente que apoya a esas personas? ¿por qué? ¿los consideras comunistas, por qué? ¿en general se dice que son comunistas o no?

Me interesan estos temas, en lo posible en este tema NO SE RESPONDAN ENTRE UDS, SOLO RESPÓNDANME A MÍ LAS PREGUNTAS QUE YO LES HAGA, sino probablemente lo cierren :-[

Si el tema rompe las reglas del foro por el simple hecho de hacerse, incluso aunque nadie lo responda, bueno, perdón, iba a hacer las preguntas por mensaje privado, pero me pareció más productivo hacerlas públicas. Si cierran el tema agradezco que me respondan por mensaje privado. Por las dudas, en lo posible lo que respondan aquí cópienlo así me lo pueden enviar por privado en caso de que lo borren.

Gracias.

---------------------------------------------------------------------------------------------------------

Bueno, voy a agregar algo.

Conozco a alguien que dice ser comunista marxista y que:
- El comunismo es cuando los medios de producción son del pueblo, no de un líder (o si son de un líder tiene que ser alguien que comparta la riqueza justamente, no que viva en el lujo mientras los demás no, como ocurre con el líder norcoreano y los Castro, según tengo entendido).
- Nunca se produjo. Esto no significa que los comunistas no hayan causado desastres o matado mucha gente, pero... alguna cosa sí significa, como que que no hicieron esas cosas estando en el poder o desde el comunismo, sino más bien intentando producirlo, como cuando los antimonarcas lucharon contra promonarcas.

No entiendo por qué él y supongo que otros insisten en usar la palabra comunismo para referirse a algo que hoy en día me parece que se interpreta que es otra cosa, sería otra de mis dudas, por qué hacen eso.
Yo solía defender la democracia, pero ya no, porque empezó a parecerme inútil luchar contra la costumbre: Democracia se supone que es cuando el pueblo puede crear leyes, debatirlas, votarlas, etc, no "democracia representativa" en que uno elige representantes o líderes y luego no hace o no puede hacer un caraj*, pero ahora por democracia se entiende eso, y para referirse a lo otro hay que decir "democracia directa".
Bueno, podrían decir "comunismo sin líderes", para distinguirse de lo que supongo que no es lo que apoyan, pero como se habrá visto no tengo claro cómo cada uno llama a las cosas o le parece bien llamarles.

Y por cierto, yo no tengo una postura definida en cuanto a si los medios de producción deberían ser del pueblo o no, y no creo que democracia directa sea lo mismo que comunismo (al menos como lo entiende la persona que comenté) ya que en ella no necesariamente los MP son del pueblo.

De lo dicho yo apoyo:
- La democracia directa, a menos que se convierta en nazismo por ejemplo, pero es un riesgo que creo que debe correrse. Igual, la democracia común también implica esos riesgos.
- La libertad de quejarse sin que se castigue por ello al que se queja (mientras no sea con propaganda que te la metan hasta en la sopa).
- La libertad de acceder a las páginas que a cada cual se le de la gana (bah, esto claro que no puede ser tan así, lo típico es prohibir las violaciones a menores por ejemplo y que nadie se ponga a ver esas cosas, pero por ejemplo me parece mal que prohíban ciertos videítos por tener sangre o cosas insignificantes).

Otras cosas no me doy cuenta, el derecho a vivir sí por ejemplo... pero bueno, no veo claro qué más apoyo.

¿Debería haber un tope en cuanto a la riqueza que uno pueda tener?
544  Foros Generales / Foro Libre / Re: Que puedo comprar con el black friday en Amazon? en: 19 Noviembre 2022, 19:11 pm
.
545  Programación / Programación General / Ayuda con cálculos para que la trayectoria de una pelota cumpla ciertas condiciones. en: 18 Noviembre 2022, 09:06 am
1- Su velocidad de caída aumenta 0.01 por segundo (segundo es un decir, es más bien una centésima de segundo).

2- Sus velocidades hacia los costados (X), adelante (Y, arriba) y arriba (Z, distancia con respecto al suelo) deben ser acordes a la fuerza del jugador que realiza el tiro. La velocidad hacia abajo aumentará, pero me refiero a las velocidades iniciales. Si por ejemplo tiene fuerza 4 y aplicó 3 para que la pelota avance 3 pixeles (es un decir) por segundo entonces no puede ser que la pelota se eleve 2 pixeles por segundo, ya que la fuerza que queda disponible es sólo 1.

3- Cuando llega a la red la Z de la pelota debe ser igual o mayor a cierto valor, es decir, se debe preestablecer un valor que represente la mínima Z con la que la pelota pasa por encima de la red sin tocarla, y cuando llegue a la red debe tener ese valor o uno mayor. En mi caso es 17.5 pero elijan el que gusten.

4- Debe caer en la cancha rival.

5- Las velocidades deben ser tales que la pelota caiga en cierto punto. Por ejemplo:


6- Su velocidad hacia adelante (Y) debe ser la máxima posible.


Es decir, se intenta que se cumpla una condición en tanto eso no cause que no se cumplan las otras.
3- Se quiere que la pelota pase por encima de la red, pero sin que ello implique que haya caído más/menos de lo que debe (condición 1) ni que se le haya aplicado más fuerza de la que se estableció como posible (condición 2). Si el jugador no tiene suficiente fuerza como para que se cumpla esta condición, no se cumple.
4- La oración anterior.
5- Lo mismo. Si para cumplir las condiciones anteriores es necesario que el tiro no vaya tan diagonal como se quiere, entonces no irá tan así, irá más bien verticalmente.
6- En tanto se cumplan las condiciones anteriores... Si la fuerza es 10 la velocidad Y no debe ser mayor que eso. Si queriendo asignar determinada fuerza a Y luego sin importar cuánta se asigne a Z la pelota no pasa la red o no cae en la cancha rival, entonces habrá que reducir la velocidad Y...


Por si los necesitan o quieren, les dejo los datos del caso (pero pueden inventar otros, lo que sí debe tenerse en cuenta es que no necesito simplemente averiguar 3 numeritos basados en otros, sino un método para averiguarlos teniendo en cuenta que los otros pueden variar, por ejemplo se puede elegir hacer un saque hacia al medio o puede que el personaje tenga distinta fuerza):
NOTA: Ignoren lo de "_level0."
  Variable _level0.AlexFuerza = 10
  Variable _level0.BallX = 417
  Variable _level0.BallY = 548
  Variable _level0.BallZ = 43.8
  Variable _level0.DistanciahastaDestinoX = 136.9
  Variable _level0.DistanciahastaDestinoY = 368
  Variable _level0.DistanciahastaRed = 248
  Variable _level0.DistanciahastaMinsafeBallZ = 26.3


Gracias.

Ah: El incremento de Y está invertido, es decir, entre más abajo más valor.
0,0________600,0
0,800______600,800
546  Programación / Scripting / Solucionado, lo dejo como reto: Optimizar código relacionado con presionar y soltar teclas. en: 16 Noviembre 2022, 18:15 pm
Quiero:

Momento 1:
El usuario puede mover un personaje hacia los costados con las teclas flechas o elevar una pelota con la tecla A. El 2ndo evento activa el momento 2.

Momento 2:
La pelota sube cada vez más lento y luego comienza a bajar cada vez más rápido, hasta llegar a su posición de inicio, evento que reactiva el momento 1. Si la tecla A se soltó y mientras la pelota está en el aire se represiona, se activa el momento 3.

Momento 1 repetido:
Si el usuario no soltó la tecla A, el evento de elevar la pelota no se activa, pero es posible mover al personaje.


Tengo:
Frame 1:
Código
  1. Teclafuesoltada = 0;
  2. // ///////////////////////////////////////////////////////
  3. // ///////////////////////  Alex  ////////////////////////
  4. // ///////////////////////////////////////////////////////
  5. function Alexmovetoserve () {
  6. if (Teclafuesoltada == 0) {
  7. // Se asume que el jugador elevó la pelota y no soltó la tecla, o que quizá empezó el juego con la tecla presionada.
  8. // Hasta que se capte que la tecla no está presionada no se podrá elevar la pelota.
  9. // Es para evitar que en caso de mantener la tecla presionada se eleve la pelota a penas vuelva a la mano.
  10. if (Key.isDown(65)) {
  11. } else {
  12. Teclafuesoltada = 1;
  13. // Ahora al presionar la tecla de nuevo Alex elevará la pelota.
  14. }
  15. if (Key.isDown(37)) {
  16. // Se mueve a la izquierda, si no se sale del límite.
  17. } else if (Key.isDown(39)) {
  18. // Se mueve a la derecha, si no se sale del límite.
  19. }
  20. } else if (Key.isDown(65)) {
  21. // Tecla A, lanza pelota hacia arriba.
  22. Funcencurso = "Alexelevandoball";
  23. Teclafuesoltada = 0;
  24. // Velocidad de subida y altura (todo al revés).
  25. BallZSpeed = -0.75;
  26. BallZ = -40;
  27. Alex.gotoAndStop(2);
  28.                gotoAndStop(3);
  29. } else if (Key.isDown(37)) {
  30. // Se mueve a la izquierda, si no se sale del límite.
  31. } else if (Key.isDown(39)) {
  32. // Se mueve a la derecha, si no se sale del límite.
  33. }
  34. }
  35. //
  36. function Alexelevandoball () {
  37. if (Teclafuesoltada == 0) {
  38. // Aún no se soltó la tecla.
  39. if (Key.isDown(65)) {
  40. } else {
  41. Teclafuesoltada = 1;
  42. // Ahora al presionarla de nuevo Alex saca.
  43. }
  44. } else if (Key.isDown(65)) {
  45. // La tecla fue soltada y vuelta a presionar; Alex saca.
  46. Alex.gotoAndStop(3);
  47.         gotoAndStop(3);
  48. }
  49. // Disminuye la velocidad de subida y varía la altura.
  50. // Varía el tamaño de la pelota.
  51. if (BallZ>=-40) {
  52. // Si queda muy abajo (BallZ muy alto), vuelve a la etapa Alexmovetoserve.
  53. Teclafuesoltada = 0;
  54. Funcencurso = "Alexmovetoserve";
  55. Alex.gotoAndStop(1);
  56. gotoAndStop(2);
  57. }
  58. }
  59. Funcencurso = "Alexmovetoserve";

Frame 2:
stop ();

Objeto en frame 2:
Código:
onClipEvent (enterFrame) {
    _level0.Alexmovetoserve();
}

Objeto en frame 3:
Código:
onClipEvent (enterFrame) {
    _level0.Alexelevandoball();
}


Lo malo es que la parte:
Código:
if (Key.isDown(37)) {
// Se mueve a la izquierda, si no se sale del límite.
} else if (Key.isDown(39)) {
// Se mueve a la derecha, si no se sale del límite.
}
...está presente 2 veces ¿alguna manera de mejorarlo que no sea crear una función y repetirla también?


Tenía esto:
Código
  1. Teclafuesoltada = 0;
  2. // ///////////////////////////////////////////////////////
  3. // ///////////////////////  Alex  ////////////////////////
  4. // ///////////////////////////////////////////////////////
  5. function Alexmovetoserve () {
  6. if (Teclafuesoltada == 0) {
  7. // Se asume que el jugador elevó la pelota y no soltó la tecla, o que quizá empezó el juego con la tecla presionada.
  8. // Hasta que se capte que la tecla no está presionada no se podrá elevar la pelota.
  9. // Es para evitar que en caso de mantener la tecla presionada se eleve la pelota a penas vuelva a la mano.
  10. if (Key.isDown(65)) {
  11. } else {
  12. Teclafuesoltada = 1;
  13. // Ahora al presionar la tecla de nuevo Alex elevará la pelota.
  14. }
  15. } else if (Key.isDown(65)) {
  16. // Tecla A, lanza pelota hacia arriba.
  17. Funcencurso = "Alexelevandoball";
  18. Teclafuesoltada = 0;
  19. // Velocidad de subida y altura (todo al revés).
  20. BallZSpeed = -0.75;
  21. BallZ = -40;
  22. Alex.gotoAndStop(2);
  23.                gotoAndStop(3);
  24. } else if (Key.isDown(37)) {
  25. // Se mueve a la izquierda, si no se sale del límite.
  26. } else if (Key.isDown(39)) {
  27. // Se mueve a la derecha, si no se sale del límite.
  28. }
  29. }
  30. //
  31. function Alexelevandoball () {
  32. if (Teclafuesoltada == 0) {
  33. // Aún no se soltó la tecla.
  34. if (Key.isDown(65)) {
  35. } else {
  36. Teclafuesoltada = 1;
  37. // Ahora al presionarla de nuevo Alex saca.
  38. }
  39. } else if (Key.isDown(65)) {
  40. // La tecla fue soltada y vuelta a presionar; Alex saca.
  41. Alex.gotoAndStop(3);
  42.         gotoAndStop(3);
  43. }
  44. // Disminuye la velocidad de subida y varía la altura.
  45. // Varía el tamaño de la pelota.
  46. if (BallZ>=-40) {
  47. // Si queda muy abajo (BallZ muy alto), vuelve a la etapa Alexmovetoserve.
  48. Teclafuesoltada = 0;
  49. Funcencurso = "Alexmovetoserve";
  50. Alex.gotoAndStop(1);
  51. gotoAndStop(2);
  52. }
  53. }
  54. Funcencurso = "Alexmovetoserve";

...pero con eso ocurre que si uno deja presionada la tecla desde el evento 1, entonces al reactivarse ese momento no es posible moverse hasta que se suelte la tecla; quiero que se pueda.

Para lograrlo hice esto:
Código
  1. Teclafuesoltada = 0;
  2. // ///////////////////////////////////////////////////////
  3. // ///////////////////////  Alex  ////////////////////////
  4. // ///////////////////////////////////////////////////////
  5. function Alexmovetoserve () {
  6. // Se asume que el jugador elevó la pelota y no soltó la tecla, o que quizá empezó el juego con la tecla presionada.
  7. // Hasta que se capte que la tecla no está presionada no se podrá elevar la pelota.
  8. // Es para evitar que en caso de mantener la tecla presionada se eleve la pelota a penas vuelva a la mano.
  9. if (Key.isDown(37)) {
  10. // Se mueve a la izquierda, si no se sale del límite.
  11. } else if (Key.isDown(39)) {
  12. // Se mueve a la derecha, si no se sale del límite.
  13. } else if (Teclafuesoltada == 0) {
  14. if (Key.isDown(65)) {
  15. } else {
  16. Teclafuesoltada = 1;
  17. // Ahora al presionar la tecla de nuevo Alex elevará la pelota.
  18. }
  19. } else if (Key.isDown(65)) {
  20. // Tecla A, lanza pelota hacia arriba.
  21. Funcencurso = "Alexelevandoball";
  22. Teclafuesoltada = 0;
  23. // Velocidad de subida y altura (todo al revés).
  24. BallZSpeed = -0.75;
  25. BallZ = -40;
  26. Alex.gotoAndStop(2);
  27.                gotoAndStop(3);
  28. }
  29. }
  30. //
  31. function Alexelevandoball () {
  32. if (Teclafuesoltada == 0) {
  33. // Aún no se soltó la tecla.
  34. if (Key.isDown(65)) {
  35. } else {
  36. Teclafuesoltada = 1;
  37. // Ahora al presionarla de nuevo Alex saca.
  38. }
  39. } else if (Key.isDown(65)) {
  40. // La tecla fue soltada y vuelta a presionar; Alex saca.
  41. Alex.gotoAndStop(3);
  42.         gotoAndStop(3);
  43. }
  44. // Disminuye la velocidad de subida y varía la altura.
  45. BallZSpeed = BallZSpeed+0.01;
  46. BallZ = BallZ+BallZSpeed;
  47. setProperty (Alex.Ball, _y, BallZ);
  48. // Varía el tamaño de la pelota.
  49. BallZoom = 100+BallZ*-1;
  50. setProperty (Alex.Ball, _xscale, BallZoom);
  51. setProperty (Alex.Ball, _yscale, BallZoom);
  52. if (BallZ>=-40) {
  53. // Si queda muy abajo (BallZ muy alto), vuelve a la etapa Alexmovetoserve.
  54. Teclafuesoltada = 0;
  55. Funcencurso = "Alexmovetoserve";
  56. Alex.gotoAndStop(1);
  57. gotoAndStop(2);
  58. }
  59. }
  60. Funcencurso = "Alexmovetoserve";

...pero esto hace que mientras uno esté caminando, si se presiona A, el evento de A no se activa.


¡Ya se me ocurrió una solución y funcionó! ;-) Describir los problemas ayuda. Bueno, lo dejo como reto, si quieren les digo la solución.
547  Programación / Scripting / Activar evento con tecla y luego, si se suelta y vuelve a presionar, activar otro. en: 16 Noviembre 2022, 03:44 am
Lo que quiero hacer:

Un jugador de tenis que va a hacer un saque puede moverse hacia los costados y lanzar la pelota hacia arriba, con la tecla A.

Una vez lanzada, la pelota sube cada vez más lento, y luego baja cada vez más rápido, hasta que vuelve a la mano del jugador y se regresa a la etapa anterior. Pero si mientras la pelota está en el aire se presiona de nuevo la tecla, se realiza el saque.


Los problemas que me surgen:

1- Se presiona A, se eleva la pelota, el programa asume erróneamente que A se presionó de nuevo, y el saque es realizado instantáneamente, sin que el jugador pueda golpear la bola cuando está bien alta o en otra momento.
Esto sucede porque el code que uso tiene "si se presionó A elevar bola" y luego "si bola está en el aire y se presiona A realizar el saque", es decir, se presiona A e instantáneamente se chequea si se volvió a presionar, lo cual resulta siempre en sí.

2- Si mientras la bola cae se mantiene presionado A entonces instantáneamente se vuelve a elevar. No quiero eso. Quiero que se vuelva a elevar solo si se soltó la tecla y se volvió a presionar.

Intenté resolver esos problemas pero me surgieron otros.


Lo que tengo:
Código
  1. // Esto no tiene relevancia en el problema, lo pongo por poner el code completo.
  2. fscommand ("fullscreen", "true");
  3. AlexFuerzadepiernas = 10000;
  4. Alexwalkspeed = AlexFuerzadepiernas/10000;
  5. Alexwalkspeedonserving = AlexFuerzadepiernas/1000;
  6. AlexMinXposonserving = 408+Alexwalkspeedonserving;
  7. AlexMaxXposonserving = 512-Alexwalkspeedonserving;
  8. AlexX = 460;
  9. Teclafuesoltada = 0;
  10. // Eso sí es relevante, 0 es "no" y 1 es "sí".
  11. // ///////////////////////////////////////////////////////
  12. // ///////////////////////  Alex  ////////////////////////
  13. // ///////////////////////////////////////////////////////
  14. function Alexmovetoserve () {
  15.    if (Teclafuesoltada == 0) {
  16.        // Se asume que el jugador elevó la pelota y no soltó la tecla, o que quizá empezó el juego con la tecla presionada.
  17.        // Hasta que no se captre que no está presionada no podrá elevar la pelota.
  18.        // Es para evitar que en caso de mantener la tecla presionada se eleve la pelota a penas vuelva a la mano.
  19.        if (Key.isDown(65)) {
  20.        } else {
  21.            Teclafuesoltada = 1;
  22.            trace ("tecla se asume soltada durante move");
  23.            // Los trace son mensajes que hago aparecer en pantalla intentando descubrir qué error hay.
  24.            // Ahora al presionar la tecla de nuevo Alex elevará la pelota.
  25.        }
  26.    } else if (Key.isDown(65)) {
  27.        // Tecla A, lanza pelota hacia arriba.
  28.        Funcencurso = "Alexelevandoball";
  29.        // Función en curso, una idea que tuve para entender mejor cómo está el programa, pero no me sirvió por ahora.
  30.        trace ("inicia Alexelevandoball");
  31.        Teclafuesoltada = 0;
  32.        // Velocidad de subida y altura (todo al revés).
  33.        BallZSpeed = -0.75;
  34.        BallZ = -40;
  35.        Alex.gotoAndStop(2);
  36.        // Eso es para cambiar la pose del personaje, irrelevante en el problema.
  37.        gotoAndPlay (4);
  38.        // Esto es enredado de explicar, pero tampoco creo que sea relevante.
  39.    } else if (Key.isDown(37)) {
  40.        // Se mueve a la izquierda, si no se sale del límite.
  41.        if (AlexX>AlexMinXposonserving) {
  42.            AlexX = AlexX-Alexwalkspeedonserving;
  43.        } else {
  44.            AlexX = AlexMinXposonserving-Alexwalkspeedonserving;
  45.        }
  46.        setProperty (Alex, _x, AlexX);
  47.    } else if (Key.isDown(39)) {
  48.        // Se mueve a la derecha, si no se sale del límite.
  49.        if (AlexX<AlexMaxXposonserving) {
  50.            AlexX = AlexX+Alexwalkspeedonserving;
  51.        } else {
  52.            AlexX = AlexMaxXposonserving+Alexwalkspeedonserving;
  53.        }
  54.        setProperty (Alex, _x, AlexX);
  55.    }
  56. }
  57. //
  58. function Alexelevandoball () {
  59.    if (Teclafuesoltada == 0) {
  60.        trace ("tecla se asume presionada durante elevación");
  61.        // Aún no se soltó la tecla.
  62.        if (Key.isDown(65)) {
  63.            trace ("tecla se capta presionada durante elevación");
  64.        } else {
  65.            Teclafuesoltada = 1;
  66.            trace ("tecla soltada durante elevación");
  67.            // Ahora al presionarla de nuevo Alex saca.
  68.        }
  69.    } else {
  70.        if (Key.isDown(65)) {
  71.            // La tecla fue soltada y vuelta a presionar; Alex saca.
  72.            trace ("tecla se capta presionada durante elevación");
  73.            Alex.gotoAndStop(3);
  74.        }
  75.    }
  76.    // Disminuye la velocidad de subida y varía la altura.
  77.    BallZSpeed = BallZSpeed+0.01;
  78.    BallZ = BallZ+BallZSpeed;
  79.    setProperty (Alex.Ball, _y, BallZ);
  80.    // Varía el tamaño de la pelota.
  81.    BallZoom = 100+BallZ*-1;
  82.    setProperty (Alex.Ball, _xscale, BallZoom);
  83.    setProperty (Alex.Ball, _yscale, BallZoom);
  84.    trace ("ball se movió");
  85.    if (BallZ>=-40) {
  86.        // Si queda muy abajo (BallZ muy alto), vuelve al frame 1.
  87.        trace ("ball volvió a la mano");
  88.        Teclafuesoltada = 0;
  89.        Funcencurso = "Alexmovetoserve";
  90.        Alex.gotoAndStop(1);
  91.        gotoAndPlay (2);
  92.    }
  93. }
  94. // falta mostrar pelota elevándose, indicar dirección, y alex golpeando
  95. Funcencurso = "Alexmovetoserve";


Lo que obtengo:
- Aparece el mensaje
tecla se asume soltada durante move (está bien).
- El personaje se mueve correctamente.
- Al presionar A ocurre un error, aparecen estos mensajes:
inicia Alexelevandoball (está bien)
tecla se asume presionada durante elevación (está bien)
tecla se capta presionada durante elevación (está bien)
ball se movió (está bien)
tecla se asume soltada durante move ( :o)
- El personaje queda en la pose de elevando la bola (frame 2 de dicho objeto), pero ella no se eleva ni baja.
- El frame está en 2 o 3, y la función ejecutándose es la Alexmovetoserve (aunque como dije el personaje está en una pose que no debería en esta función).

Es decir, no entiendo qué pasa luego de "ball se movió".
Código:
trace ("ball se movió");
if (BallZ>=-40) {
// Si queda muy abajo (BallZ muy alto), vuelve al frame 1.
trace ("ball volvió a la mano");
Teclafuesoltada = 0;
Funcencurso = "Alexmovetoserve";
Alex.gotoAndStop(1);
gotoAndPlay (2);
}
Si ese if es true entonces debería aparecer el mensaje (trace) que dice ahí, cosa que no sucede así que asumo que es false. Acabo de probar crear una variable ahí y no la crea, esa parte del code no se ejecuta. Es más, si antes del if pongo trace de BallZ me da:
-40.74
está bien.

Bueno, pondré un trace al comienzo de la 2nda func a ver si se vuelve a ejecutar o qué onda.

Hecho, sólo se ejecuta 1 vez. Qué pasa luego, o por qué pasa, es un misterio



E D I T :

Simplifiqué el code dejando solo lo que puede causar el error, así:
Código:
Escena 1
   actions for fotograma 1
      function Alexmovetoserve () {
         trace ("inicia Hol");
         gotoAndStop (4);
      }
   actions for fotograma 2
      trace ("f2");
      Alexmovetoserve();
   actions for fotograma 3
      trace ("f3");
      Alexmovetoserve();
      gotoAndPlay (2);
   actions for fotograma 4
      trace ("f4");
   actions for fotograma 5
      trace ("f555555555555555555555555555555555555555");
      stop ();

Resultado:
f2
inicia Hol
f4

O sea, en el frame 2 ejecuta la función, va al frame 4, y se detiene ahí. Bien.

Ahora miren así:
Código:
Escena 1
   actions for fotograma 1
      Teclafuesoltada = 0;
      function Alexmovetoserve () {
         if (Teclafuesoltada == 0) {
            if (Key.isDown(65)) {
            } else {
               Teclafuesoltada = 1;
               trace ("tecl se asume soltada durante mov");
            }
         } else if (Key.isDown(65)) {
            trace ("inicia Hol");
            Teclafuesoltada = 0;
            gotoAndStop (4);
            // ese sto no funciona.
         }
      }
   actions for fotograma 2
      trace ("f2");
      Alexmovetoserve();
   actions for fotograma 3
      trace ("f3");
      Alexmovetoserve();
      gotoAndPlay (2);
   actions for fotograma 4
      trace ("f4");
      stop ();
   actions for fotograma 5
      trace ("f555555555555555555555555555555555555555");
      stop ();

Resultado:
f2
tecl se asume soltada durante mov
f3
f2
f3
NOTA: f2 y f3 se repiten hasta presionar A.
inicia Hol
f4
f2

O sea, en el frame 3 ejecuta la función, va al frame 4, y vuelve al 2. Uno podría pensar que es lógico porque en el f3 hay una instrucción de que vuelva al 2, pero si ya fue al f4 y ejecutó algo de ahí entonces eso de que ejecute algo restante del f3... bueno, no me había dado cuenta de que podía ser lógico... PERO si en el f4 pongo un stop entonces va al f2 y se detiene ahí, como si la instrucción stop modificara la supuesta restante gotoAndPlay(2)...
ADEMÁS ¿Por qué en el 1er code la función siempre se ejecuta en el f2 y en el 2ndo en la f3?

Bueno... la solución a este raro problema puede ser poner un if en el f3 para que vuelva al f2 solo si la función que se quiere ejecutar sigue siendo la misma.

Nunca tuve un problema como este porque solía poner códigos en los objetos; es paradójico que lo haya tenido precisamente porque decidí empezar a poner todo lo posible en la película raíz pensando que sino se ejecutarían muchos codes a la vez o que sería medio impredecible... Sucedió que igual sucedió algo impredecible.

Otra cosa: Normalmente uno no pone que una función se ejecute y que en el siguiente frame se ejecute otra vez y vuelva al anterior, pero haciéndolo así parece que sucedieran cosas más rápido que de la forma más "normal" o simple (poner código en un objeto y que se ejecute en caso de "enter frame"), por eso lo hago así. ¿Quizá hace que se ejecuten 2 frames en el tiempo en que solo se debería ejecutar 1?

 :huh:
548  Sistemas Operativos / Windows / Re: Puedo usar un emulador android en mi ordenador portátil del año 2010? en: 27 Octubre 2022, 20:51 pm
En el comentario que escribí yo estaba generalizando, evidentemente no lo decía por ese emulador que mencionaste, no te des por aludido. Solo digo que hay muchos emuladores fake, que son virus.
Y yo no dije que dijiste que el emulador que mencioné tenía virus, sólo que yo sí mencioné uno, no es que le haya dicho "googlea emulador de ds".

Citar
¿Esto que relación guarda con lo otro?
Que en ese caso, de algo fake, aparecían advertencias de que lo era. Con los emus puede que sea igual, digo.

Citar
No si será fake o no lo es. Yo he estado contando aquí y a mi me salen unos 93 géneros:

 - https://en.wikipedia.org/wiki/List_of_gender_identities
WTF, es un tema que alguien mencionó me pareció, en otro foro; yo busqué en español y me aparecían menos de 40.

Citar
De todas formas a mi lo que reconozca o deje de reconocer la ONU con respecto a los géneros y a cualquier otro tema sinceramente me da exactamente igual
Bien, pero no sé quién o quienes tienen el "conocimiento" oficial, o las leyes. Igual no me importa mucho, como te comenté fue simplemente que alguien lo mencionó en otro foro creo, y entonces yo estaba pensando un poco en eso.
549  Sistemas Operativos / Windows / Re: Puedo usar un emulador android en mi ordenador portátil del año 2010? en: 27 Octubre 2022, 00:15 am
si una persona no posee suficiente conocimiento sobre el tema de la emulación de consolas (como evidentemente es el caso) y se pone a buscar en Google un emulador que sirva para "X" consola, facilmente podría encontrarse con un emulador fake y acabar ejecutando un virus en su PC
Bueno pero, yo le dije el nombre del emulador, no me voy a poner a buscar a ver si sigue teniendo página oficial (ni siquiera sé si la tuvo, de hecho) y si está libre de virus, se supone que sí, y sino se supone que aparecerían en Google páginas diciendo que tiene regalitos. Ayer busqué sobre los supuestos 110 géneros reconocidos por la ONU y me aparecieron noticias de que eso era fake.
550  Sistemas Operativos / Windows / Re: Puedo usar un emulador android en mi ordenador portátil del año 2010? en: 26 Octubre 2022, 10:02 am
Pero se puede jugar en el pc a juegos Nintendo DS lite?
Te acabo de decir que no sé sobre eso de "lite", por lo que leí (poquísimo) es una consola más nueva pero los juegos son los mismos que el ds común y corriente, así que creo que sí.

La gran pregunta es ¿por qué no lo averiguas? Ya te respondió Enjuto Mojamuto, pero si hubieras googleado, descargado y probado el emulador que te dije, lo hubieras averiguado. No hagas preguntas que te puedes responder tú mismo, parecen tomadas de pelo.
Páginas: 1 ... 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [55] 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ... 188
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines