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

Vermilion

Искусственный Интеллект
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,637
1,015
181
35
Зачем рендер помещать в интервал, спустя 1 минуту у тебя уже будет 20 активных рендеров, которые стакаются каждый раз. Спустя 10 минут у тебя просто упадет клиент
 
Реакции: XDeveluxe

Vermilion

Искусственный Интеллект
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,637
1,015
181
35
Чрезмерное количество рендеров влияет на работу клиента. Код, который находится внутри, выполняется каждый кадр, ~60 раз в секунду.
По хорошему, нужно контролировать количество рендеров и включать, отключать их по мере необходимости. Но, смотря на код в оперсорс проектах, впечатление складывается порой совсем иное.
Код:
mp.events.add('render', this.render)

Код:
mp.events.remove('render', this.render)
 

enotit

Высший разум
High developer
BackEnd developer
13 Ноя 2020
1,767
571
187
22
Подтверждаю предыдущего оратора. Не знаю насколько полезно, но пусть будет.
mp.events.add - метод, который добавляет слушателя события. В данном случае, у тебя стрелочная функция является слушателем (то что будет вызываться, при срабатывании действия).
"render" - событие, которое вызывается каждый тик (игровую отрисовку экрана). Тут же сразу, чем меньше таких слушателей - тем лучше, тем быстрее будет работать твой код.
Если таких 1-2 прекрасно, 20-100... Уже вопросики к оптимизации. Кто-то такие функции вызывает из одного слушателя, но это уже вкусовщина.
setInterval - вызывает, то что находится внутри, также, каждые n-секунд. Соответственно, у тебя каждые n-секунд создаются слушатели. Какой эффект от этого ожидал - не понятно.

Попробуй логировать не только этапы, но и переменные, которые имеются.


Слёзно прошу, не делать такую вложенность...
 

Vermilion

Искусственный Интеллект
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,637
1,015
181
35
Вот так по идее должно работать, но на сервере не проверял, писал в редакторе форума
JavaScript:
mp.events.add('render', (nametags: [PlayerMp, number, number, number][]) => {
    const { graphics } = mp.game;
    for (const nametag of nametags) {
        const [player, x, y, distance] = nametag;
        if (distance > 50) continue;
        graphics.drawText(player.name, [x, y], {
            font: 0,
            color: [255, 255, 255, 255],
            scale: [0.3, 0.3],
            outline: true,
        });
    }
});
 

PATRIOT

Начинающий специалист
12 Окт 2020
305
50
92
Почему то nametags считается как undefined. Даже когда другой игрок рядом
 

Vermilion

Искусственный Интеллект
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,637
1,015
181
35

Vermilion

Искусственный Интеллект
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,637
1,015
181
35
Ну значит вот так:
JavaScript:
mp.events.add("render", () => {
    const { x, y, z } = mp.players.local.position;
    mp.players.forEachInStreamRange((target) => {
        const { x: targetX, y: targetY, z: targetZ } = target.getCoords(true);
        const dist = mp.game.system.vdist(x, y, z, targetX, targetY, targetZ);
        if (dist > 50) return;
        mp.game.graphics.drawText(
            `${target.name}`,
            [x, y, z + 1.5],
            {
                font: 0,
                color: [255, 255, 255, 255],
                scale: [0.25, 0.25],
                outline: true,
                centre: true,
            },
        );
    });
});
 
Последнее редактирование:

Justin_Games

Активный участник
5 Дек 2020
66
28
75
JavaScript:
    const drawTags = () => {
        const { position } = mp.players.local;

        mp.players.forEachInRange(new mp.Vector3(position.x, position.y, position.z), 50, player => {
            const pos = mp.game.graphics.world3dToScreen2d(player.position.x, player.position.y, player.position.z);
            if(!pos) return;

            mp.game.graphics.drawText(player.name, [pos.x, pos.y], {
                font: 0,
                color: [255, 255, 255, 255],
                scale: [0.3, 0.3],
                outline: true,
            });
        })
    }
    mp.events.add('render', drawTags);
 
Реакции: Swayze

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,183
1,882
216
28

Justin_Games

Активный участник
5 Дек 2020
66
28
75

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,183
1,882
216
28
Окак, походу пересматривать вики порой полезно)
Просто для информации: render принимал nametags ещё в 2018, поэтому не знаю с чего такая информация, но не суть.
Это давно так работает, а вот почему у человека может приходить туда null/undefined - мыслей у меня нет.
 

PATRIOT

Начинающий специалист
12 Окт 2020
305
50
92
Всем спасибо за помощь. Неймтеги были сделаны правильно, но в другом месте я просто выключал все рендеры после авторизации.
У кого возникли подобные проблемы, обратите внимание, не выключаются ли у вас все рендеры в каком-то месте
 
Реакции: XDeveluxe

piokxxixx

Новый участник
27 Ноя 2025
3
0
1
Добрый день всем, пишу на счет nametag. У меня немного другая проблема, сам nametag работает. Проблема заключается в следующем. Вообщем когда игрок другой садиться в машину, ну и я следом. Мы начинаем ехать на машине, а nametag начинает немного прыгать (в движении). Если на машине остановимся, все работает нормально. Подскажите пожалуйста в чем может быть проблема и как это решается, если кто знает
Всем спасибо!
 

Vermilion

Искусственный Интеллект
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,637
1,015
181
35
Это не исправить, из за скорости рендер не успевает новую позицию обновить
 

johndoe

Начинающий специалист
10 Май 2025
182
73
40

Ну вообще немного можно улучшить это состояние, когда при подсчёте позиции учитываешь то, бежит/летит/плывет ли игрок в какую-либо сторону и слегка наперёд указывать коорды.

Вот старый пример на alt:V
 
Реакции: qweqweqwe123123123

Vermilion

Искусственный Интеллект
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,637
1,015
181
35
Я всегда стараюсь как можно меньше кода использовать в рендере. Лучше давать приоритет производительности, чем по итогу получить очередной оникс
 
Реакции: XDeveluxe

johndoe

Начинающий специалист
10 Май 2025
182
73
40

В любом случае каждый тик игры забирать скорость пэда и добавить обычные операции по типу сложения и/или умножения - не столь критическая нагрузка)

Это они еще про while(true) {} и setInterval(() => {}, 0) не знают)))))))))))))))))))))))))))))))))))))
 
Реакции: piokxxixx

piokxxixx

Новый участник
27 Ноя 2025
3
0
1
Понял, спасибо большое ! Очень сильно помогли.