PFM: Doble salto

En esta entrada implementaremos el doble salto en el personaje. Esto le permitirá realizar un salto adicional cuando se encuentre suspendido en el aire. Esta mecánica es frecuente en los videojuegos (aunque ciertamente poco realista), pues aporta más variedad y posibilidades al movimiento del personaje.

Para implementar el doble salto modificaremos la clase PFMPawn.

PFMPawn

PFMPawn extiende de la clase UDKPawn, que ya tiene algunas variables declaradas útiles para realizar el doble salto (Los personajes de UT pueden efectuarlo). Si tendremos que declarar la siguiente variable adicional para esta implementación.

var float DoubleJumpThreshold;      // Máxima velocidad absoluta a la que se permite hacer doble salto

A continuación añadimos las siguientes funciones, sobreescribiendo su comportamiento por defecto:

// Decide si puede realizarse el doble salto
function bool CanDoubleJump()
{
	return ((MultiJumpRemaining > 0) && (Physics == PHYS_Falling) && bReadyToDoubleJump);
}

// Saltar
function bool DoJump(bool bUpdating)
{
    // Doble salto
    if ( !bUpdating && CanDoubleJump()&& (Abs(Velocity.Z) < DoubleJumpThreshold) && IsLocallyControlled() )
	{
		if ( PlayerController(Controller) != None )
		{
			PlayerController(Controller).bDoubleJump = true;
        }
		DoDoubleJump(bUpdating);      // Efectúa el doble salto
		MultiJumpRemaining -= 1;      // Reduce el número de saltos restantes
		return true;
	}

    // Salto normal
    if (bJumpCapable && (Physics == PHYS_Walking))
	{
        // Salto
        if ( bIsWalking )
			Velocity.Z = Default.JumpZ;
		else
			Velocity.Z = JumpZ;

        // Corrección en caso de estar sobre una plataforma ascendente
		if (Base != None && !Base.bWorldGeometry && Base.Velocity.Z > 0.f)
		{
			if ( (WorldInfo.WorldGravityZ != WorldInfo.DefaultGravityZ) && (GetGravityZ() == WorldInfo.WorldGravityZ) )
			{
				Velocity.Z += Base.Velocity.Z * sqrt(GetGravityZ()/WorldInfo.DefaultGravityZ);
			}
			else
			{
				Velocity.Z += Base.Velocity.Z;
			}
		}

		SetPhysics(PHYS_Falling);
		bReadyToDoubleJump = true;    // Puede hacerse el doble salto
		return true;
	}

	return false;
}

// Doble salto
function DoDoubleJump(bool bUpdating)
{
    Velocity.Z = JumpZ + MultiJumpBoost;    // Se hace el salto, con el Boost añadido
	SetPhysics(PHYS_Falling);
}

// Aterrizaje
event Landed(vector HitNormal, actor FloorActor)
{
	local vector Impulse;

	Super.Landed(HitNormal, FloorActor);

	if (DynamicSMActor(FloorActor) != None)
	{
		DynamicSMActor(FloorActor).StaticMeshComponent.AddImpulse(Impulse, Location);
	}

	if ((MultiJumpRemaining < MaxMultiJump) || Velocity.Z < -2 * JumpZ)
	{
		// Si se estaba haciendo salto doble o la velocidad de caida es muy alta se ralentiza mucho al jugador
		Velocity.X *= 0.1;
		Velocity.Y *= 0.1;
	}
	else
	{
        // Se ralentiza menos
    	Velocity.X *= 0.6;
    	Velocity.Y *= 0.6;
    }

    // Reset Multijump
	MultiJumpRemaining = MaxMultiJump;
	bReadyToDoubleJump = false;
}

  • CanDoubleJump: Determina si se puede realizar el doble salto, realizando algunas comprobaciones.
  • DoJump: Esta es la función que se llama cuando se pulsa el botón de saltar. En este caso estamos sobreescribiendola, pues ya existe en UDKPawn, y añadiendo funcionalidad para realizar el doble salto, además del salto normal.
  • DoDoubleJump: Es la función que efectúa realmente el salto doble, llamada desde DoJump cuando es necesario.
  • Landed: Este evento es invocado cuando el personaje toca el suelo, por lo que lo usamos para hacer ajustes y resetear las variables del salto doble.

Finalmente en las defaultproperties, damos valores a las variables utilizadas.


    bCanDoubleJump=true         //Doble salto
    MaxMultiJump=1              //Máximo de saltos dobles
	MultiJumpRemaining=1        //Saltos restantes
	MultiJumpBoost=-45.0        //Impulso extra en doble salto
    DoubleJumpThreshold=320.0   //Máxima velocidad absoluta a la que se permite el doble salto

Con esto ya tenemos implementado el sistema de salto doble. A saltar!


Banner Blog

Anuncios

Un pensamiento en “PFM: Doble salto

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s