Jump to content

[tut] Velocity


Recommended Posts

Geplaatst: (bewerkt)

Tutorial: Velocity

Wat is velocity?

Velocity is de hoeveelheid x, y, z coords van de huidige positie waarnaar de speler zich beweegt ik geef een voorbeeld:

Speler: X: 2540.0 Y: 1250.0 Z: 10.0

De speler gaat nu bijvoorbeeld in een auto beginnen rijden.

Velocity: X: 5.0 Y: 2.0 Z: 0.0

X+X(Velocity) = 2545.0 Y+Y(Velocity) = 1252 Z+Z(Velocity) = 10.0

De speler zal dus eindigen op die coords als de huidige actie niet onderbroken word de velocity past zich de hele tijd aan, als je stil staat is het vanzelfsprekend dat alles in de velocity op 0 staat.

Functies

SetPlayerVelocity(playerid, Float:x, Float:y, Float:z);

Je kan met deze functie handmatig een speler zijn velocity instellen, dit werkt enkel als de speler te voet is.

SetVehicleVelocity(vehicleid, Float:x, Float:y, Float:z);

Stel de velocity van een voertuig in.

GetPlayerVelocity(playerid, &Float:x, &Float:y, &Float:z);

Verkrijg de velocity van een speler en slaag deze op.

GetVehicleVelocity(vehicleid, &Float:x, &Float:y, &Float:z);

Verkrijg de velocity van een voertuig en slaag deze op.

Voorbeelden

Je kan met velocity een speler in de lucht laten springen net als een voertuig ik geef een voorbeeld van hoe je een /jump commando maakt:

// Bij OnPlayerCommandText
if (!strcmp("/jump", cmdtext)) // commando /jump
{
   	if(IsPlayerInAnyVehicle(playerid)) // Kijk of de speler in een voertuig zit.
   	{
           	SetVehicleVelocity(GetPlayerVehicleID(playerid), 0.0, 0.0,3); // Laat voertuig springen.
   	}
   	else
   	{
           	SetPlayerVelocity(playerid,0.0,0.0,25); // Laat speler springen.
   	}
   	return 1;
}

Een speedboost functie die ook werkt te voet:

// Bij OnPlayerCommandText
if (!strcmp("/speed", cmdtext)) // commando /jump
{
   	new Float:x, Float:y, Float:z;
   	if(IsPlayerInAnyVehicle(playerid)) // Kijk of de speler in een voertuig zit.
   	{
           	GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z); // Haal de huidige speler velocity op.
           	SetVehicleVelocity(GetPlayerVehicleID(playerid), x*1.2, y*1.2, z*1.2); // Stel voertuig velocity in (*1.2)
   	}
   	else
   	{
           	GetPlayerVelocity(playerid,x,y,z); // Haal de huidige speler velocity op.
           	SetPlayerVelocity(playerid, x*1.2, y*1.2, z*1.2); // Stel speler velocity in (*1.2).
   	}
   	return 1;
}

Snelheid (in kmh) ophalen van de speler (met dank aan Wanted):

stock GetPlayerSpeed(playerid) // zet dit vanonder in je gamemode!
{
   	new Float:X, Float:Y, Float:Z;
   	if(IsPlayerInAnyVehicle(playerid))
   	{
           	GetVehicleVelocity(GetPlayerVehicleID(playerid), X, Y, Z);
           	return floatround(floatmul(floatmul(floatsqroot(floatpower(floatabs(X), 2) + floatpower(floatabs(Y), 2) + floatpower(floatabs(Z), 2)), 100), 1.621371192), floatround_round);
   	}
   	else
   	{
           	GetPlayerVelocity(playerid, X, Y, Z);
           	return floatround(floatmul(floatmul(floatsqroot(floatpower(floatabs(X), 2) + floatpower(floatabs(Y), 2) + floatpower(floatabs(Z), 2)), 100), 1.621371192), floatround_round);
   	}
}

// voorbeeld om snelheid voor speler op te halen.
new Str[128];
format(Str, sizeof(Str), "Je rijd nu %d kilometer per uur!", GetPlayerSpeed(playerid));
SendClientMessage(playerid, Str);
return 1;

Mijn tutorial is nu afgelopen, heb je ideeën of vragen, meld het in dit topic.

Bewerkt: door megadreams
Geplaatst:

Nice tut!

Vraagje: als je /speed doet rij je dan opeens 200 km per uur? dus speed boost?

Verder mooie tut! :)

Geplaatst: (bewerkt)

Dan rij je ongeloofelijk snel vooruit, maar dan ook enkel vooruit er word bij je huidige velocity wat bijgeteld.

Bewerkt: door megadreams
Geplaatst:

Dan rij je ongeloofelijk snel naar de coords die de velocity zal aanduiden.

o.o maar kan je ook met velocity iets maken waar je 200 km rijd? en dat je dat met alt moet doen?

Geplaatst:

Dat gaat, je kan zelfs een speedometer maken dankzij de velocity, hier is op de wiki van sa-mp een tut/voorbeeld voor met een button een speedboost en jump te maken:

