I am having issues with my jumping… It kind of works, but it doesn’t quite. I cant seem to upload my file right now, but the code is here:
import direct.directbase.DirectStart
from direct.showbase.DirectObject import DirectObject
from direct.gui.OnscreenText import OnscreenText
from direct.gui.DirectGui import *
from direct.actor.Actor import Actor
from direct.task.Task import Task
from pandac.PandaModules import *
from direct.interval.IntervalGlobal import *
import random, sys, os, math
font = loader.loadFont("cmss12")
class game(DirectObject):
def __init__(self):
self.keyMap = {"forward":0, "backward":0, "left":0, "right":0, "jump":0}
base.win.setClearColor(Vec4(0,0,0,1))
base.enableParticles()
self.cTrav = CollisionTraverser()
self.terrain = loader.loadModel("Maps\map")
self.terrain.reparentTo(render)
self.alight = AmbientLight('alight')
self.alight.setColor(Vec4(0.3,0.3,0.3,1))
self.alightNP = render.attachNewNode(self.alight)
render.setLight(self.alightNP)
self.plight = PointLight('plight')
self.plight.setColor(Vec4(0.8,0.8,0.8,1))
self.plightNP = render.attachNewNode(self.plight)
self.plightNP.setPos(0,0,100)
render.setLight(self.plightNP)
self.highPoint = 3
self.jump = -0.1
self.isJumping = False
self.onGround = False
self.char = loader.loadModel("Models\littlebrother")
self.char.setScale(3,3,3)
self.char.reparentTo(render)
self.charSph = CollisionSphere(0,0,1,1)
self.charCol = CollisionNode("Cnone")
self.charCol.addSolid(self.charSph)
self.charCol.setFromCollideMask(BitMask32.bit(0))
self.charCol.setIntoCollideMask(BitMask32.allOff())
self.charSphNp = self.char.attachNewNode(self.charCol)
self.charSphNp.node().addSolid(self.charSph)
self.charHandler = CollisionHandlerQueue()
self.cTrav.addCollider(self.charSphNp, self.charHandler)
self.charSphNp.show()
base.disableMouse()
base.camera.setPos(0,20,12)
base.camera.lookAt(self.char)
base.camera.reparentTo(self.char)
self.label = DirectLabel(text="Weapon: None", text_bg=(0,0,1,0.5), text_fg=(0,0,0,1), pos=(-1.16,0,0.95), scale=(0.06), relief=None)
taskMgr.add(self.update, "Update")
self.accept("escape", sys.exit)
self.accept("w", self.setKey, ["forward",1])
self.accept("s", self.setKey, ["backward",1])
self.accept("a", self.setKey, ["left",1])
self.accept("d", self.setKey, ["right",1])
self.accept("space", self.setKey, ["jump",1])
self.accept("w-up", self.setKey, ["forward",0])
self.accept("s-up", self.setKey, ["backward",0])
self.accept("a-up", self.setKey, ["left",0])
self.accept("d-up", self.setKey, ["right",0])
self.accept("space-up", self.setKey, ["jump",0])
def setKey(self, key, value):
self.keyMap[key] = value
def update(self, task):
elapsed = globalClock.getDt()
self.startPos = self.char.getPos()
if(self.keyMap["left"] != 0):
self.char.setH(self.char.getH() + elapsed * 300)
if(self.keyMap["right"] != 0):
self.char.setH(self.char.getH() - elapsed * 300)
if(self.keyMap["forward"] != 0):
self.char.setY(self.char, -(elapsed * 10))
if(self.keyMap["backward"] != 0):
self.char.setY(self.char, +(elapsed * 10))
if(self.keyMap["jump"] != 0):
if(self.onGround):
self.isJumping = True
self.onGround = False
self.highPoint = self.char.getZ() + 1
if(self.isJumping):
if(self.jump <= self.highPoint):
self.jump += 0.5
else:
self.isJumping = False
else:
self.jump -= 0.7
if(self.jump > self.char.getZ() - self.highPoint):
self.jump = self.highPoint
self.char.setZ(self.char, +(0.02 * self.jump))
self.cTrav.traverse(render)
entries = []
for i in range(self.charHandler.getNumEntries()):
entry = self.charHandler.getEntry(i)
entries.append(entry)
entries.sort(lambda x,y: cmp(y.getSurfacePoint(render).getZ(),
x.getSurfacePoint(render).getZ()))
if(len(entries) > 0) and (entries[0].getIntoNode().getName() == "ground"):
self.char.setZ(entries[0].getSurfacePoint(render).getZ())
self.onGround = True
else:
self.onGround = False
#self.char.setPos(self.startPos)
return Task.cont
g = game()
run()
The jumping is slow and doesn’t start right away. I have no clue what is going on…
Thanks in advance,
IonDuel.