SteveStage
30.12.2019, 14:43
Вот моя система спидометра:
new speed_timer[MAX_VEHICLES];
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
td_speed[0] = TextDrawCreate(641.531494, 378.333312, "usebox");
TextDrawLetterSize(td_speed[0], 0.000000, 7.525930);
TextDrawTextSize(td_speed[0], 500.723266, 0.000000);
TextDrawUseBox(td_speed[0], true);
TextDrawBoxColor(td_speed[0], 102);
speed_timer[vehicleid] = SetTimerEx("@_UpdateSpeed", 500, false, "dd", playerid, vehicleid);
}
}
@_UpdateSpeed(playerid, vehicleid);
@_UpdateSpeed(playerid, vehicleid)
{
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
{
KillTimer(speed_timer[vehicleid]);
for(new i; i < 4; i++) TextDrawHideForPlayer(playerid, td_speed[i]);
return false;
}
for(new i; i < 4; i++) TextDrawHideForPlayer(playerid, td_speed[i]);
new
string1[15],
string2[10],
string3[15];
format(string1, sizeof(string1), "SPEED: %d KM/H", GetVehicleSpeed(playerid, vehicleid));
format(string2, sizeof(string2), "FUEL: %d", veh[vehicleid][v_fuel]);
format(string3, sizeof(string3), "LOCK: %s", (lock_veh{vehicleid} == true) ? ("LOCKED") : ("UNLOCKED"));
TD_ChangeSpeed(string1, string2, string3);
for(new i; i < 4; i++) TextDrawShowForPlayer(playerid, td_speed[i]);
speed_timer[vehicleid] = SetTimerEx("@_UpdateSpeed", 500, false, "dd", playerid, vehicleid);
return true;
}
stock TD_ChangeSpeed(const speed[], const fuel[], const lock[])
{
new
color = COLOR_ORANGE;
td_speed[1] = TextDrawCreate(511.200000, 384.666596, speed);
TextDrawLetterSize(td_speed[1], 0.449999, 1.600000);
TextDrawAlignment(td_speed[1], 1);
TextDrawColor(td_speed[1], color);
TextDrawSetShadow(td_speed[1], 0);
TextDrawSetOutline(td_speed[1], 1);
TextDrawBackgroundColor(td_speed[1], 255);
TextDrawFont(td_speed[1], 3);
TextDrawSetProportional(td_speed[1], 1);
td_speed[2] = TextDrawCreate(511.200000, 402.916687, fuel);
TextDrawLetterSize(td_speed[2], 0.449999, 1.600000);
TextDrawAlignment(td_speed[2], 1);
TextDrawColor(td_speed[2], color);
TextDrawSetShadow(td_speed[2], 0);
TextDrawSetOutline(td_speed[2], 1);
TextDrawBackgroundColor(td_speed[2], 255);
TextDrawFont(td_speed[2], 3);
TextDrawSetProportional(td_speed[2], 1);
td_speed[3] = TextDrawCreate(511.200000, 421.166778, lock); // 18,250091
TextDrawLetterSize(td_speed[3], 0.449999, 1.600000);
TextDrawAlignment(td_speed[3], 1);
TextDrawColor(td_speed[3], color);
TextDrawSetShadow(td_speed[3], 0);
TextDrawSetOutline(td_speed[3], 1);
TextDrawBackgroundColor(td_speed[3], 255);
TextDrawFont(td_speed[3], 3);
TextDrawSetProportional(td_speed[3], 1);
}
Как вы можете видеть, в UpdateSpeed создаются 3 локальных массива, в них форматируются нужные значения, и после нового запуска они удаляются и потом снова создаются
А вот если я создам эти 3 массива, но глобальных, и буду форматировать их (первая мера - айди игрока), то уменьшится ли нагрузка от создания и удаления 3 локальных массивов, и как лучше это реализовать?
P.S. Опечатался в названии, не спмдометр, а спидометр =)
new speed_timer[MAX_VEHICLES];
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
td_speed[0] = TextDrawCreate(641.531494, 378.333312, "usebox");
TextDrawLetterSize(td_speed[0], 0.000000, 7.525930);
TextDrawTextSize(td_speed[0], 500.723266, 0.000000);
TextDrawUseBox(td_speed[0], true);
TextDrawBoxColor(td_speed[0], 102);
speed_timer[vehicleid] = SetTimerEx("@_UpdateSpeed", 500, false, "dd", playerid, vehicleid);
}
}
@_UpdateSpeed(playerid, vehicleid);
@_UpdateSpeed(playerid, vehicleid)
{
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
{
KillTimer(speed_timer[vehicleid]);
for(new i; i < 4; i++) TextDrawHideForPlayer(playerid, td_speed[i]);
return false;
}
for(new i; i < 4; i++) TextDrawHideForPlayer(playerid, td_speed[i]);
new
string1[15],
string2[10],
string3[15];
format(string1, sizeof(string1), "SPEED: %d KM/H", GetVehicleSpeed(playerid, vehicleid));
format(string2, sizeof(string2), "FUEL: %d", veh[vehicleid][v_fuel]);
format(string3, sizeof(string3), "LOCK: %s", (lock_veh{vehicleid} == true) ? ("LOCKED") : ("UNLOCKED"));
TD_ChangeSpeed(string1, string2, string3);
for(new i; i < 4; i++) TextDrawShowForPlayer(playerid, td_speed[i]);
speed_timer[vehicleid] = SetTimerEx("@_UpdateSpeed", 500, false, "dd", playerid, vehicleid);
return true;
}
stock TD_ChangeSpeed(const speed[], const fuel[], const lock[])
{
new
color = COLOR_ORANGE;
td_speed[1] = TextDrawCreate(511.200000, 384.666596, speed);
TextDrawLetterSize(td_speed[1], 0.449999, 1.600000);
TextDrawAlignment(td_speed[1], 1);
TextDrawColor(td_speed[1], color);
TextDrawSetShadow(td_speed[1], 0);
TextDrawSetOutline(td_speed[1], 1);
TextDrawBackgroundColor(td_speed[1], 255);
TextDrawFont(td_speed[1], 3);
TextDrawSetProportional(td_speed[1], 1);
td_speed[2] = TextDrawCreate(511.200000, 402.916687, fuel);
TextDrawLetterSize(td_speed[2], 0.449999, 1.600000);
TextDrawAlignment(td_speed[2], 1);
TextDrawColor(td_speed[2], color);
TextDrawSetShadow(td_speed[2], 0);
TextDrawSetOutline(td_speed[2], 1);
TextDrawBackgroundColor(td_speed[2], 255);
TextDrawFont(td_speed[2], 3);
TextDrawSetProportional(td_speed[2], 1);
td_speed[3] = TextDrawCreate(511.200000, 421.166778, lock); // 18,250091
TextDrawLetterSize(td_speed[3], 0.449999, 1.600000);
TextDrawAlignment(td_speed[3], 1);
TextDrawColor(td_speed[3], color);
TextDrawSetShadow(td_speed[3], 0);
TextDrawSetOutline(td_speed[3], 1);
TextDrawBackgroundColor(td_speed[3], 255);
TextDrawFont(td_speed[3], 3);
TextDrawSetProportional(td_speed[3], 1);
}
Как вы можете видеть, в UpdateSpeed создаются 3 локальных массива, в них форматируются нужные значения, и после нового запуска они удаляются и потом снова создаются
А вот если я создам эти 3 массива, но глобальных, и буду форматировать их (первая мера - айди игрока), то уменьшится ли нагрузка от создания и удаления 3 локальных массивов, и как лучше это реализовать?
P.S. Опечатался в названии, не спмдометр, а спидометр =)