Не большой скрипт.
|
|
1GTV | Дата: Воскресенье, 27 Мая 2018, 15:44 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Ребят как можно реализовать система по типу анти-афк? Если объект стоит секунд 5 без действия то он удаляется?(Желательно Python)
Сообщение отредактировал 1GTV - Воскресенье, 27 Мая 2018, 15:45 |
|
| |
DivES | Дата: Воскресенье, 27 Мая 2018, 16:49 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| 1GTV, стоит, имеется в виду, в плане физики? То есть "засыпает", как это в Blender названо.
|
|
| |
1GTV | Дата: Воскресенье, 27 Мая 2018, 17:06 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| DivES, объект не меняет координаты свои в течении некоторого времени, и запускается функция допустим уничтожения самого объекта. Алгоритм: Координаты1, через 10-15сек опять берутся координаты2. Условие Если координаты1=координаты2, то объект уничтожается. Как то так
|
|
| |
DivES | Дата: Воскресенье, 27 Мая 2018, 17:33 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| 1GTV, Возможная реализация:
Код import bge cont = bge.logic.getCurrentController() delay = cont.sensors["delay"] obj = cont.owner position = obj.position if delay.positive: #по прошествии 5 секунд if obj.position==position: #если позиция не изменилась obj.endObject() #удаляем объект Знаю наверняка, что задержку можно реализовать как-то иначе, но пока что не узнал, как Скриншот с нужными сенсорами. У сенсора Delay ставим задержку на 300 (каждые 60 тиков - 1 секунда, значит 300 тиков - 5 секунд и т.д.) и галочку на "Повторять". Так же можешь прикрутить не только позицию, но и ориентацию, чтобы учитывался поворот объекта в пространстве Добавлено (27 Мая 2018, 17:33) --------------------------------------------- Стоп. Что-то работает не совсем так, как нужно)
Сообщение отредактировал DivES - Воскресенье, 27 Мая 2018, 17:23 |
|
| |
1GTV | Дата: Воскресенье, 27 Мая 2018, 17:47 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| DivES, хм, странно если даже двигаться все равно объект умирает.. Добавлено (27 Мая 2018, 17:47) ---------------------------------------------
Цитата DivES ( ) Стоп. Что-то работает не совсем так, как нужно) )))))
|
|
| |
DivES | Дата: Воскресенье, 27 Мая 2018, 18:24 | Сообщение # 6 |
заслуженный участник
Сейчас нет на сайте
| 1GTV, почти сделал! С минуты на минуту обновлю пост) Добавлено (27 Мая 2018, 18:24) ---------------------------------------------
Код import bge cont = bge.logic.getCurrentController() delay = cont.sensors["delay"] own = cont.owner if own["x"]!=own.position[0] or own["y"]!=own.position[1] or own["z"]!=own.position[2]: own["x"] = own.position[0] own["y"] = own.position[1] own["z"] = own.position[2] elif delay.positive: #по прошествии 5 секунд if own.position[0]==own["x"] and own.position[1]==own["y"] and own.position[2]==own["z"] : #если позиция не изменилась own.endObject() #удаляем объект В общем смотри, этот вариант работает. Но тут ужасные костыли) x, y, z - свойства, которые нужно добавить к объекту. Это сделано просто для того, чтобы переменные можно было использовать ещё до объявления. Есть идеи, как это сделать правильно - пиши, я не соображаю сейчас
|
|
| |
1GTV | Дата: Воскресенье, 27 Мая 2018, 18:41 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| DivES, спасибо огромное, я тоже уже не первый час торчу с этим. У меня задумка была сделать через цикл По типу: Цикл: i=0 pos[i] = own.position i +=1 if pos[i]==pos[i-1]: t = threading.Timer(10.0, func) t.start() а в функции проверялось через 10 секунд, опять условие и происходило действия
|
|
| |
DivES | Дата: Понедельник, 28 Мая 2018, 01:06 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| 1GTV, переделал. В принципе, сейчас выглядит уже достаточно правильно. Воспользуйся! В любом случае, гораздо более правильно и красиво программировать при помощи функций и модулей
Код import bge
global position #создаём глобальную переменную, которая будет хранить список position = []
def main(cont): cont = bge.logic.getCurrentController() delay = cont.sensors["delay"] own = cont.owner #первые три строчки по стандарту global position #прописываем перед использованием глобальной переменной if position!=list(own.position): #преобразуем в список с помощью list(), иначе попросту не работает position = list(own.position) else: if delay.positive: own.endObject() Скриншот того, как подключать модуль. На этом задача уже точно разрешена
|
|
| |