Szerző Téma: kocsi elõl vagy hátul (szerk)  (Megtekintve 2473 alkalommal)

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
kocsi elõl vagy hátul (szerk)
« Válasz #30 Dátum: 2014. március 28. - 18:07:09 »
0 Show voters
Idézetet írta: Kovacs_Richard date=1396025476\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"47376\" data-ipsquote-contentclass=\"forums_Topic


Ezzel pontosan azt csinálod...
 

new Float:X,Float:Y,Float:Z,vehid;
GetVehiclePos(vehid,X,Y,Z);

 
De az bonyolult megoldás, és szükséges hozzá minimum 360 lehetõség megadása. Lehet kevesebb is, de az a pontosság rovására menne. Tehát szerintem maradj az elsõ tanácsomnál, az objectes ellenõrzésnél.
 
[/quote]
az meg nem mûködik...mivel nem az aktuális pozícióját adja vissza hanem azt ahol létrehoztad...
 
[/quote]
Az objectesre értetted? Gondolom igen. Ha belegondolok, lehet, hogy ez tényleg így van. Pedig valami ilyesmi megoldást alkalmazott az egyik ismerõsöm. Akkor viszont nem tudom, hogyan. Marad a másik lehetõség. Ezt pedig tényleg nézd át:
 

Ez alapján meg tudod csinálni.
Térgeometria: Körbe menni a játékos körül
 
[/quote]

kocsi elõl vagy hátul (szerk)
« Válasz #31 Dátum: 2014. március 28. - 19:45:12 »
0 Show voters
vannak itt variációk irok ha jutottam valamire :)
szerk.:
Objectesre tudtok valami példával szolgálni?
« Utoljára szerkesztve: 2014. március 28. - 20:23:13 írta kriszrap »

kocsi elõl vagy hátul (szerk)
« Válasz #32 Dátum: 2014. március 31. - 20:17:45 »
0 Show voters
Objecttel szerintem felesleges megoldani.
Sinus, cosinussal egyszerûbben is megtudod csinálni, csupán csak a kocsi  pozíciója és irányát kell lekérdezned.
 
#define TAVOLSAG 3.0 //távolság a kocsi közepétõl. Írd át, mert csak egy random számot írtam be
new Float:angle, Float:pos[3];
GetVehiclePos(vehicleid, pos[0], pos[1], pos[2]);
GetVehicleZAngle(vehicleid, angle);
pos[0] += (TAVOLSAG * floatsin(-angle, degrees));//hozzáadjuk a lekért pozícióhoz a távolságot. (X tengely)
pos[1] += (TAVOLSAG * floatcos(-angle, degrees));//hozzáadjuk a lekért pozícióhoz a távolságot. (Y tengely)
//ha a csomagtartót akarod lekérdezni, akkor meg értelemszerûen kivonod a pozícióból

 
Természetesen a definiált távolság változhat, a kocsi típusától, mert minden kocsinak más a mérete. A méreteket meg szerintem letudod kérni a GetVehicleModelInfo()-val, majd kiszámítani vele a jármûvek távolságát a középpontól.
Nem teszteltem semmit, de mûködni kell!

kocsi elõl vagy hátul (szerk)
« Válasz #33 Dátum: 2014. március 31. - 21:08:57 »
0 Show voters
meglyikbõl vonnom melyiket hogy meg tudjam hátul van e ??
nem voltam soha se jó sin és cosinuszból:D (asse tudtam matekon mit számolunk ki vele igazán:(( )
távolsági középpontot hogy tom kiszámolni GetVehicleModelInfo val??
\"leközelebbi lekérdezés\" nél jó jönne mert beállitottam 2.0 (IsPlayerInRangeOfPoint) és ugye a kör sugara nem ér az orráig meg hátura ugy hogy ha a csomag tartót akarom kinyitni akkor már nem érzékeli azt hogy melyik kocsi vagyok.:(((
« Utoljára szerkesztve: 2014. március 31. - 21:24:08 írta kriszrap »

kocsi elõl vagy hátul (szerk)
« Válasz #34 Dátum: 2014. április 01. - 17:20:39 »
0 Show voters
Igazából annyi a távolság kiszámítása, hogy kiszámítod a kocsi hosszúságát, majd elosztod azt kettõvel, mert ugye a kocsi közepétõl kezdi a méretezést. Megírtam neked a kódot, mostmár csak át kell írnod, az remélem már menni fog
 
#include <a_samp>
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_SPRINT)
{
    new Float:angle, Float:pos[3], Float:X, Float:Y, Float:Z, Float:size;
    for(new i = 0; i < MAX_VEHICLES; i++)
{
   GetVehiclePos(i, pos[0], pos[1], pos[2]);
   GetVehicleZAngle(i, angle);
   if(IsPlayerInRangeOfPoint(playerid, 5.0, pos[0], pos[1], pos[2]))
   {
       GetVehicleModelInfo(GetVehicleModel(i), VEHICLE_MODEL_INFO_SIZE, X, Y, Z);
        size = VectorSize(X, Y, Z) / 2;
       pos[0] -= (size * floatsin(-angle, degrees));
      pos[1] -= (size * floatcos(-angle, degrees));
      SetPlayerPos(playerid, pos[0], pos[1], pos[2]);
   }
}
}
return 1;
}

 
Tesztelve, mûködik!

