T_T; dummy position problem

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
:cry: b’cos i’m can’t fix it
help me please

Code without indention is not really readable, so here comes just generic advice:

You code changes the position of self.dummy in several places, for example Move.stepplayer (a task!). Obviously one of these lines changes the position of self.dummy BEFORE you can click the mouse for the first time.

A dummy way to debug would be to place “print” commands before all lines of code which change the position of self.dummy (search for “setPos” etc.), and then observe what happens.

enn0x

thank you for your advice
ennox

i will try it :angry:

lass 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()&lt;.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)

        
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)

    	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

some one help this dude i cant figure it out either, never used actors and i dont have the girl model.

:smiley: yes i can fix it now

the problem is in task stepplayer

i should init self.point = self.dummy.getPos()
but i init self.point = Point3.zero()

thx for your advice :laughing:
it was a little problem 555