import bgefrom mathutils import Vector# из модуля mathutils импортировать Vector z = Vector((0,0,1))def init(): bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback) def callback(object, point, normal): sc = bge.logic.getCurrentScene() sl = sc.objectsInactive['sled'] ob = sc.addObject(sl) a = object.getAxisVect(z) ob.alignAxisToVect(a,0,1) a = ob.getAxisVect(z) ob.worldPosition = object.worldPosition obj,point,normal = ob.rayCast(ob.worldPosition-a*2) if obj: print(point) ob.worldPosition = point+a*0.03 ob.alignAxisToVect(normal,2,1)
>> gr.collisionCallbacks.append(callback) # вызов процедуры callback ... нет, в данном случае происходит добавление вызова функции когда случается коллизия ...... то есть callback не вызывается в этой строке, а добавляется в список и когда на поыверхность что-то падает, то вызывается из этого списка с указанием объекта, точки и нормали соприкосновения ...
... сама же обработка вызовов скрыта внутри bge (это внутренняя логика) ...https://docs.blender.org/api/2.79/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionCallbacks
... у меня был проект на плоскости с треками и следом ( https://sungreen.github.io/projects/veterbot/veterbot.html ), но рассчитывал всё через в скриптах ...... и отложил идею делать на неровной поверхности из-за усложнения расчётов ...... поэтому у меня интерес к этой теме тоже есть ...
сейчас роясь в своих архивах набрёл на скопированный мною текст. Ссылку, откуда скопировал, к сожалению не сохранил.
Цитироватьсейчас роясь в своих архивах набрёл на скопированный мною текст. Ссылку, откуда скопировал, к сожалению не сохранил. Книга называется "Написание скриптов для Blender 2.49", я её в 2010 году переводил: http://striver00.ru/files/Scripting_Blender_2.49_ru.pdf
Книга называется "Написание скриптов для Blender 2.49", я её в 2010 году переводил: http://striver00.ru/files/Scripting_Blender_2.49_ru.pdf
def callback(object, point, normal):
Есть знание английского
продублирую свою просьбу-вопрос: в современном BGE возможно создание подобного следа?
ЦитироватьЕсть знание английскогоВот тут не угадал. Много лет себя пинками под зад заставляю переводить всякую хрень, в надежде, что в голове что-то останется, но эффект минимален.
Но, всё-таки сделаю предположение о том что в bge это невозможно, т.к. при формировании следа скрипт манипулирует координатами отдельных вершин. Раньше я не слышал, что в BGE это допустимо в реальном времени.
Мне попадался как-то ролик, в котором грузовик буксует образуя колею и летящие от колёс комки грязи, но мне помнится, или так показалось, что там было упоминание о 3D Max'е.
Я, вообще-то, считал Blender более продвинутым чем Max.
ЦитироватьМне попадался как-то ролик, в котором грузовик буксует образуя колею и летящие от колёс комки грязи, но мне помнится, или так показалось, что там было упоминание о 3D Max'е. Т.е. это заранее отрендеренный ролик. Ну так книжка, которую я упомянул, в основном про это, про моделирование и создание анимации. Это и для современных версий Блендера можно переписать.
import bgeimport randomdef init(): print("Init module\n\n\n")def order(): sc = bge.logic.getCurrentScene() ob = sc.objects['Plane'] ms = ob.meshes[0] v = random.randint(0,ms.getVertexArrayLength(0)) vs = ms.getVertex(0,v) vs.z += random.random()/2 vs.color = [random.random(),random.random(),random.random(),random.random()]
#46... есть игровая логика, когда ты нажимаешь P то запускается игровой движок с этой логикой, в этой логике указано что у тебя установлены коллизии на объекты и если они срабатывают то выполнение программы прерывается и выполняется callback вызов указанной функции ...... то есть при загрузке модуля функции определяемые заголовком def не выполняются, они выполняются когда происходит какое-либо событие или выполняется условие в игровой логике ...
#51 ... этой строке идёт определение функции (def, define), то есть сама функция не выполняется, но определяется её вызов и содержание ...... далее по тексту можно вызвать код этой функции многократно ...