Хрен редьки не слаще. Но суть, я очень надеюсь, вы уловили, а то срам.
Вопрос. Много лет назад запилил спидометр на объекте при виде от первого лица. Какое-то время все работало прекрасно(даже видосик был 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 раза быстрее?
|