SA-MP Forums Archive
Вопросы по управлению камерой - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Вопросы по управлению камерой (/showthread.php?tid=130711)

Pages: 1 2


Вопросы по управлению камерой - Geryy - 28.02.2010

Думаю у всех иногда случаются траблы с игровой камерой, кторые требуют решения.


Поэтому у меня есть вопрос:

Пытался поствавить трамвай в мод на samp 0.3. Поставился, но проблема при выходе из него камера остается на нем, т.е. обратно к игроку не возвращается. Кому-нибуть попадалось решение?

Пытался использованить такой код:
Code:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(oldstate == PLAYER_STATE_ONFOOT && GetVehicleModel(GetPlayerVehicleID(playerid)) == 449)
{
traincamera[playerid] = 1;
}
if(traincamera[playerid] == 1 && newstate == PLAYER_STATE_ONFOOT)
{
SetCameraBehindPlayer(playerid);
traincamera[playerid] = 0;
}
return 1;
}
Но не сработало...

Также пробовал:
Code:
вместо SetCameraBehindPlayer(playerid); выполнять TogglePlayerSpectating(playerid, 1); и сразу TogglePlayerSpectating(playerid, 0);
После этого выходя из трамвая перс появляется постоянно в 1 и тойже точке, причем не зависимо на каком расстоянии от нее вышел.


Re: [OFF] Вопросы по управлению камерой - [JIeXa] - 28.02.2010

он спавнится после спектатора...
да кстате, конкретно по камере!!!
можно сделать такую фигню как в мта мэп едиторе!!!
там же можно камерой вертеть туда сюда, ну дак вот и в сампе так можно сдлетьа, благодаря плагину от Alex009, Structure Access(можно получить кооординаты камеры и куда она смотрит)


Re: [OFF] Вопросы по управлению камерой - MX_Master - 28.02.2010

Geryy
ты проверил, что первый код выполняется? SetCameraBehindPlayer должен железно работать. У тя в коде непростая логика и, возможно, даже до SetCameraBehindPlayer не доходит.


Re: [OFF] Вопросы по управлению камерой - Geryy - 28.02.2010

Да выполняется вроде, напиши пожалсто какой должен быть код с простой логикой...


Re: [OFF] Вопросы по управлению камерой - MX_Master - 28.02.2010

Quote:
Originally Posted by Geryy
Да выполняется вроде, напиши пожалсто какой должен быть код с простой логикой...
Если любой из этих двух поможет, можешь усложнить логику, например, так как это было в твоем примере. Код я не проверял.

Code:
public OnPlayerStateChange ( playerid, newstate, oldstate )
{
	switch ( newstate )
	{
		case PLAYER_STATE_EXIT_VEHICLE : SetCameraBehindPlayer(playerid);
	}

	return 1;
}
Code:
forward resetPlayerCamera ( playerid );
public resetPlayerCamera ( playerid )
{
	SetCameraBehindPlayer(playerid);
}

public OnPlayerStateChange ( playerid, newstate, oldstate )
{
	switch ( newstate )
	{
		case PLAYER_STATE_EXIT_VEHICLE : 
			SetTimerEx( "resetPlayerCamera", 2000, 0, "i", playerid );
	}

	return 1;
}



Re: [OFF] Вопросы по управлению камерой - Geryy - 28.02.2010

Попробовал оба кода, камера по прежнему остается на трамвае при выходе из него.


Re: [OFF] Вопросы по управлению камерой - MX_Master - 28.02.2010

пару раз войди и выйди с трамвика и камера сама должна прийти в норму. Да и ваще в трамвае используется механизм слежения за транспортом, поэтому могут быть непонятные закидоны камеры (:


Re: [OFF] Вопросы по управлению камерой - Serafim_sd - 28.02.2010

Quote:
Originally Posted by Geryy
Думаю у всех иногда случаются траблы с игровой камерой, кторые требуют решения.


Поэтому у меня есть вопрос:

Пытался поствавить трамвай в мод на samp 0.3. Поставился, но проблема при выходе из него камера остается на нем, т.е. обратно к игроку не возвращается. Кому-нибуть попадалось решение?

Пытался использованить такой код:
Code:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(oldstate == PLAYER_STATE_ONFOOT && GetVehicleModel(GetPlayerVehicleID(playerid)) == 449)
{
traincamera[playerid] = 1;
}
if(traincamera[playerid] == 1 && newstate == PLAYER_STATE_ONFOOT)
{
SetCameraBehindPlayer(playerid);
traincamera[playerid] = 0;
}
return 1;
}
Но не сработало...

Также пробовал:
Code:
вместо SetCameraBehindPlayer(playerid); выполнять TogglePlayerSpectating(playerid, 1); и сразу TogglePlayerSpectating(playerid, 0);
После этого выходя из трамвая перс появляется постоянно в 1 и тойже точке, причем не зависимо на каком расстоянии от нее вышел.
В трамвай сажаешь функцией PutPlayerInVehicle?


Re: [OFF] Вопросы по управлению камерой - MX_Master - 28.02.2010

