Я тут попробовал полигоны подвигать, скорее прицениться, что надо, для фейковой системы частиц на полигонах, вместо объектов.
Как видно на картинке, у вас кругом ни льдинки пока что объект представляет собой только два квадратных полигона, которые я и двигаю скриптом. в одном случае просто перемещаю вертексы полигона, а во втором вроде как перемещаю координату полигона, и пересчитываю координаты вертексов, просто суммирую. Вроде как прикидка для создания класса будущей частицы. У этого же полигона изменяю размер, через изменение длинны векторов к его вертексам. Если что, то этот полигон на картинке справа. Там же видно, что вполне можно пересчитать физические границы меша, правда сильно сомневаюсь, что получится прикрутить нормальную коллизию, это так, баловство.
Код скрипта, мягко говоря, недоработанный:
import bge
import mathutils
import random
cont = bge.logic.getCurrentController()
own = cont.owner
sens = cont.sensors['Always']
mesh = own.meshes[0]
# Этот полигон я буду двигать повертексно
pol0 = mesh.getPolygon(0)
v01 = mesh.getVertex(0, pol0.v1)
v02 = mesh.getVertex(0, pol0.v2)
v03 = mesh.getVertex(0, pol0.v3)
v04 = mesh.getVertex(0, pol0.v4)
# А этот через координату полигона
pol1 = mesh.getPolygon(1)
# заодно с размером побалуюсь.
size = own['size'] = random.random()
if 'pos' not in own:
own['pos'] = pol1Pos = mathutils.Vector([0.0, 0.0, 1.0])
else:
pol1Pos = own['pos']
# Получаю вертексы из полигона
# устанавливаю вертексам вектора смещения относительно цетра полигона
v11 = mesh.getVertex(0, pol1.v1)
v11Pos = mathutils.Vector([-1.0 * size, -1.0 * size, 0.0* size])
v12 = mesh.getVertex(0, pol1.v2)
v12Pos = mathutils.Vector([1.0 * size, -1.0 * size, 0.0 * size])
v13 = mesh.getVertex(0, pol1.v3)
v13Pos = mathutils.Vector([1.0 * size, 1.0 * size, 0.0 * size])
v14 = mesh.getVertex(0, pol1.v4)
v14Pos = mathutils.Vector([-1.0 * size, 1.0 * size, 0.0 * size])
# обновляю координаты
v11.XYZ = pol1Pos + v11Pos
v12.XYZ = pol1Pos + v12Pos
v13.XYZ = pol1Pos + v13Pos
v14.XYZ = pol1Pos + v14Pos
if sens.positive:
# обновляю координаты
v01.x = v01.x + 0.1
v02.x = v02.x + 0.1
v03.x = v03.x + 0.1
v04.x = v04.x + 0.1
# обновляю координату полигона
pol1Pos[0] -= 0.1
pol1Pos[1] += 0.1
own['pos'] = pol1Pos
# обновляю физику
own.reinstancePhysicsMesh()
Комментариев нет:
Отправить комментарий