This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Вопрос C# событие Tick

E-Exception

Участник портала
3 Июл 2022
104
17
59
23
Я столкнулся с проблемой. Такое ощущение, что вызов события идет с запозданием, т.к при рендере текста над игроком, положение этого текста на экране (при вращении камерой) не соответствует действительному положению игрока в этом фрейме. Так ведь не должно быть, верно?
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,781
1,580
211
28
Было бы лучше, если бы ты приложил код, который у тебя работает не так и описал что именно тебя не устраивает.
C# событие Tick - JS событие render, которое срабатывает каждый кадр.
 

E-Exception

Участник портала
3 Июл 2022
104
17
59
23
Код:
float currentX = 0, currentY = 0;
RAGE.Game.Graphics.GetScreenCoordFromWorldCoord(player.Position.X, player.Position.Y, player.Position.Z, ref currentX, ref currentY);
RAGE.Game.UIText.Draw($"[{player.RemoteId}] " + player.Name, new Point((int)(currentX * screenX), (int)(currentY * screenY) - 40), 1, System.Drawing.Color.White, RAGE.Game.Font.ChaletComprimeCologne, true);

Если быстро вращать камерой (или проехать на машине), то можно заметить, что определение позиции игрока отстает от его реального положения в кадре. Если прекратить движение, то всё отображается корректно
 

E-Exception

Участник портала
3 Июл 2022
104
17
59
23
Это ведь может быть связано с тем, что процессор перегружается? Это отдельным потоком обрабатывается?
 

E-Exception

Участник портала
3 Июл 2022
104
17
59
23
Демо с такой же проблемой у scaleform
C#:
Vector3 Rotation = veh.GetRotation(0);
Vector3 Scale = new Vector3(2.5f, 1.0f, 0.0f);
Vector3 Position = RAGE.Game.Entity.GetOffsetFromEntityInWorldCoords(veh.Handle, 0.5f, 0.7f, 0.85f) + veh.Right();

rpm.Render3D(Position, Rotation, Scale); //Scaleform rpm;

P.S Еще не пойму почему ротация скейлформы меняется иногда некорректно, но это уже другой вопрос)
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,781
1,580
211
28
Если ты едешь на машине, то нужно брать позицию машины, а не игрока.
Потому что когда игрок в машине, то его позиция обновляется реже, это старая проблема рейджа.
 

Exception

Новый участник
6 Фев 2023
11
0
20
Ну скейлформа берет координаты именно машины, а ее вот так колбасит. А отображение из прошлого примера я записать не смог, второй игрок нужен)
 

Exception

Новый участник
6 Фев 2023
11
0
20
Щас зайду на сервер запишу тогда демо еще и по первому примеру
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,781
1,580
211
28
В таком случае только вероятность того, что рейдж обновляет данные не так часто, как у тебя успевает срабатывать Tick (он же render). Если это так, то только разработчик рейджа может это исправить, на вряд ли есть другие способы.
 

mippoosedev

Гуру
BackEnd developer
2 Мар 2021
292
127
100
playerPos поменяй на свою позицию, на которой ты хочешь что-либо отрисовать(у меня в неймтегах это сделано, поэтому player)

P.S На чем спидометр делал? Scaleforms? o_0


JavaScript:
if (mp.players.local.vehicle) {
                let velocity = mp.players.local.vehicle.getVelocity();
                let frameTime = mp.game.gameplay.getFrameTime();
                velocity.x *= frameTime
                velocity.y *= frameTime
                velocity.z *= frameTime
                playerPos.x += velocity.x
                playerPos.y += velocity.y
                playerPos.z += velocity.z
            }
 

E-Exception

Участник портала
3 Июл 2022
104
17
59
23
Вот умножение скорости на время кадра уже похоже исправит проблему спидометра, спасибо, сейчас попробую (Хз почему сам не догадался)
Да, спидометр возле машины отрисовываю через скейлформы
 

mippoosedev

Гуру
BackEnd developer
2 Мар 2021
292
127
100
Тут именно на ускорение нужно домножать, фиксит проблему трясущихся неймтегов, когда люди идут в машине.

P.S Спидометр бомбезный, спизжу позаимствую идею(если допру как эти скейлформы делать )
 

E-Exception

Участник портала
3 Июл 2022
104
17
59
23
Если ты не делаешь дрифт или какой нибудь гоночный сервер, составляющий мне конкуренцию, то я могу просто любезно отправить тебе мой скрипт для примера)
P.S На ScriptHookV есть такой же спидометр, я взял идею с него и перенес в рейдж, так что скрипт получается даже не совсем мой
 

mippoosedev

Гуру
BackEnd developer
2 Мар 2021
292
127
100
Спасибо, попробую лучше сам в свободное время
 

E-Exception

Участник портала
3 Июл 2022
104
17
59
23
Вот демо по этому коду, прямо видно как позиция плавает по сущности...
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,781
1,580
211
28