25.11.2018, 11:34
Ребята, привет. Реализую затухающий экран, за основу взял этот скрипт https://sampforum.blast.hk/showthread.php?tid=454681
Текущий код выглядит вот так:
Проблема: При первом запуске одной из функций Background_FadeIn или Background_FadeOut, затухание/появление происходит не плавно, с лагами (выяснил так же, что лагает примерно до 150-ой итерации альфа-канала). Последующие запуски функций происходят плавно, т.е. при спавне и смерти все хорошо.
Если убрать затухание при подключении игрока, лаги анимации произойдут при спавне, и все последующие вызовы функции будут нормальные.
В чем может быть проблема? Можно ли это как нибудь исправить?
Текущий код выглядит вот так:
Code:
#define FADE_IN_SPEED 5 #define FADE_OUT_SPEED 5 #define RGBToHex(%0,%1,%2,%3) %0 << 24 | %1 << 16 | %2 << 8 | %3 forward Background_FadeIn(playerid, A); forward Background_FadeOut(playerid, A); static Text:TD_Background; public OnGameModeInit() { TD_Background = TextDrawCreate(320.0, 0.0, "_"); TextDrawUseBox(TD_Background, 1); TextDrawLetterSize(TD_Background, 1.0, 49.6); TextDrawTextSize(TD_Background, 1.0, 640.0); TextDrawBoxColor(TD_Background, 0x00000000); TextDrawAlignment(TD_Background, 2); return 1; } public Background_FadeIn(playerid, A) { TextDrawBoxColor(TD_Background, RGBToHex(0,0,0,A)); TextDrawShowForPlayer(playerid, TD_Background); if (A) SetTimerEx("Background_FadeIn", FADE_IN_SPEED, false, "id", playerid, A-1); else TextDrawHideForPlayer(playerid, TD_Background); } public Background_FadeOut(playerid, A) { TextDrawBoxColor(TD_Background, RGBToHex(0,0,0,A)); TextDrawShowForPlayer(playerid, TD_Background); if (A < 255) SetTimerEx("Background_FadeOut", FADE_OUT_SPEED, false, "id", playerid, A+1); } public OnPlayerRequestClass(playerid, classid) { Background_FadeOut(playerid, 0); // Затухание экрана при подключении игрока return 1; } public OnPlayerSpawn(playerid) { Background_FadeIn(playerid, 255); // "Растухание" экрана при спавне игрока return 1; } public OnPlayerDeath(playerid, killerid, reason) { Background_FadeOut(playerid, 0); // Затухание экрана при смерти игрока return 1; }
Если убрать затухание при подключении игрока, лаги анимации произойдут при спавне, и все последующие вызовы функции будут нормальные.
В чем может быть проблема? Можно ли это как нибудь исправить?