в трам игрок сам садится и выходит же (:


Re: [OFF] Вопросы по управлению камерой - Geryy - 28.02.2010

да
PutPlayerInVehicle(playerid, vehicle, 0);

Садится сам он только как пассажир, а чтобы сесть как водитель используется:
Code:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == KEY_SECONDARY_ATTACK ){
if(!IsPlayerInAnyVehicle(playerid)){
new Float:x, Float:y, Float:z, vehicle;
GetPlayerPos(playerid, x, y, z );
GetVehicleWithinDistance(playerid, x, y, z, 20.0, vehicle);

if(IsVehicleRcTram(vehicle)){
PutPlayerInVehicle(playerid, vehicle, 0);
}
}

else {
new vehicleID = GetPlayerVehicleID(playerid);
if(IsVehicleRcTram(vehicleID) || GetVehicleModel(vehicleID) == RC_CAM){
if(GetVehicleModel(vehicleID) != D_TRAM){
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(playerid, x+0.5, y, z+1.0);
}
}
}
}
}

GetVehicleWithinDistance( playerid, Float:x1, Float:y1, Float:z1, Float:dist, &veh){
for(new i = 1; i < MAX_VEHICLES; i++){
if(GetVehicleModel(i) > 0){
if(GetPlayerVehicleID(playerid) != i ){
new Float:x, Float:y, Float:z;
new Float:x2, Float:y2, Float:z2;
GetVehiclePos(i, x, y, z);
x2 = x1 - x; y2 = y1 - y; z2 = z1 - z;
new Float:vDist = (x2*x2+y2*y2+z2*z2);
if( vDist < dist){
veh = i;
dist = vDist;
}
}
}
}
}

IsVehicleRcTram( vehicleid ){
new model = GetVehicleModel(vehicleid);
switch(model){
case D_TRAM, RC_GOBLIN, RC_BARON, RC_BANDIT, RC_RAIDER, RC_TANK: return 1;
default: return 0;
}
return 0;
}



Re: [OFF] Вопросы по управлению камерой - MX_Master - 28.02.2010

ух ты, а у меня тада как сам за руль садится? скрипт пустой ваще для тестов, ничего подобного нет и могу садится в трам сам


Re: [OFF] Вопросы по управлению камерой - Serafim_sd - 28.02.2010

Code:
if(IsVehicleRcTram(vehicleID) || GetVehicleModel(vehicleID) == RC_CAM){
if(GetVehicleModel(vehicleID) != D_TRAM){
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(playerid, x+0.5, y, z+1.0);
}
}
А зачем сделано исключение для трамвая?


Re: [OFF] Вопросы по управлению камерой - Geryy - 01.03.2010

хз...но без него тоже не работает камера


Re: [OFF] Вопросы по управлению камерой - Serafim_sd - 01.03.2010

ну так а если после
SetPlayerPos(playerid, x+0.5, y, z+1.0);
написать
SetCameraBehindPlayer(playerid);
есть эффект?


Re: [OFF] Вопросы по управлению камерой - MX_Master - 01.03.2010

Я потестил немного этот момент с трамваем. Да, иногда камера остается над трамваем. Но я сел снова за руль и вышел.. камера после этого работает как положено и возвращается к игроку.


Re: [OFF] Вопросы по управлению камерой - Geryy - 01.03.2010

Бывает что возвращается, но в основном пересаживания никчему не приводят, спасает только садиться как пассажир и выходить. Поэтому вариант иногда не очень устраивает.


Re: [OFF] Вопросы по управлению камерой - MX_Master - 01.03.2010

дада, все верно, но у меня прокатывает, поэтому такой проблемы не было. У тя игра чистая? Без модов? Комп мощный и пинг до серва, где играешь какой?


Re: [OFF] Вопросы по управлению камерой - Serafim_sd - 02.03.2010

Quote:
Originally Posted by Geryy
Бывает что возвращается, но в основном пересаживания никчему не приводят, спасает только садиться как пассажир и выходить. Поэтому вариант иногда не очень устраивает.
А что если при нажатии на кнопку выхода останавливать трамвай, пересаживать игрока на место пассажира и потом извлекать игрока из транспорта?


Re: [OFF] Вопросы по управлению камерой - Geryy - 02.03.2010

MX_Master

Игра чистая, комп боле-мене приличный на sa хватает с лихвой, пинг в пределах 70 (у себя на компе серв запускал, эффект тотже) мод pen1

Serafim_sd

А если там уже кто-нибуть сидит на пассажирском месте? И неочень представляю какой должен быть код для этого.


Re: [OFF] Вопросы по управлению камерой - Serafim_sd - 02.03.2010

Quote:
Originally Posted by Serafim_sd
Code:
if(IsVehicleRcTram(vehicleID) || GetVehicleModel(vehicleID) == RC_CAM){
if(GetVehicleModel(vehicleID) != D_TRAM){
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(playerid, x+0.5, y, z+1.0);
}
}
перед SetPlayerPos(playerid, x+0.5, y, z+1.0); поставь PutPlayerInVehicle(playerid,vehicleID,1);
А вот если там кто-то будет сидеть... тогда надо както проверять есть ли игрок на этом месте и сажать на другое место...