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,458
867
181
34
Зачем рендер помещать в интервал, спустя 1 минуту у тебя уже будет 20 активных рендеров, которые стакаются каждый раз. Спустя 10 минут у тебя просто упадет клиент
 
Реакции: XDeveluxe

Vermilion

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

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

enotit

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

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


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

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,458
867
181
34
Вот так по идее должно работать, но на сервере не проверял, писал в редакторе форума
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
302
49
92
Почему то nametags считается как undefined. Даже когда другой игрок рядом
 

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,458
867
181
34

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,458
867
181
34
Ну значит вот так:
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
65
27
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
2,994
1,727
211
28

Justin_Games

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

XDeveluxe

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

PATRIOT

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