kocsi elõl vagy hátul (szerk)
« Válasz #35 Dátum: 2014. április 02. - 14:25:47 »
0 Show voters
Kicsi szájba rágósan leírnád hogy itt igazából mit csinál és hogy:DDD
(nem szeretem ha olyan kód van a modóm amit én nem értek )
 
 GetVehicleModelInfo(GetVehicleModel(i), VEHICLE_MODEL_INFO_SIZE, X, Y, Z);
                        size = VectorSize(X, Y, Z) / 2;
                       
                            pos[0] -= (size * floatsin(-angle, degrees));
                                pos[1] -= (size * floatcos(-angle, degrees));
                                SetPlayerPos(playerid, pos[0], pos[1], pos[2]);

 
[mod]Örülök, hogy pawn code tagbe akartad tenni a forráskódot. :thumbsup: Nem sokan veszik a fáradtságot. Viszont rosszul sült el a dolog, mert pawno-t adtál meg a code tagban, amely egy program, nem pedig pawn-t, amelyik a programozási nyelv. Amely egyben a kulcsszó a megfelelõ tag kitételéhez is. (Ezt adtad meg: [ code=pawno ]) Remélem nem baj, hogy javítottam :D #ModiMagyaráz LvL 999[/mod]
« Utoljára szerkesztve: 2014. április 02. - 15:07:58 írta Dfoglalo »

kocsi elõl vagy hátul (szerk)
« Válasz #36 Dátum: 2014. április 05. - 11:43:48 »
0 Show voters
Bocs, hogy ilyen késõn írok, de nem volt idõm válaszolni.
 

GetVehicleModelInfo(GetVehicleModel(i), VEHICLE_MODEL_INFO_SIZE, X, Y, Z); // lekéri a jármû méretét, majd az értékeket eltároljuk az X, Y,  Z változóba
size = VectorSize(X, Y, Z) / 2; // van 3 vektorunk (X, Y, Z). 0.3x-ben lett hozzáadva a VectorSize() függvény (ez nem azt jelenti, hogy eddig nem lehetett kiszámítani).
                  //Ez abban segít, hogy kitudd számítani a megkapott vektorok nagyságát.
                  //Jelen esetben a kocsi nagysága. Ugye lekértük a kocsi pozícióját és eltároltuk azt a pos[0] (X) és pos[1] (Y) változóba.
                  //Mivel a GetVehiclePos() a jármû közepét kéri le (mert ugyan nem a kocsi elejétõl szamolunk, hanem csak a közepétõl), így a kapott eredmény értéket el kell osztani a felével,
                  //hogy megkapd a megfelõ távolságot a csomagtartótól. A \"size\" változóba eltároljuk az értéket
pos[0] -= (size * floatsin(-angle, degrees)); //Kiszámítjuk a távolságot, mostmár csak a kocsi mögé kell rakni a playert. sinussal kiszámítjuk, hogy hol lesz a poz. az X tengelyen
pos[1] -= (size * floatcos(-angle, degrees)); //cosinussal kiszámítjuk hogy hol lesz a poz. az Y tengelyen
SetPlayerPos(playerid, pos[0], pos[1], pos[2]);//végül elteleportáljuk a playert

kocsi elõl vagy hátul (szerk)
« Válasz #37 Dátum: 2014. április 05. - 12:15:29 »
0 Show voters
na már kapisgálom:)
nagyon köszönöm:))
Zárok :)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal