I can’t for the life of me figure out why this won’t work. I did it the same way before, and it worked fine.
class InGameMenu(dObj):
def __init__(self):
self.menuKeys = {"enter": 0, "up": 0, "down": 0, "select": 0, "cancel": 0}
self.options = []
self.mainOptions = ["first", "second", "third"]
self.selection = 0
self.screen = "main"
if mLoop.menuOpen == True:
if self.screen == "main":
self.accept("arrow_up", self.setKeys, ["up", 1])
self.accept("arrow_up-up", self.setKeys, ["up", 0])
self.accept("arrow_down", self.setKeys, ["down", 1])
self.accept("arrow_down-up", self.setKeys, ["down", 0])
self.accept("space", self.setKeys, ["select", 1])
self.accept("lctrl", self.setKeys, ["cancel", 1])
elif mLoop.menuOpen == False:
self.ignoreAll()
def setKeys(self, key, value):
self.menuKeys[key] = value
return self.menuKeys[key]
def openMenu(self):
if mLoop.menuOpen == False and mLoop.writingDone == True: #mLoop.writingDone tells it not to run if the message box is open
mLoop.canMove = False #character can't move
mLoop.menuOpen = True
#Show screen
self.showMenuScreen()
else:
pass
self.scrollGameMenu()
def closeMenu(self):
mLoop.canMove = True
mLoop.menuOpen = False
def showMenuScreen(self):
#Show screen
self.firstScreen = OnscreenImage(image = "My Panda Games\\My Game\\PNGs\\menuScreen.png", pos = (640, 0, -480), scale = (640, 0, 480), parent = pixel2d)
self.firstScreen.setTransparency(TransparencyAttrib.MAlpha)
#return None
def selectOption(self, selection):
if self.screen == "menu":
if self.options[selection] == "first":
pass
elif self.options[selection] == "second":
self.screen = "second screen"
#return selection
def scrollDown(self):
if self.selection < len(self.options) - 1:
self.selection += 1
elif self.selection == len(self.options) -1:
self.selection = 0
print(self.selection)
return self.selection
def scrollUp(self):
if self.selection > 0:
self.selection -= 1
elif self.selection == 0:
self.selection = len(self.options) - 1
print(self.selection)
return self.selection
def scrollGameMenu(self, task):
if mLoop.menuOpen is True:
if self.menuKeys["up"] != 0:
self.scrollUp()
elif self.menuKeys["down"] != 0:
self.scrollDown()
elif self.menuKeys["select"] != 0:
self.selectOption(self.selection)
else:
pass
return task.cont
gMenu = InGameMenu()
#Wait for keypress
base.accept("enter", gMenu.openMenu)
base.taskMgr.add(gMenu.scrollGameMenu, "Scroll")
-
All of this is nestled inside a function called main(), which is the second-to-last function in the script.
-
The Task class is declared outside main() like this:
from direct.task import Task
- The Direct Object class is declared outside main() like this:
from direct.showbase.DirectObject import DirectObject as dObj
- mLoop stands for “main loop” and is declared outside of the class (but still inside the main function).
I think it’s trying to pass an argument to scrollGameMenu(). I just don’t know why.