Samp-Wiki

Geplaatst:

AANVRAAG: Het herstellen van de indentatie, deze word verpest door het forum systeem, en ik krijg die op geen enkele manier goed.

Natuurlijk wil ik dat wel even voor je doen. :D

// Bij OnPlayerCommandText
if (!strcmp("/jump", cmdtext)) // commando /jump
{
if(IsPlayerInAnyVehicle(playerid)) // Kijk of de speler in een voertuig zit.
{
	SetVehicleVelocity(GetPlayerVehicleID(playerid), 0.0, 0.0,3); // Laat voertuig springen.
}
else
{
	SetPlayerVelocity(playerid,0.0,0.0,25); // Laat speler springen.
}
return 1;
}

// Bij OnPlayerCommandText
if (!strcmp("/speed", cmdtext)) // commando /jump
{
new Float:x, Float:y, Float:z;
if(IsPlayerInAnyVehicle(playerid)) // Kijk of de speler in een voertuig zit.
{
	GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z); // Haal de huidige speler velocity op.
	SetVehicleVelocity(GetPlayerVehicleID(playerid), x*1.2, y*1.2, z*1.2); // Stel voertuig velocity in (*1.2)
}
else
{
	GetPlayerVelocity(playerid,x,y,z); // Haal de huidige speler velocity op.
	SetPlayerVelocity(playerid, x*1.2, y*1.2, z*1.2); // Stel speler velocity in (*1.2).
}
return 1;
}

Verder is het een makkelijke tutorial voor beginners, die nog niets van Velocity snappen.

Geplaatst:

Zou je kunnen vertellen he je de snelheid in kilometers berekent?

Daarvoor heb ik een handige functie gemaakt. :puh:

Plaats onderstaande code in je gamemode (NIET in een andere functie).

stock GetPlayerSpeed(playerid)
{
new Float:X, Float:Y, Float:Z;
if(IsPlayerInAnyVehicle(playerid))
{
	GetVehicleVelocity(GetPlayerVehicleID(playerid), X, Y, Z);
	return floatround(floatmul(floatmul(floatsqroot(floatpower(floatabs(X), 2) + floatpower(floatabs(Y), 2) + floatpower(floatabs(Z), 2)), 100), 1.621371192), floatround_round);
}
else
{
	GetPlayerVelocity(playerid, X, Y, Z);
	return floatround(floatmul(floatmul(floatsqroot(floatpower(floatabs(X), 2) + floatpower(floatabs(Y), 2) + floatpower(floatabs(Z), 2)), 100), 1.621371192), floatround_round);
}
}

Voorbeeld van hoe je de functie dan kan gebruiken:

new Str[128];
format(Str, sizeof(Str), "Je rijd nu %d kilometer per uur!", GetPlayerSpeed(playerid));
SendClientMessage(playerid, Str);
return 1;

MVG,

Wanted

Geplaatst:

Daarvoor heb ik een handige functie gemaakt. puh2.gif

Plaats onderstaande code in je gamemode (NIET in een andere functie).

CODE

Voorbeeld van hoe je de functie dan kan gebruiken:

CODE

MVG,

Wanted

Ik heb dat als voorbeeld in de tutorial geplaatst ;)

Geplaatst:

Hallo!

Ik had nog een paar vragen nadat ik de speedcheckdinges heb zitten doorlezen/proberen te begrijpen.

Het betreft deze line:

floatround(floatmul(floatmul(floatsqroot(floatpower(floatabs(X), 2) + floatpower(floatabs(Y), 2) + floatpower(floatabs(Z), 2)), 100), 1.621371192), floatround_round);

Ik snap dat ik er niets van hoef te snappen, maar toch wil ik er wat van snappen :)

Na wat 'onderzoek' gedaan te hebben op wiki.sa-mp.com, ben ik tot de volgende conclusie's gekomen:

Floatround = Float Afronden

Floatmul = Float x Float

Floatpower = Float x Getal

Floatround_round = afronden naar boven (hoort bij Floatround)

Klopt dit, en wat zijn dan Floatsqroot en Floatabs? Ze staan wel op de wiki, maar hier begrijp ik bijster weinig van.

Hartelijk dank als je me kan antwoorden :)

Geplaatst: (bewerkt)

Floatsqroot is volgens mij de wortel ergens van uitrekenen, en Floatabs geeft de absolute waarde van een float.

EDIT: Floatround_round = afronden naar het dichtstbijzijnde ronde getal (hoort bij Floatround)

Bewerkt: door Wanted
Geplaatst: (bewerkt)

Floatsqroot is volgens mij de wortel ergens van uitrekenen, en Floatabs geeft de absolute waarde van een float.

EDIT: Floatround_round = afronden naar het dichtstbijzijnde ronde getal (hoort bij Floatround)

Oké, hartelijk dank :)

[offtopic]

jippie, ben een autodief :)

[/offtopic]

Bewerkt: door VonLeeuwen

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...