this is my player move code
[color=blue]class Move(DirectObject):
def __init__(self ,environ=None ,model='models/Girl2',
run='models/Girl2',pos=(0,0,0),scales=0.04,
hprs=(0,0,0)):
self.actor = Actor.Actor(model,{"run":run})
self.actor.setHpr(*hprs)
self.actor.setScale(scales)
self.dummy = render.attachNewNode('Pnode')
self.dummy.setPos(*pos)
self.actor.reparentTo(self.dummy)
self.actor.setPos(*pos)
self.environ = environ
self.point = Point3.zero() # position player to go
self.vel = Vec3.zero() #vecter direction
self.Playerspeed = 100.0 # Player speed
self.last = 0#for calculating dt in gameLoop
self.stop = 0
taskMgr.add(self.stepplayer, "stepplayer")
nodepath = self.dummy.attachNewNode(CollisionNode('frmcol'))
nodepath.node().addSolid(CollisionRay(0,0,300,0,0,-1))#add the solid to the new collisionNode
nodepath.node().setFromCollideMask(floorMASK)#allow selective masking
nodepath.setCollideMask(offMASK)#it's a from solid only.
##nodepath.show()
base.cTrav.addCollider(nodepath,Floor)#add to the traverser
Floor.addCollider(nodepath,self.dummy)
def moveto(self, position):
self.stop = 0
self.point = position
self.npLook = render.attachNewNode("npLook")
self.npLook.setPos(self.actor.getPos(render))
self.npLook.lookAt(position)
reducedH = self.actor.getH()%360.0
self.actor.setH(reducedH)
currH = self.actor.getH()
npH = self.npLook.getH()
newH = closestDestAngle(currH, npH + 180.0)
playerTurn = self.actor.hprInterval(.2, Point3(newH, 0, 0))
playerTurn.start()
self.vel = self.point-self.dummy.getPos()#destination from position
self.vel.normalize()#set magnitude to 1
self.vel*=self.Playerspeed#the magnitude of velocity is speed.
self.actor.loop("run")
def stepplayer(self,task):
dt = task.time - self.last#time elapsed since the last frame.
self.last = task.time#for calculating dt the next time
#self.correctPlayerZ()
self.dummy.setFluidPos(#fluidly update position based on velocity
self.dummy.getX()+self.vel.getX()*dt,
self.dummy.getY()+self.vel.getY()*dt,
self.dummy.getZ() )#let Floor worry about Z
self.vel = self.point-self.dummy.getPos()
if self.vel.lengthSquared()<.8 or self.stop :#Then consider yourself arrived.
self.stopWalkAnim()
self.vel=Vec3.zero()#stop moving.
else:
self.vel.normalize()#set magnitude to 1
self.vel*=self.Playerspeed
return Task.cont
def stopWalkAnim(self):
self.actor.stop("run")
self.actor.pose("run",5)
def collide(self, entry):
print "collide"
self.stop = 1
self.stopWalkAnim()
self.vel.normalize()
self.vel*=3
self.dummy.setPos(self.dummy.getPos()-self.vel)
self.vel=Vec3.zero()#stop moving.
def pushback(self, entry):
self.stop = 1
self.dummy.setPos(self.dummy.getPos()-self.vel)
[color=blue]class Player(Move):
def init(self,name=‘Girl’,model=‘models/Girl2’,run=‘models/Girl2’,
pos=(0,0,0),scales=0.04,ralphtag = 0,hprs=(0,0,0),environ=None,
solidname=‘otherplayer’,
virtue=0,concentrate=0,intellect=0,body=0,speed=0):
Move.init(self,environ=environ ,model=model,
run=run,pos=pos,scales=scales,
hprs=hprs)
self.name = name
self.ralphtag = ralphtag #tag order of conversation with ralph
self.scn=self.actor.attachCollisionSphere(solidname,0,0,200,120,playerMASK,offMASK)
self.scn.show()
self.CT = CollisionTraverser() #design def when player collide
self.cHandler = CollisionHandlerEvent()
self.cHandler.addInPattern("collide-%fn")
self.cHandler.addAgainPattern("again-%fn")
self.CT.addCollider(self.scn, self.cHandler)
self.accept('collide-player',self.collide)
self.accept('again-player',self.pushback)
self.virtue = virtue
self.concentrate = concentrate
self.intellect = intellect
self.body = body
self.speed = speed
taskMgr.add(self.checkcollide, "checkcollide")
self.accept('mouse3',self.tellpos)
[color=red]print self.dummy.getPos()
def tellpos (self):
print self.dummy.getPos()
def checkcollide(self,task):
self.CT.traverse(render) #check collision handler event of player
return Task.cont
[color=red]the problem is
when i call class player
Player(pos =(20,30,0))
it show in output that dummy’s position is color=red
but when i right click
it show in output that dummy’s position is [color=red](-0.476363, -0.714544, 0.068275)
why it’s not a same point?
any idea?
it make me cry
b’cos i’m can’t fix it
help me please