Вопросы по управлению камерой -
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);
А вот если там кто-то будет сидеть... тогда надо както проверять есть ли игрок на этом месте и сажать на другое место...