here is a snipplet for getting the mouse position for a 2d game (2d orthographical lens)
you could use it to drag around objects or so…
from pandac.PandaModules import *
import direct.directbase.DirectStart
from direct.showbase.DirectObject import DirectObject
class Picking2D(DirectObject):
def __init__(self):
base.disableMouse()
base.setBackgroundColor(0.0, 0.0, 0.0, 1)
seg = LineSegs()
seg.setColor(VBase4(1,1,1,1))
seg.setThickness(1.0)
seg.moveTo(Point3(-20,0,-20))
seg.drawTo(Point3(20,0,-20))
seg.drawTo(Point3(20,0,20))
seg.drawTo(Point3(-20,0,20))
seg.drawTo(Point3(-20,0,-20))
np = render.attachNewNode(seg.create())
#setup 2d camera-lens
lens = OrthographicLens()
ratio = base.getAspectRatio()
lens.setFilmSize(100.0, 100.0/ratio)
base.cam.node().setLens(lens)
base.cam.setPos(0, -100, 0)
self.accept('mouse1', self.startPrintTask)
self.accept('mouse1-up', self.stopPrintTask)
taskMgr.add(self.moveCam, "moveCamTask")
def startPrintTask(self):
taskMgr.add(self.dragTask, "dragTask")
def stopPrintTask(self):
taskMgr.remove("dragTask")
def dragTask(self, task):
orig = self.getOrig()
dir = self.getDir()
if dir:
dest = orig + dir
print dest
return task.cont
def moveCam(self, task):
if not base.mouseWatcherNode.hasMouse(): return task.cont
mpos=base.mouseWatcherNode.getMouse()
# print mpos
p = Point2(0,0)
x = mpos.getX()
y = mpos.getY()
if x < -0.65 or x > 0.65:
p.setX(x)
if y < -0.65 or y > 0.65:
p.setY(y)
if p.getX() != 0 or p.getY() != 0:
pos = base.cam.getPos()
factor = globalClock.getDt() * 100.0
pos.setX(pos.getX()+p.getX() * factor)
pos.setZ(pos.getZ()+p.getY() * factor)
base.cam.setPos(pos)
return task.cont
def getDir(self):
if not base.mouseWatcherNode.hasMouse(): return None
mpos=base.mouseWatcherNode.getMouse()
factor = base.cam.node().getLens().getFilmSize().getX()/2.0
x = mpos[0] * factor
z = (mpos[1]/base.getAspectRatio()) * factor
point = Point3(x,100,z)
dir = render.getRelativeVector(base.cam, point)
return dir
def getOrig(self):
origin = base.cam.getPos(render)
return origin
if __name__ == '__main__':
m = Picking2D()
run()