I think this will help you.
from direct.showbase.ShowBase import ShowBase
from direct.task import Task
from direct.gui.DirectGui import DirectWaitBar, DirectButton, DirectLabel
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.disableMouse()
self.camera.setPos(0, -20.0, 5)
self.bar = DirectWaitBar(pos=(0, 0, -0.7), range=(100), value=(100))
self.button = DirectButton(text = ("Start over?"), scale=.1, command=self.reset)
self.button.hide()
self.taskMgr.doMethodLater(0.09, self.life, "life-")
self.label = DirectLabel(text="Game Over!", scale=0.1, pos=(0, 0, 0.2))
self.label.hide()
self.environ = self.loader.loadModel("environment")
self.environ.reparentTo(self.render)
self.box = self.loader.loadModel("box")
self.box.reparentTo(self.render)
camera.lookAt(self.box)
camera.reparentTo(self.box)
self.speed = 10.0
self.move_forward = None
self.move_back = None
self.move_left = None
self.move_right = None
self.accept("w", self.setMove, ["forward", True])
self.accept("w-up", self.setMove, ["forward", None])
self.accept("s", self.setMove, ["back", True])
self.accept("s-up", self.setMove, ["back", None])
self.accept("a", self.setMove, ["left", True])
self.accept("a-up", self.setMove, ["left",None])
self.accept("d", self.setMove, ["right", True])
self.accept("d-up", self.setMove, ["right",None])
self.taskMgr.add(self.Move, "move")
def setMove(self, name, vector):
if name == "forward": self.move_forward = vector
if name == "back": self.move_back = vector
if name == "left": self.move_left = vector
if name == "right": self.move_right = vector
def Move(self, task):
if self.move_forward != None:
self.box.setY(self.box.getY()+self.speed*globalClock.getDt())
if self.move_back != None:
self.box.setY(self.box.getY()-self.speed*globalClock.getDt())
if self.move_left != None:
self.box.setX(self.box.getX()-self.speed*globalClock.getDt())
if self.move_right != None:
self.box.setX(self.box.getX()+self.speed*globalClock.getDt())
return task.again
def life(self, task):
if (self.bar['value'] >= 0):
self.bar['value'] -= 1
else:
taskMgr.remove("move")
taskMgr.remove("life-")
self.label.show()
self.button.show()
return task.done
return task.again
def reset(self):
self.move_forward = None
self.move_back = None
self.move_left = None
self.move_right = None
self.box.setPos(0, 0, 0)
self.bar['value'] = 100
self.taskMgr.add(self.Move, "move")
self.taskMgr.doMethodLater(0.09, self.life, "life-")
self.button.hide()
self.label.hide()
app = MyApp()
app.run()