Все мне в нем нравится, но вот есть небольшая проблема - както медленно он работает. Например если свалить в кучу 30 объектов, то получаю около 15-30 fps, а если 40 объектов в кучу, то уже около 5-10 fps. Если разложить эти 40 объектов так чтобы они НЕ соприкасались друг с другом, то скорость значительно возрастает, но ведь мне то нужно чтобы они сталкивались :) Программу запускаю на машине - Athlon X2 2.2 GHz, RAM 2 GB.
И вот мне интиресно:
-такая сорость - это нормально для pyode?
-на сколько быстрее ode чем pyode?
-может надо знать какието премудрости чтобы эффективнее использовать pyode?
Вот привожу некоторые фрагменты кода, которые касаются pyode:
world = ode.World()
world.setGravity((0, -9.81, 0))
space = ode.Space()
#Вот таким образом создаю объекты
body = ode.Body(world)
m = ode.Mass()
m.setBox(density, lengths[0], lengths[1], lengths[2])
body.setMass(m)
geom = ode.GeomBox(space, (lengths[0], lengths[1], lengths[2]))
geom.setBody(body)
body.setPosition((x, y, 0))
#Это чтобы тело двигалось только в 2D
join2d = ode.Plane2DJoint(world)
join2d.attach(body, ode.environment)
#Эту функцию взял из туториала по pyode
def near_callback(args, geom1, geom2):
'''Callback function for the collide() method.
This function checks if the given geoms do collide and
creates contact joints if they do.
'''
# Check if the objects do collide
contacts = ode.collide(geom1, geom2)
# Create contact joints
world,contactgroup = args
for c in contacts:
c.setBounce(0.2)
c.setMu(5000)
j = ode.ContactJoint(world, contactgroup, c)
j.attach(geom1.getBody(), geom2.getBody())
#Этот блок каждый раз вызывается в главном цикле программы
contactgroup = ode.JointGroup()
n = 2
for i in range(n):
space.collide((world, contactgroup), near_callback)
world.step(dt / n)
contactgroup.empty()