Создайте другой экземпляр клиента pybullet в классе python - PullRequest
0 голосов
/ 29 апреля 2020

Я использую Pybullet в классе python. Я импортирую это как import pybullet as p. Когда у меня есть несколько экземпляров класса, использующих pybullet, является ли класс p одинаковым для каждого экземпляра или «переменная» p уникальна для каждого экземпляра?

foo.py

import pybullet as p

class Foo:
    def __init__(self, counter):
        physicsClient = p.connect(p.DIRECT)
    def setGravity(self):
        p.setGravity(0, 0, -9.81)
(more code)

и main.py

from foo import Foo

foo1 = Foo(1)
foo2 = Foo(2)
foo1.setGravity()

будут setGravity() влиять на p в foo1 и foo2 или только на foo1?

1 Ответ

2 голосов
/ 29 апреля 2020

Вы можете использовать bullet_client, чтобы получить два разных экземпляра. вот так:

import pybullet as p
import pybullet_utils.bullet_client as bc


class Foo:
    def __init__(self, counter):
        self.physicsClient = bc.BulletClient(connection_mode=p.DIRECT)

    def setGravity(self):
        self.physicsClient.setGravity(0, 0, -9.81)


foo1 = Foo(1)
foo2 = Foo(2)
foo1.setGravity()
foo2.setGravity()

print("Adress of  foo1 bullet client 1 : " + str(foo1.physicsClient))
print("Adress of foo2 bullet client 2  : " + str(foo2.physicsClient))

Вывод:

Adress of  foo1 bullet client 1 : 
<pybullet_utils.bullet_client.BulletClient object at 0x7f8c25f12460>
Adress of foo2 bullet client 2  : 
<pybullet_utils.bullet_client.BulletClient object at 0x7f8c0ed5a4c0>

Как вы можете видеть здесь: у вас есть два разных экземпляра, каждый из которых хранится в другом адресе

См. ниже примеры из официального репозитория: https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/gym/pybullet_utils/examples/multipleScenes.py

...