|
Хрен редьки не слаще. Но суть, я очень надеюсь, вы уловили, а то срам.
Вопрос. Много лет назад запилил спидометр на объекте при виде от первого лица. Какое-то время все работало прекрасно(даже видосик был https://www.youtube.com/watch?v=JNgS04BDb3o ) Код в целом не менялся, но спидометр стал нещадно моргать. Code:
public OnPlayerUpdate(playerid)
{
if(CameraViewUsed[playerid])
{
if(PlayerCarSpeedBit[playerid]==0)
{
format(speedstr,64,"%0.1f {FF4500}%d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
DestroyObject(speedobj[playerid]);
speedobj[playerid] = CreateObject(19476, 0,0,0, 0, 0, 0, 100);
AttachObjectToVehicle(speedobj[playerid],SpeedoInfo[playerid][sdcarid],CarSpeedPos[speedmodelupd[playerid]][0],CarSpeedPos[speedmodelupd[playerid]][1],CarSpeedPos[speedmodelupd[playerid]][2],CarSpeedPos[speedmodelupd[playerid]][3],CarSpeedPos[speedmodelupd[playerid]][4],CarSpeedPos[speedmodelupd[playerid]][5]);
PlayerCarSpeedBit[playerid]=20;
}
else
{
format(speedstr,64,"%0.1f {FF4500}%d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
SetObjectMaterialText(speedobj[playerid], speedstr, 0, OBJECT_MATERIAL_SIZE_256x128, "Arial", CarSpeedSize[speedmodelupd[playerid]]);
PlayerCarSpeedBit[playerid]--;
}
}
return 1;
}
|
|
В любой другой код который был добавлен и после которого стало "моргать".
|

public OnPlayerUpdate(playerid)
{
if(CameraViewUsed[playerid])
{
if(CarAlarms[SpeedoInfo[playerid][sdcarid]])
{
if(fifthsecbit>2)
format(speedstr,64,"{FFCC00}< >{FFFFFF}%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
else
format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
}
else
{
switch(gPlayerIndikator[playerid])
{
case 1:
{
format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
}
case 2://левый
{
if(fifthsecbit>2)
format(speedstr,64,"{FFCC00}< {FFFFFF}>%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
else
format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
}
case 3://правый
{
if(fifthsecbit>2)
format(speedstr,64,"{FFFFFF}< {FFCC00}>{FFFFFF}%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
else
format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d>",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
}
}
}
if(PlayerCarSpeedBit[playerid]==0)
{
GetVehiclePos(SpeedoInfo[playerid][sdcarid],vehpos[0],vehpos[1],vehpos[2]);
DestroyObject(speedobj[playerid]);
speedobj[playerid] = CreateObject(19476, vehpos[0],vehpos[1],vehpos[2], 0, 0, 0);
AttachObjectToVehicle(speedobj[playerid],SpeedoInfo[playerid][sdcarid],CarSpeedPos[speedmodelupd[playerid]][0],CarSpeedPos[speedmodelupd[playerid]][1],CarSpeedPos[speedmodelupd[playerid]][2],CarSpeedPos[speedmodelupd[playerid]][3],CarSpeedPos[speedmodelupd[playerid]][4],CarSpeedPos[speedmodelupd[playerid]][5]);
PlayerCarSpeedBit[playerid]=20;
}
else
{
SetObjectMaterialText(speedobj[playerid], speedstr, 0, OBJECT_MATERIAL_SIZE_256x128, "Arial", CarSpeedSize[speedmodelupd[playerid]]);
PlayerCarSpeedBit[playerid]--;
}
}
return 1;
}
|
Перестает меняться текст каждые 20-30 итераций. Поэтому такой счетчик. Но моргает каждую итерацию, а не каждые 20.
|
|
Может где то макрос есть на подмену c CreateObject на CreateDynamicObject?
|
|
Объемы его обширны, и установить после чего это началось не представляется возможным. Более того, я даже точно не вспомню на какой версии сампа это началось
![]() За ночь эксперементов я пришел уже к вот такому виду: Code:
public OnPlayerUpdate(playerid)
{
if(CameraViewUsed[playerid])
{
if(CarAlarms[SpeedoInfo[playerid][sdcarid]])
{
if(fifthsecbit>2)
format(speedstr,64,"{FFCC00}< >{FFFFFF}%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
else
format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
}
else
{
switch(gPlayerIndikator[playerid])
{
case 1:
{
format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
}
case 2://левый
{
if(fifthsecbit>2)
format(speedstr,64,"{FFCC00}< {FFFFFF}>%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
else
format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
}
case 3://правый
{
if(fifthsecbit>2)
format(speedstr,64,"{FFFFFF}< {FFCC00}>{FFFFFF}%0.1f {FF4500}%03d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
else
format(speedstr,64,"{FFFFFF}< >%0.1f {FF4500}%03d>",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
}
}
}
if(PlayerCarSpeedBit[playerid]==0)
{
GetVehiclePos(SpeedoInfo[playerid][sdcarid],vehpos[0],vehpos[1],vehpos[2]);
DestroyObject(speedobj[playerid]);
speedobj[playerid] = CreateObject(19476, vehpos[0],vehpos[1],vehpos[2], 0, 0, 0);
AttachObjectToVehicle(speedobj[playerid],SpeedoInfo[playerid][sdcarid],CarSpeedPos[speedmodelupd[playerid]][0],CarSpeedPos[speedmodelupd[playerid]][1],CarSpeedPos[speedmodelupd[playerid]][2],CarSpeedPos[speedmodelupd[playerid]][3],CarSpeedPos[speedmodelupd[playerid]][4],CarSpeedPos[speedmodelupd[playerid]][5]);
PlayerCarSpeedBit[playerid]=20;
}
else
{
SetObjectMaterialText(speedobj[playerid], speedstr, 0, OBJECT_MATERIAL_SIZE_256x128, "Arial", CarSpeedSize[speedmodelupd[playerid]]);
PlayerCarSpeedBit[playerid]--;
}
}
return 1;
}
|
|
Универсальным решением будет использование по 2 объектов с текстом на каждую машину, при этом объекты не всё время будут существовать одновременно.
Покажу на временном графике время существования каждого из объектов (в тактах). 1) ***********00000000000***********00000000000 2) 000000000***********00000000000***********00 где "*" - момент, когда объект жив, а "0" - когда объект не существует. PS: не понятно что вы имели под "дико моргал": моргания, связанные с пересозданием объекта, либо моргания, связанные с обновлением текста во время жизни объекта (дал совет по борьбе с первым случаем). |
|
Хрен редьки не слаще. Но суть, я очень надеюсь, вы уловили, а то срам.
Вопрос. Много лет назад запилил спидометр на объекте при виде от первого лица. Какое-то время все работало прекрасно(даже видосик был https://www.youtube.com/watch?v=JNgS04BDb3o ) Код в целом не менялся, но спидометр стал нещадно моргать. Code:
public OnPlayerUpdate(playerid)
{
if(CameraViewUsed[playerid])
{
if(PlayerCarSpeedBit[playerid]==0)
{
format(speedstr,64,"%0.1f {FF4500}%d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
DestroyObject(speedobj[playerid]);
speedobj[playerid] = CreateObject(19476, 0,0,0, 0, 0, 0, 100);
AttachObjectToVehicle(speedobj[playerid],SpeedoInfo[playerid][sdcarid],CarSpeedPos[speedmodelupd[playerid]][0],CarSpeedPos[speedmodelupd[playerid]][1],CarSpeedPos[speedmodelupd[playerid]][2],CarSpeedPos[speedmodelupd[playerid]][3],CarSpeedPos[speedmodelupd[playerid]][4],CarSpeedPos[speedmodelupd[playerid]][5]);
PlayerCarSpeedBit[playerid]=20;
}
else
{
format(speedstr,64,"%0.1f {FF4500}%d",Gas[SpeedoInfo[playerid][sdcarid]],PlayerCarIntSpeed[playerid]);
SetObjectMaterialText(speedobj[playerid], speedstr, 0, OBJECT_MATERIAL_SIZE_256x128, "Arial", CarSpeedSize[speedmodelupd[playerid]]);
PlayerCarSpeedBit[playerid]--;
}
}
return 1;
}
|
|
я не знаю, может быть я чего-то упустил или что-то еще, но почему калкора все называют Кайем?
|
|
я не знаю, может быть я чего-то упустил или что-то еще, но почему калкора все называют Кайем?
|
|
Компилятор во время компиляции забирает только 25% от ЦП. Это нормально?
|
|
Т.е если бы у меня было только одно ядро но с мощностью 4 ядер - компиляция была бы в 4 раза быстрее?
|