Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Оптимизированный спидометр.

Статус
В этой теме нельзя размещать новые ответы.

sergeyols

Умник
Вообщем-то столкнулся со следующей проблемой. Сделал примерно вот такой спидометр:

OnGameModeInit:
Код:
        Textdraw0 = TextDrawCreate(480.000000, 350.000000, "0 mp/h");
	TextDrawBackgroundColor(Textdraw0, 255);
	TextDrawFont(Textdraw0, 3);
	TextDrawLetterSize(Textdraw0, 0.450000, 1.799999);
	TextDrawColor(Textdraw0, -1);
	TextDrawSetOutline(Textdraw0, 1);
	TextDrawSetProportional(Textdraw0, 1);
	TextDrawSetShadow(Textdraw0, 1);

	Textdraw1 = TextDrawCreate(480.000000, 365.000000, "Fuel: 0%");
	TextDrawBackgroundColor(Textdraw1, 255);
	TextDrawFont(Textdraw1, 3);
	TextDrawLetterSize(Textdraw1, 0.450000, 1.799999);
	TextDrawColor(Textdraw1, -1);
	TextDrawSetOutline(Textdraw1, 1);
	TextDrawSetProportional(Textdraw1, 1);
	TextDrawSetShadow(Textdraw1, 1);

	Textdraw2 = TextDrawCreate(480.000000, 381.000000, "lock");
	TextDrawBackgroundColor(Textdraw2, 255);
	TextDrawFont(Textdraw2, 3);
	TextDrawLetterSize(Textdraw2, 0.270000, 1.399999);
	TextDrawColor(Textdraw2, COLOR_TOMATO);
	TextDrawSetOutline(Textdraw2, 1);
	TextDrawSetProportional(Textdraw2, 1);

	Textdraw3 = TextDrawCreate(504.000000, 381.000000, "windows");
	TextDrawBackgroundColor(Textdraw3, 255);
	TextDrawFont(Textdraw3, 3);
	TextDrawLetterSize(Textdraw3, 0.270000, 1.399999);
	TextDrawColor(Textdraw3, COLOR_TOMATO);
	TextDrawSetOutline(Textdraw3, 1);
	TextDrawSetProportional(Textdraw3, 1);
Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
  	if(newstate == PLAYER_STATE_DRIVER)
	{
   		new str[64];
		format(str, sizeof(str), "Fuel: %.2f%", veh_info[GetPlayerVehicleID(playerid)][fuel]);
		TextDrawSetString(Textdraw1, str);

		if(!veh_info[GetPlayerVehicleID(playerid)][lock])
		{
			TextDrawHideForPlayer(playerid,Textdraw2);
	 		TextDrawColor(Textdraw2, COLOR_LIGHT_CYAN);
	 		TextDrawShowForPlayer(playerid,Textdraw2);
	 	}
		else
		{
			TextDrawHideForPlayer(playerid,Textdraw2);
	 		TextDrawColor(Textdraw2, COLOR_TOMATO);
	 		TextDrawShowForPlayer(playerid,Textdraw2);
	 	}

		if(!veh_info[GetPlayerVehicleID(playerid)][windows])
		{
			TextDrawHideForPlayer(playerid,Textdraw3);
	 		TextDrawColor(Textdraw3, COLOR_LIGHT_CYAN);
	 		TextDrawShowForPlayer(playerid,Textdraw3);
	 	}
		else
		{
			TextDrawHideForPlayer(playerid,Textdraw3);
	 		TextDrawColor(Textdraw3, COLOR_TOMATO);
	 		TextDrawShowForPlayer(playerid,Textdraw3);
	 	}
	  	ShowSpeed(playerid);
	}
    else    									HideSpeed(playerid);
    return 1;
}
public OnPlayerUpdate(playerid)
{
	if(isPlayerDriver(playerid))
	{
	    new str[64];
	    format(str, sizeof(str), "%d mp/h", SpeedVehicle(playerid));
		TextDrawSetString(Textdraw0, str);
	}
	character_info[playerid][AFK] = 0;
	
	return 1;
}
ShowSpeed(playerid)
{
    TextDrawShowForPlayer(playerid, Textdraw0);
    TextDrawShowForPlayer(playerid, Textdraw1);
    TextDrawShowForPlayer(playerid, Textdraw2);
    TextDrawShowForPlayer(playerid, Textdraw3);
}

HideSpeed(playerid)
{
    TextDrawHideForPlayer(playerid, Textdraw0);
    TextDrawHideForPlayer(playerid, Textdraw1);
    TextDrawHideForPlayer(playerid, Textdraw2);
    TextDrawHideForPlayer(playerid, Textdraw3);
}
Скорость обновляется чуть в другом месте, не буду добавлять, чтобы не забивать вам голову. Так вот, такой спидометр стакается, то есть тексдрав не обновляется для одного игрока, он обновляется для всех. Попытался найти инфу, мне посоветовали создать массив с текстдравами и для каждого игрока колдовать с отдельным текстдравом. Я циклом создал под MAX_PLAYERS по текстдраву и ужаснулся. При 500 слотах, к потреблению памяти добавилось 19 МБ! 19 МБ для спидометра, согласитесь, это слишком. Я конечно понимаю, что память можно освобождать пока игрок оффлайн, но это не решение проблемы. Так вот, как вы оптимизирует спидометр?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу