I’m using the FPS() class found here
I’m trying to get the player to jump,
def jumpUpdate(self,task):
""" TODO make the player jump """
if self.readyToJump:
self.jump = 1
self.player.addLinearForce( LinearVectorForce(0.0, 0.0, 60.0))
self.player.removeLinearForce( LinearVectorForce(0.0, 0.0, 60.0))
else:
self.player.addLinearForce( LinearVectorForce(0.0, 0.0, 0.0))
return task.cont
it keeps saying AttributeError: ‘DynamicEntity’ object has no attribute ‘removeLinearForce’
Can someone help me?
There is no DynamicEntity.removeLinearForce:
class DynamicEntity(Entity):
forceNode = 0
actorNode = 0
def __init__(self):
self.actorNode = ActorNode("DynamicEntity")
NodePath.__init__(self,self.actorNode)
# init collision
self._collisionHandler = PhysicsCollisionHandler()
base.cTrav = CollisionTraverser()
def createForceNode(self):
# set up the ForceNode. This contains all the forces that
# act on this Entity.
self.forceNode = ForceNode("ForceNode")
self.attachNewNode( self.forceNode )
base.physicsMgr.attachPhysicalnode( self.actorNode )
def addLinearForce( self, force ):
if ( self.forceNode == 0 ):
self.createForceNode()
self.forceNode.addForce( force )
base.physicsMgr.addLinearForce( force )
def setCollisionSolid( self, solid ):
collNodePath = Entity.setCollisionSolid( self, solid )
base.cTrav.addCollider( collNodePath, self.collisionHandler() )
self.collisionHandler().addCollider( collNodePath, self )
def collisionHandler(self):
return self._collisionHandler
I’m pretty sure that you don’t want to remove the force there anyways.
Well then how do I keep the player from just rising up continually?
You probably will have to define it in dynamic entity so that it calls the method on the underlying force node.
Do you mean defining removeLinearForce()?
Found a solution:
def jumpUpdate(self,task):
""" TODO make the player jump """
if self.readyToJump:
Sequence(Func(self.player.addLinearForce,LinearVectorForce(0,0,self.gravity*2)), Wait(.5), Func(self.player.addLinearForce,LinearVectorForce(0,0,-self.gravity*2))).start()
return task.cont
still needs a jump filter though