Пятница, 29 Марта 2024, 10:52

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Blender и BGE » Не большой скрипт.
Не большой скрипт.
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() #удаляем объект

Знаю наверняка, что задержку можно реализовать как-то иначе, но пока что не узнал, как :D
Скриншот с нужными сенсорами.
У сенсора 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()

Скриншот того, как подключать модуль.
На этом задача уже точно разрешена B)
Форум игроделов » Движки для разработки игр и сложные системы разработки » Blender и BGE » Не большой скрипт.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг