Wysłany: 2015-03-27, 20:02
RoY
Wiek: 30 Na forum: 4091 dni Posty: 7
Witam, czy w sa-mp jest mo?liwo?? obracania obiektu? wok?? jego o?i, tak jak pick up. Je?li tak, prosz? o podanie przyk?adu kodu, lub tropu - dzi?kuj?.
Parameters: Float:Z
PS: Chodzi o ci?g?e obracanie obiektu 360 stopni, co? na zasadzie SetTimer.
Tego nie potrzebuj?, http://wiki.sa-mp.com/wiki/SetObjectRot
Wysłany: 2015-03-27, 20:13
ToxiC.
Wiek: 28 Na forum: 5246 dni Posty: 3792
Piwa : 8590
Nigdy nie robi?em czego? takiego, ale jak nie SetObjectRot to spr?buj
Więcej informacji znajdziesz w Wikipedii SA-MP: MoveObject
X, Y, Z ustaw takie jakie masz przy tworzeniu obiektu, a nast?pnie X, Y, Z rotacji jak Ci pasuje.
Najlepszym rozwi?zaniem b?dzie zrobi? powtarzaj?cy si? timer co 500ms i SetObjectRot. W rotacji musisz ustali? zmienn?,
Kod:
new Float:RotObj = 0.5; //g?ra
//Timer:
SetObjectRot(...RotObj);
RotObj += 0.5;
Tym sposobem co p?? sekundy obiekt b?dzie obraca? si? minimalnie, dodaj?c poprzedni? rotacj?. Nie robi?em czego? takiego = nie wiem czy b?dzie dzia?a?, spr?buj.
Wysłany: 2015-03-27, 20:33
RoY
Wiek: 30 Na forum: 4091 dni Posty: 7
Napisa?em teraz, ale co? nie dzia?a.
Pawn #include <a_samp>
forward Moja_Rotacja ();
public OnGameModeInit ()
{
SetTimer ( "Moja_Rotacja" , 1000 , true );
CreateObject ( 14791 , - 2042.615234375 , - 147.52728271484 , 90.86026763916 , 0.00 , 0.00 , 0 );
return 1 ;
}
public Moja_Rotacja ()
{
new Float : rx , Float : ry , Float : rz ;
GetObjectRot ( 14791 , rx , ry , rz );
rz += 0.2 ;
if ( rz >= 360 )
rz -= 360 ;
SetObjectRot ( 14791 , rx , ry , rz );
}
Mo?na by by?o zrobi? jako pick up, ale na pick up nie mo?na wej?? - jest zbugowany.
Wysłany: 2015-03-27, 20:50
ToxiC.
Wiek: 28 Na forum: 5246 dni Posty: 3792
Piwa : 8590
"RoY" napisał/a :Mo?na by by?o zrobi? jako pick up, ale na pick up nie mo?na wej?? - jest zbugowany.
S?dz?c po Twoim kodzie, pewnie ?le to robisz . Je?eli zrobi?e? to jako pickup poka? kod, natomiast przechodz?c do kodu powy?ej to
Kod:
#include <a_samp>
new Obiekt1, Float:Obiekt1Rot = 0;
forward Moja_Rotacja();
public OnGameModeInit()
{
SetTimer("Moja_Rotacja", 500, true);
Obiekt1 = CreateObject(14791, -2042.615234375, -147.52728271484, 90.86026763916, 0.00, 0.00, 0);
return 1;
}
public Moja_Rotacja()
{
Obiekt1Rot += 0.2;
if (Obiekt1Rot >= 360) Obiekt1Rot = 0;
SetObjectRot(Obiekt1, 0.00, 0.00, Obiekt1Rot);
}
Wysłany: 2015-03-27, 20:55
RoY
Wiek: 30 Na forum: 4091 dni Posty: 7
Kod: new Obiekt1, Float:Obiekt1Rot = 0;
warning 213: tag mismatch
Wysłany: 2015-03-27, 21:10
ToxiC.
Wiek: 28 Na forum: 5246 dni Posty: 3792
Piwa : 8590
Kod:
new Obiekt;
new Float:Obiekt1Rot;
I poka? erorsy
Wysłany: 2015-03-27, 21:26
RoY
Wiek: 30 Na forum: 4091 dni Posty: 7
"ToxiC`" napisał/a : Kod:
new Obiekt;
new Float:Obiekt1Rot;
I poka? erorsy
warning 203: symbol is never used: "Float"
A zrobi?em tak, to jest spox.
Kod: new Obiekt1;
new Obiekt1Rot;
Dzi?kuj? za, help - salute.
//------------------------------------------
Mam jeszcze jedno pytanie, czy mo?na zrobi? co? takiego ze skinem tylko np. na komend?.
Wysłany: 2015-03-27, 21:59
ToxiC.
Wiek: 28 Na forum: 5246 dni Posty: 3792
Piwa : 8590
Wysłany: 2015-03-27, 22:19
RoY
Wiek: 30 Na forum: 4091 dni Posty: 7
"ToxiC`" napisał/a :
Ale tutaj trzeba chyba u?y? parametru: playerid, poniewa? to gracz b?dzie sam to uruchamia?. Bez zegara, np. na komend?.
Kod: #include <a_samp>
new Float:objrot1;
new obj1;
public OnGameModeInit()
{
obj1 = AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/test", cmdtext, true, 10) == 0)
{
SetPlayerFacingAngle(obj1, 0.0,0.0, objrot1);
objrot1 += 0.5;
if(objrot1 >= 360.0) objrot1 = 0.0;
return 1;
}
return 0;
}
Kod: SetPlayerFacingAngle(obj1, 0.0,0.0, objrot1);
warning 202: number of arguments does not match definition
Ostatnio zmieniony przez RoY 2015-03-27, 22:36, w całości zmieniany 2 razy
Wysłany: 2015-03-27, 22:30
ToxiC.
Wiek: 28 Na forum: 5246 dni Posty: 3792
Piwa : 8590
No tak, musisz u?y? zamiast SetTimer, to SetTimerEx np.
Kod:
CMD:skin360(playerid)
{
SetTimerEx("SkinObrot", 500, true, "i", playerid);
return 1;
}
forward SkinObrot(playerid);
public SkinObrot(playerid)
{
SetPlayerFacingAngle(playerid, ...);
}
Dodatkowo, pewnie b?dziesz chcia? zrobi? komend? na wy??czenie obrotu? No to jeszcze ma?a modyfikacja.
Kod:
new TimerSkin[MAX_PLAYERS]; //na g?rze
CMD:skin360(playerid)
{
TimerSkin[playerid] = SetTimerEx("SkinObrot", 500, true, "i", playerid);
//Tutaj mo?esz zamrozi? jeszcze
return 1;
}
CMD:skin360off(playerid)
{
KillTimer(TimerSkin[playerid]);
return 1;
}
forward SkinObrot(playerid);
public SkinObrot(playerid)
{
SetPlayerFacingAngle(playerid, ...);
}
//Dodatkowo w OnPlayerConnect lub Disconnect jeszcze mo?esz zabi? ten timer:
KillTimer(TimerSkin[playerid]);
Jako? tak, spr?buj
Wysłany: 2015-03-27, 22:37
RoY
Wiek: 30 Na forum: 4091 dni Posty: 7
"ToxiC`" napisał/a :No tak, musisz u?y? zamiast SetTimer, to SetTimerEx np.
Kod:
CMD:skin360(playerid)
{
SetTimerEx("SkinObrot", 500, true, "i", playerid);
return 1;
}
forward SkinObrot(playerid);
public SkinObrot(playerid)
{
SetPlayerFacingAngle(playerid, ...);
}
Dodatkowo, pewnie b?dziesz chcia? zrobi? komend? na wy??czenie obrotu? No to jeszcze ma?a modyfikacja.
Kod:
new TimerSkin[MAX_PLAYERS]; //na g?rze
CMD:skin360(playerid)
{
TimerSkin[playerid] = SetTimerEx("SkinObrot", 500, true, "i", playerid);
//Tutaj mo?esz zamrozi? jeszcze
return 1;
}
CMD:skin360off(playerid)
{
KillTimer(TimerSkin[playerid]);
return 1;
}
forward SkinObrot(playerid);
public SkinObrot(playerid)
{
SetPlayerFacingAngle(playerid, ...);
}
//Dodatkowo w OnPlayerConnect lub Disconnect jeszcze mo?esz zabi? ten timer:
KillTimer(TimerSkin[playerid]);
Jako? tak, spr?buj
Zrobi?em tak, ale jest warning.
Kod: #include <a_samp>
new Float:objrot1;
new obj1;
public OnGameModeInit()
{
obj1 = AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/test", cmdtext, true, 10) == 0)
{
SetPlayerFacingAngle(obj1, 0.0,0.0, objrot1);
objrot1 += 0.5;
if(objrot1 >= 360.0) objrot1 = 0.0;
return 1;
}
return 0;
}
Kod: SetPlayerFacingAngle(obj1, 0.0,0.0, objrot1); // warning!
warning 202: number of arguments does not match definition
Wysłany: 2015-03-27, 22:45
ToxiC.
Wiek: 28 Na forum: 5246 dni Posty: 3792
Piwa : 8590
SetPlayerFacingAngle ma 2 argumenty id gracza i rotacja. Poprawnie:
SetPlayerFacingAngle(playerid, rotacja);
Po za tym troch? ?le..
Poprawka:
Kod:
#include <a_samp>
new Float:objrot1;
new TimerSkin[MAX_PLAYERS];
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/test", cmdtext, true, 10) == 0)
{
TimerSkin[playerid] = SetTimerEx("SkinObrot", 500, true, "i", playerid);
return 1;
}
return 0;
}
forward SkinObrot(playerid);
public SkinObrot(playerid)
{
objrot1 += 0.5;
SetPlayerFacingAngle(playerid, objrot1);
if(objrot1 >= 360.0) objrot1 = 0.0;
}
Tak jak pisa?em wy?ej, brakuje Ci tu jeszcze komendy na wy??czanie ale spr?buj j? wykona? jak b?dziesz chcia?. Po raz kolejny napisz?, ?e jezeli chcesz zeby gracz si? nie rusza?, to u?yj http://wiki.sa-mp.com/wik...yerControllable
Wysłany: 2015-03-27, 22:53
RoY
Wiek: 30 Na forum: 4091 dni Posty: 7
Chodzi, dzi?kuj? - za pomoc!
Wysłany: 2015-03-27, 22:57
ToxiC.
Wiek: 28 Na forum: 5246 dni Posty: 3792
Piwa : 8590
Tagi: obiekt
Anonymous
Na forum: 245 dni
Posty: 1
Anonymous Koniecznie zajrzyj na: