Проблема с реализацией Screen Fader'а
#1

Ребята, привет. Реализую затухающий экран, за основу взял этот скрипт 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-ой итерации альфа-канала). Последующие запуски функций происходят плавно, т.е. при спавне и смерти все хорошо.
Если убрать затухание при подключении игрока, лаги анимации произойдут при спавне, и все последующие вызовы функции будут нормальные.

В чем может быть проблема? Можно ли это как нибудь исправить?
Reply
#2

ТЫ же в курсе что это глобальный ТД, и альфа у тебя при двух игроках будет меняться хаотично?
Reply
#3

Quote:
Originally Posted by White_116
View Post
ТЫ же в курсе что это глобальный ТД, и альфа у тебя при двух игроках будет меняться хаотично?
Да, разумеется вкурсе. Но на самом деле, все может работать на одном текстдраве, т.к. изменение TextDrawBoxColor будет видно только когда мы покажем этот текстдрав игроку через TextDrawShowForPlayer. Я тестировал эту штуку на сервере в двух окнах. На двух игроках параллельно нормально работало затухание и растухание.
В общем, пока для тестов перевел на глобальный тексдрав, чтобы посмотреть, как будет работать.
А проблема еще в оригинальном коде с PlayerTextDraw была.
Reply
#4

Ты же в курсе, что синхра игрока составляет 40мс, это примерно 25 кадров. Зачем вызывать так часто обновление тд, пожалей траффик игроков.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)