para ejemplos descargar comandos codigos botones animate acciones actionscript-3 flash actionscript

ejemplos - ActionScript 3, Cómo hacer que el personaje salte por más tiempo



codigos actionscript 3.0 para flash (1)

Estoy haciendo un juego de plataformas en Flash (AS3) y el código que tengo a continuación funciona. Quiero que mi personaje salte lo suficientemente alto como para dejar que llegue el momento de alcanzar una plataforma. El único problema con el siguiente código es la velocidad a la que salta hacia arriba y hacia abajo y la altura del salto. La barra espaciadora es lo que activa la función para ejecutar.

¡Por favor ayuda como lo apreciaría mucho! :)

Player.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey); stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_SetKeyPressed); stage.addEventListener(KeyboardEvent.KEY_UP, fl_UnsetKeyPressed); function fl_MoveInDirectionOfKey(event:Event) { if (spacePressed){ var gravity:Number = 9.8; var jumping:Boolean = false; var jumpVar:Number = 0; if(jumping != true) { jumpVar = -70; jumping = true; } if(jumping) { spacePressed = false; Player.y += jumpVar; jumpVar += gravity; } Player.addEventListener(Event.ENTER_FRAME, drop); function drop(event:Event) { Player.y -= jumpVar; jumpVar -= gravity; if(Player.y > 350){ Player.y = 350; } } Player.removeEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey); Player.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey); /*var frameNumb:Number = 0; Player.addEventListener(Event.ENTER_FRAME, jumpup); spacePressed = false; function jumpup(event:Event) { while(frameNumb < 30){ spacePressed = false; Player.y -= 1; frameNumb += 0.5; } Player.removeEventListener(Event.ENTER_FRAME, jumpup); Player.addEventListener(Event.ENTER_FRAME, jumpdown); function jumpdown(){ while(frameNumb > 0){ spacePressed = false; Player.y += 1; frameNumb -= 0.5; } } }*/ } if (leftPressed) { Player.x -= speed; Player.gotoAndStop("left"); } if (rightPressed) { Player.x += speed; Player.gotoAndStop("right"); } }

Gracias


Su uso de 9.8 para la gravedad es metros por segundo por segundo. Dado que drop () se ejecuta en cada fotograma, obtendrás una gran gravedad de avance rápido, a menos que el programa haga solo 1 FPS. Entonces, suponiendo que quieras más fluidez que 1 FPS, considera hacer

jumpVar += gravity/fps;


Sin embargo, para obtener la velocidad exacta requerida para elevarlo a una altura, creo que el cálculo es ...

initialVelocityInMetersPerSecond = Math.sqrt( 2 * gravity * metersToJump )

Entonces, en lugar de jumpVar = -70, harías algo como ...

// get posititive distance since we''ll use to get a square root var metersToJump:Number = Player.y - platform.y; jumpVar = -Math.sqrt( 2 * gravity * metersToJump );

... y luego en el controlador ENTER_FRAME ...

Player.y += jumpVar / fps; jumpVar += gravity / fps;

De su ejemplo no es el caso, pero si coloca la plataforma debajo del reproductor, ¡no funcionará ya que no puede obtener la raíz de un número negativo!

En mi código de ejemplo, no estoy solucionando la altura de la plataforma, por lo que la forma de decidir sobre la plataforma objetivo es un asunto completamente separado.