[Гайд] Как сделать появление частиц по окружности

NFlike

Новичок
Регистрация
20 Май 2024
Сообщения
1
хочу показать как можно сделать чтобы частицы появлялись вокруг какой-либо оси(как из видео ниже), нам понадобятся знания тригонометрии.


I. теория:

Прежде чем мы перейдём к коду, для начало немного теории, как вообще работает окружность в тригонометрии?

Снимок экрана 2024-05-22 234202.png

синус - вертикаль
косинус - горизонталь
а - угол

синус и косинус измеряются в диапазоне от -1 до 1

ВАЖНО в синус и косинус нельзя присваивать угол, надо присвоить туда "радиан"

формула радиана(она нам пригодится):
rad = угол° ÷ 180 * PI

в качестве угла у нас будет переменная и в эту переменную мы будем всё время прибавлять число

также ролик ниже показывает как именно косинус и синус создают окружность:



II. реализация:
примечание так как основной код будет выполнятся в цикле в заместо привычного плейсхолдера %player% мы будем ставить %selected%

код будет состоять из 3-х событий: событие входа, функция(основная логика), цикл(воспроизводит функции)
2024-05-23_00.18.21.png

в событии входа включаем цикл
2024-05-23_00.18.29.png
теперь перейдём к самой функции:
2024-05-23_00.51.04.png

1) "блок присв. переменную +=", ставим переменную "%selected%angel" и прибавляем 5 (пятёрка это дистанция между частицами, чем она выше тем больше дистанция)

2) "блок присв. переменную =", присваиваем переменной "%selected%radian" переменную "%selected%angel" (нужно для нашей формулы радиан (rad = угол° ÷ 180 * PI) )

3) "блок присв. переменную / ", делим переменную "%selected%radian" на 180 (нужно для нашей формулы радиан (rad = угол° ÷ 180 * PI) )

4) "блок присв. переменную * ", умножаем переменную "%selected%radian" на число PI (нужно для нашей формулы радиан (rad = угол° ÷ 180 * PI) )

напомню мы конвертируем угл в радианы для того чтобы эти самые радианы поставить в синус и косинус

5)"блок присв. переменную синус ", устанавливаем "%selected%sin" нашу переменную с радианами "%selected%radian"

6)"блок присв. переменную косинус", устанавливаем "%selected%sin" нашу переменную с радианами "%selected%radian"

вы также можете через код умножить синус и косинус к примеру на 2, это увеличит радиус окружности

7) "блок присв. переменную установить значение в местоположении", в переменную от которой будет сохранятся результат "%selected%posPartiicle" ;
местоположение из которой будет браться координаты можете поставить любую координату в мире(можете также взять место игрока как у меня) ;
режим установки X(+=) ставим переменную "%selected%sin" ;
режим установки Y(+=) можете сюда ничего не ставить, но если место у вас от игрока то поставьте 1, это для того чтобы частицы были на уровне игрока ;
режим установки Z(+=) ставим переменную "%selected%cos"

8) "блок игровое действие частица" в местоположение ставим переменную "%selected%posParticle" и выбираете любой партикл



ну и в конце воспроизводим функцию в цикле(чем больше запускаемых функций, тем больше воспроизведётся частиц)
2024-05-23_01.15.20.png
 
Последнее редактирование:

NFlike

Новичок
Регистрация
20 Май 2024
Сообщения
1
примечание ребят, я сейчас заметил что в коде уже есть функция перевода угла в радианы (установить переменную > число > радианы(rad) ), так что использовать формулу "rad = угол° ÷ 180 * PI" не надо
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
357
ну и в конце воспроизводим функцию в цикле(чем больше запускаемых функций, тем больше воспроизведётся частиц)
уберите мои глаза
асинк функцию просто придумали, гении на топ кодерах:
Сообщение объединено:

примечание, хоть асинк не самый лучший вариант, он точно лучше твоего решения
асинк распределяет нагрузку, и выполняет код очень быстро
 

MakcMakc

Участник
Регистрация
6 Ноя 2023
Сообщения
3
уберите мои глаза
асинк функцию просто придумали, гении на топ кодерах:
Сообщение объединено:

примечание, хоть асинк не самый лучший вариант, он точно лучше твоего решения
асинк распределяет нагрузку, и выполняет код очень быстро
Можешь рассказать подробнее? например, почему это уменьшает нагрузку я представляю, вероятно из за последовательности выполняемых операций, но почему это ускоряет выполнение кода? Разве это не приводит к последовательному а не паралельному выполнению операций?
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
357
Можешь рассказать подробнее? например, почему это уменьшает нагрузку я представляю, вероятно из за последовательности выполняемых операций, но почему это ускоряет выполнение кода? Разве это не приводит к последовательному а не паралельному выполнению операций?
синк функции выполняются просто мгновенно, им не нужно создавать параллельную операцию, ты прав
но мгновенные функции очень быстро выйдут в лимит (я говорю про рекурсивные)
асинк функции создают параллельные операции, это занимает немного времени, но это время точно меньше 1 тика, следовательно асинк функции точно быстрее синк функций (в рекурсиях)
я не сильно углублялся в плагине к+, но насколько я понял, асинк функция перед тем как создать свою операцию ожидает момент, когда родительская строка сбавит обороты нагрузки, следовательно она оптимизируется под лимиты кода
 

MakcMakc

Участник
Регистрация
6 Ноя 2023
Сообщения
3
синк функции выполняются просто мгновенно, им не нужно создавать параллельную операцию, ты прав
но мгновенные функции очень быстро выйдут в лимит (я говорю про рекурсивные)
асинк функции создают параллельные операции, это занимает немного времени, но это время точно меньше 1 тика, следовательно асинк функции точно быстрее синк функций (в рекурсиях)
я не сильно углублялся в плагине к+, но насколько я понял, асинк функция перед тем как создать свою операцию ожидает момент, когда родительская строка сбавит обороты нагрузки, следовательно она оптимизируется под лимиты кода
Понял, то есть вся суть в том что код работает не по тикам а по более маленьким временным промежуткам, я то всегда нагрузку мерял в районе 5 тиков и не задумывался что о факту операции выполняются менее чем за тик + асинк функции прикрутили немного мозгов от того она и дает меньше нагрузки
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
357
Понял, то есть вся суть в том что код работает не по тикам а по более маленьким временным промежуткам, я то всегда нагрузку мерял в районе 5 тиков и не задумывался что о факту операции выполняются менее чем за тик + асинк функции прикрутили немного мозгов от того она и дает меньше нагрузки
операции выполняются менее чем за тик, у тебя отправка сообщения занимает пару сотен НАНОсекунд
всё не в пределе 1 тика, всё намного быстрее, а уже счётчик действий выстраивается от 5 тиков
 

KucJIbIuCs

Участник
Регистрация
28 Май 2024
Сообщения
1
Почему у тебя на скрине 9 блоков установки, а в тексте твоём 8
 
Сверху