Доступ к ShowBase из других классов - PullRequest
0 голосов
/ 21 мая 2019

Я хотел бы получить доступ к ShowBase и его атрибутам из другого класса, определенного вне ShowBase. Код ниже показывает проблему в точности

from direct.showbase.ShowBase import ShowBase
from direct.gui.DirectGui import *

class Core(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)
        ButtonBar()


class ButtonBar():
    def __init__(self):
        self.btnsr = DirectButton(parent=pixel2d) # how do I access ShowBase from this class?


core = Core()
core.run()

С текущим кодом я не могу перекинуть родительский btnsr в pixel2d, так как ButtonBar не имеет доступа к ShowBase. Как получить доступ к ShowBase, сохраняя код разделенным на два класса

1 Ответ

0 голосов
/ 21 мая 2019

На этот вопрос ответили в другом форуме.Ответ Тауматурга ниже

То, что у вас есть, должно работать, и действительно, на моей машине это работает.

Однако есть одна проблема: вы не установили масштаб на своей кнопке,и поскольку pixel2d использует масштаб в 1 единицу панды на пиксель (я думаю, что это так), размер кнопки по умолчанию слишком мал, чтобы ее было легко увидеть.Если вы увеличите масштаб (скажем, «300»), вы должны увидеть его в левом верхнем углу окна (происхождение pixel2d).

(Если вы не видите какую-либо ошибкучто я, конечно, не понимаю, в каком случае: что вы видите на своем конце?)

В целом, если я не сильно ошибаюсь, ShowBase устанавливает глобальную переменную с именем «base», котораянаряду с несколькими другими глобально доступными вещами (включая «render» и «pixel2d») должны быть доступны практически из любого места.

Таким образом, вы можете делать такие вещи:

from direct.showbase.ShowBase import ShowBase
from direct.gui.DirectGui import *

class Core(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)
        self.cat = "Kitty"

class SomeOtherClass():
    def __init__(self):
        print (base.cat)
        print (base.win.getSize())

core = Core()
mew = SomeOtherClass()
core.run()

Который должен напечатать «Kitty», а затем «LVecBase2i (,)», где и - ширина и высота окна - в моем случае они 800 и 600, соответственно.

(вызов«запускать» излишний запуск операторов print в приведенном выше примере.)

...