-
Sziasztok, meggyőződésem hogy már volt egy ehhez hasonló kérdés a fórumon, viszont én sajnos nem tudtam megtalálni, ezért is folyamodnék ehhez a módszerhez.
A kérdést sajnos nem tudom pontosan megfogalmazni, ezért példát írok rá.
new Float: Pos[3];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
CreateObject(0, Pos[0], Pos[1], Pos[2], ...);
Hogy ha én nem azt szeretném, hogy közvetlenül a játékos pozíciójára hozza létre az objektet, hanem például öt egységgel arrébb, akkor melyik értékhez kellene hozzáadnom ötöt?
Értelemszerűen a játékostól abban az irányban öt egység, amerre éppen néz, ezért nem tudom eldönteni.
Előre is köszönöm a hasznos válaszokat.
-
Így?
new Float:Pos[4];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
GetPlayerFacingAngle(playerid, Pos[3]);
CreateObject(0, Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] + (5.0 * floatcos(-Pos[3], degrees)), Pos[2], 0, 0, 0);
Copy
-
Amit impreZZa úr írt, annak elvileg müködnie kéne, és így lehet pontos értéket megkapni. Illetve van egy másik módszer is ami ezen az elven alapul.
Szintén lekérdezed a FacingAngle-t és hogyha egy adott tartományban van akkor arra fele rakja az objektet. (0;-90) (-90;-180) stb... Azonban ez nem pontos érték.
Ezért érdemes suliban sin,cos,tg,ctg-t tanulni mert mindenhol jól jöhet :D
Illetve tömb helyett: new Float:Pos[4]; használj sima változókat, mivel a tömb be beletölteni a értékeket jobban terheli a rendszert mint ha sima változókba.
new Float:X,Float:Y,Float:Z,Float:A;
#EnumLogic
-
Valóban működik, már csak az lenne a kérdésem, hogy a matematika csodáival megoldható-e az, hogy a létrehozott objektet a CreateObject függvény utolsó három paraméterével felém forgassa el, tehát hogy velem szemben legyen?
Gondolom az ellentéte kell annak, amerre a játékos néz, de magamtól nem tudtam rájönni, hogy pontosan milyen értéket is kellene oda írni, illetve hogy melyik paraméternek kellene változtatni az értékét.
COMMAND:create(playerid)
{
new Float: Pos[4];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
GetPlayerFacingAngle(playerid, Pos[3]);
CreateObject(2063, Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] + (5.0 * floatcos(-Pos[3], degrees)), Pos[2], 0, 0, 0);
return 1;
}
Nem gond, ha esetleg nem megoldható.
A 2063-as objekttel dolgoztam, ami egy polcszerűség, ezt szeretném létrehozás után automatikusan felém forgatni.
Előre is köszönöm ismét a hasznos válaszokat, illetve köszönöm az előzőket is.
-
Amit impreZZa úr írt, annak elvileg müködnie kéne, és így lehet pontos értéket megkapni. Illetve van egy másik módszer is ami ezen az elven alapul.
Szintén lekérdezed a FacingAngle-t és hogyha egy adott tartományban van akkor arra fele rakja az objektet. (0;-90) (-90;-180) stb... Azonban ez nem pontos érték.
Ezért érdemes suliban sin,cos,tg,ctg-t tanulni mert mindenhol jól jöhet :D
Illetve tömb helyett: new Float:Pos[4]; használj sima változókat, mivel a tömb be beletölteni a értékeket jobban terheli a rendszert mint ha sima változókba.
new Float:X,Float:Y,Float:Z,Float:A;
#EnumLogic
xDD
-
Cssss.. Direkt írtam rosszat XD
-
Valóban működik, már csak az lenne a kérdésem, hogy a matematika csodáival megoldható-e az, hogy a létrehozott objektet a CreateObject függvény utolsó három paraméterével felém forgassa el, tehát hogy velem szemben legyen?
Gondolom az ellentéte kell annak, amerre a játékos néz, de magamtól nem tudtam rájönni, hogy pontosan milyen értéket is kellene oda írni, illetve hogy melyik paraméternek kellene változtatni az értékét.
COMMAND:create(playerid)
{
new Float: Pos[4];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
GetPlayerFacingAngle(playerid, Pos[3]);
CreateObject(2063, Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] + (5.0 * floatcos(-Pos[3], degrees)), Pos[2], 0, 0, 0);
return 1;
}
Nem gond, ha esetleg nem megoldható.
A 2063-as objekttel dolgoztam, ami egy polcszerűség, ezt szeretném létrehozás után automatikusan felém forgatni.
Előre is köszönöm ismét a hasznos válaszokat, illetve köszönöm az előzőket is.
Valóban működik, már csak az lenne a kérdésem, hogy a matematika csodáival megoldható-e az, hogy a létrehozott objektet a CreateObject függvény utolsó három paraméterével felém forgassa el, tehát hogy velem szemben legyen?
Gondolom az ellentéte kell annak, amerre a játékos néz, de magamtól nem tudtam rájönni, hogy pontosan milyen értéket is kellene oda írni, illetve hogy melyik paraméternek kellene változtatni az értékét.
COMMAND:create(playerid)
{
new Float: Pos[4];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
GetPlayerFacingAngle(playerid, Pos[3]);
CreateObject(2063, Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] + (5.0 * floatcos(-Pos[3], degrees)), Pos[2], 0, 0, 0);
return 1;
}
Nem gond, ha esetleg nem megoldható.
A 2063-as objekttel dolgoztam, ami egy polcszerűség, ezt szeretném létrehozás után automatikusan felém forgatni.
Előre is köszönöm ismét a hasznos válaszokat, illetve köszönöm az előzőket is.
......ezt komolyan kérded?
GetPlayerFacingAngle(playerid, Pos[3]);
if(pos[3] > =180){pos[3] -= 180}
else if(pos[3]<180){pos[3]+=180}
CreateObject(2063, Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] + (5.0 * floatcos(-Pos[3], degrees)), Pos[2], pos[3], 0, 0);
de van erre más lehetőség is
-
Ahhoz képest, hogy lenéző hangnemben írtad, ez egy rakás fos, és még csak nem is működik.
-
Ahhoz képest, hogy lenéző hangnemben írtad, ez egy rakás fos, és még csak nem is működik.
Nems is fog ha így az egyben csak berakod :) ugyanis a degressel megváltoztatod a középpontját az objectnek.
Tegyük fel hogy nem forgatod rx ry rz pozícióban az objektum csavarodva fog megjelenni amint elfordulsz
A matematikáját azt neked kell kiszámolnod, ez csak egy elemzés.
Pos[3] az rx helyére került ha ott nem jó megnézed ry vagy rz nél vannak objektumok amik nem vízszintesen vagy függőlegesen vannak alapból így az értékek változók objektumonként. zárójelben megjegyzem (igen akármelyikhez ha beilleszted a Pos[3]-mat önmagában nem lesz jó )
-
De mivel jókedvemben vagyok, megsúgom, hogy lehetséges a degressel
CreateObject(2063, Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] + (5.0 * floatcos(-Pos[3], degrees)), Pos[2], 0, 0, Pos[3]-180);
......ezt komolyan kérded?
GetPlayerFacingAngle(playerid, Pos[3]);
if(pos[3] > =180){pos[3] -= 180}
else if(pos[3]<180){pos[3]+=180}
CreateObject(2063, Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] + (5.0 * floatcos(-Pos[3], degrees)), Pos[2], pos[3], 0, 0);
de van erre más lehetőség is
[/quote]
A játék jobban preferálja a pozitív számokat főleg a GetPlayerFacingAngle függvénynél...
Ezért javaslom annak ellenére, hogy elküldtem a jó megoldást, matekozd ki a 360 at hogy sose legyen mínusz érték.
A játék jobban preferálja a pozitív számokat főleg a GetPlayerFacingAngle függvénynél...
Ezért javaslom annak ellenére, hogy elküldtem a jó megoldást, matekozd ki a 360 at hogy sose legyen mínusz érték.
[/quote]
Csak hogy ne bugoltassad majd későbbiekben inkább elküldöm
if(Pos[3] >= 180){
CreateObject(2063, Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] + (5.0 * floatcos(-Pos[3], degrees)), Pos[2], 0, 0, Pos[3]-180);
}else{
CreateObject(2063, Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] + (5.0 * floatcos(-Pos[3], degrees)), Pos[2], 0, 0, Pos[3]+180);
}
Személyi tanácsom!!!!
CreateDynamicObject függvényt használj mindig
-
Cssss.. Direkt írtam rosszat XD
Nem rossz a másik módszer sem... akkor kockákkal számolsz nem szögelléssel
Ha pl mint most a degressnél is 5 ös távot akarunk (5m asszem az)
akkor 5*5 rácssal kell számolni + a 360 fok számítás ha forgatni is kellene valamerre
igen egyszerű azzal is megcsinálni, és a játék is jobban preferálja a rácsozás megoldást mint a szögellést.
Ezt még akár Stockban is érdemes megcsinálni, mert nem kötött függvény mint jelen esetben a degress
-
Köszönöm.
-
COMMAND:create(playerid) {
new Float:Pos[4];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
GetPlayerFacingAngle(playerid, Pos[3]);
CreateObject(2063, Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] + (5.0 * floatcos(-Pos[3], degrees)), Pos[2], 0, 0, -atan2(Pos[0] - Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] - Pos[1] + (5.0 * floatcos(-Pos[3], degrees))));
return true;
}
Copy
-
COMMAND:create(playerid) {
new Float:Pos[4];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
GetPlayerFacingAngle(playerid, Pos[3]);
CreateObject(2063, Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] + (5.0 * floatcos(-Pos[3], degrees)), Pos[2], 0, 0, -atan2(Pos[0] - Pos[0] + (5.0 * floatsin(-Pos[3], degrees)), Pos[1] - Pos[1] + (5.0 * floatcos(-Pos[3], degrees))));
return true;
}
Copy
Nem kell átesnie újra a függvényen :) elég ha berakja Pos[3] részt a 3. 0 helyére amit elküldtem