Проблема с реализацией Screen Fader'а -
Ejikin91 - 25.11.2018
Ребята, привет. Реализую затухающий экран, за основу взял этот скрипт
https://sampforum.blast.hk/showthread.php?tid=454681
Текущий код выглядит вот так:
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;
}
Проблема: При первом запуске одной из функций Background_FadeIn или Background_FadeOut, затухание/появление происходит не плавно, с лагами (выяснил так же, что лагает примерно до 150-ой итерации альфа-канала). Последующие запуски функций происходят плавно, т.е. при спавне и смерти все хорошо.
Если убрать затухание при подключении игрока, лаги анимации произойдут при спавне, и все последующие вызовы функции будут нормальные.
В чем может быть проблема? Можно ли это как нибудь исправить?
Re: Проблема с реализацией Screen Fader'а -
White_116 - 25.11.2018
ТЫ же в курсе что это глобальный ТД, и альфа у тебя при двух игроках будет меняться хаотично?
Re: Проблема с реализацией Screen Fader'а -
Ejikin91 - 25.11.2018
Quote:
Originally Posted by White_116
ТЫ же в курсе что это глобальный ТД, и альфа у тебя при двух игроках будет меняться хаотично?
|
Да, разумеется вкурсе. Но на самом деле, все может работать на одном текстдраве, т.к. изменение TextDrawBoxColor будет видно только когда мы покажем этот текстдрав игроку через TextDrawShowForPlayer. Я тестировал эту штуку на сервере в двух окнах. На двух игроках параллельно нормально работало затухание и растухание.
В общем, пока для тестов перевел на глобальный тексдрав, чтобы посмотреть, как будет работать.
А проблема еще в оригинальном коде с PlayerTextDraw была.
Re: Проблема с реализацией Screen Fader'а -
White_116 - 26.11.2018
Ты же в курсе, что синхра игрока составляет 40мс, это примерно 25 кадров. Зачем вызывать так часто обновление тд, пожалей траффик игроков.