Hi, I'm trying make a detection collision between graphicsitem, but when I use the method collidingItems it show collisions with all object in the scene. My scene have 800, 600 and my boundingRect to meu player object have the same size. What I thinking is happend is that my method shape are not override this way it just call the boundingRect and make the collision traet with it.
A piece of my code; BoundingRect = QtCore.QRectF(-20 - adjust, -22 - adjust, 800 + adjust, 600 + adjust) def boundingRect(self): return Monster.BoundingRect def shape(self): path = QtGui.QPainterPath() path.addRect(0, 0, 150, 150) #determina o shape, que sera base para detectar colissoes. return path by the way I am send all code to be easy see the problem. Just replace the images. []'s import sys import math from PyQt4 import QtCore, QtGui class Monster(QtGui.QGraphicsItem): adjust = 0.5 BoundingRect = QtCore.QRectF(-20 - adjust, -22 - adjust, 800 + adjust, 600 + adjust) speed = 8 def __init__(self): QtGui.QGraphicsItem.__init__(self) self.image = QtGui.QImage() self.image.load("monstrinhofree.png") self.image = self.image.scaled(100, 100, QtCore.Qt.KeepAspectRatio) self.image2 = QtGui.QImage() self.image2.load("monstrinhofree1.png") self.image2 = self.image2.scaled(100,100, QtCore.Qt.KeepAspectRatio) self.xpos, self.ypos = 344,520 self.frameControl = True self.timer = QtCore.QTimer() QtCore.QObject.connect(self.timer, QtCore.SIGNAL('timeout()'), self.timerEvent) self.timer.start(150) def boundingRect(self): return Monster.BoundingRect def shape(self): path = QtGui.QPainterPath() path.addRect(0, 0, 150, 150) #determina o shape, que sera base para detectar colissoes. return path def paint(self,painter, option, widget): #nuvem = QtGui.QImage() #nuvem.load("images/nuven.png") #nuvem2 = QtGui.QImage() #nuvem2.load("images/nuven2.png") if self.frameControl: painter.drawImage(self.xpos,self.ypos,self.image) self.frameControl = False else: painter.drawImage(self.xpos,self.ypos,self.image2) self.frameControl = True #painter.drawImage(360,24,nuvem) #painter.drawImage(504, 90,nuvem2) #print self.xpos, self.ypos #print dir(self.shape()) #items = self.scene().items(self.shape(), QtCore.Qt.IntersectsItemShape) #print items if self.collidingItems(): print self.collidingItems()[0] #print "chocou" control = False #def update(self): def timerEvent(self): self.update() def keyPressEvent(self,event): key = event.key() if key == QtCore.Qt.Key_Left: if self.xpos > 0: self.xpos -= Monster.speed elif key == QtCore.Qt.Key_Right: if self.xpos < 680: self.xpos += Monster.speed elif key == QtCore.Qt.Key_Down: if self.ypos < 520: self.ypos += Monster.speed elif key == QtCore.Qt.Key_Up: if self.ypos > 0: self.ypos -= Monster.speed #else: # QtGui.QGraphicsItem.keyPressEvent(self, event) def mousePressEvent(self, event): print "mouse funfa" class Clouds(QtGui.QGraphicsItem): adjust = 0.5 BoundingRect = QtCore.QRectF(-20 - adjust, -22 - adjust, 100 + adjust, 100 + adjust) def __init__(self): QtGui.QGraphicsItem.__init__(self) self.cloud1 = QtGui.QImage() self.cloud1.load("images/nuven.png") self.cloud2 = QtGui.QImage() self.cloud2.load("images/nuven2.png") def boundingRect(self): return Clouds.BoundingRect def shape(self): path = QtGui.QPainterPath() path.addRect(-10, -20, 228, 97) #determina o shape, que sera base para detectar colissoes. return path def paint(self,painter, option, widget): painter.drawImage(360,24,self.cloud1) painter.drawImage(504, 90,self.cloud2) #if self.scene().collidingItems(self): #print self.scene().collidingItems(self)[0] class Scene(QtGui.QGraphicsScene): def __init__(self): QtGui.QGraphicsScene.__init__(self) self.fun = None def keyPressEvent(self,event): self.func(event) def setKeyPressEventItem(self,func): self.func = func class View(QtGui.QGraphicsView): def __init__(self): QtGui.QGraphicsView.__init__(self) self.setCacheMode(QtGui.QGraphicsView.CacheBackground) self.setRenderHints(QtGui.QPainter.Antialiasing) def drawBackground(self, painter, rect): pixmap = QtGui.QImage("images/background3.png") #print pixmap srect = self.sceneRect() painter.drawImage(-5,-5,pixmap) #print "draw" if __name__ == "__main__": app = QtGui.QApplication(sys.argv) QtCore.qsrand(QtCore.QTime(0,0,0).secsTo(QtCore.QTime.currentTime())) scene = Scene()#QtGui.QGraphicsScene() scene.setSceneRect(0,0, 790, 590) scene.setItemIndexMethod(QtGui.QGraphicsScene.NoIndex) monster = Monster() scene.setKeyPressEventItem(monster.keyPressEvent) scene.addItem(monster) clouds = Clouds() scene.addItem(clouds) view = View()#QtGui.QGraphicsView(scene) view.setScene(scene) #view.setRenderHint(QtGui.QPainter.Antialiasing) #view.setBackgroundBrush(QtGui.QColor(230, 200, 167)) #view.setRenderHints(QtGui.QPainter.Antialiasing) #pixmap = QtGui.QImage("images/background.png") # view.setBackgroundBrush(QtGui.QBrush(pixmap)) #view.setCacheMode(QtGui.QGraphicsView.CacheBackground) view.setWindowTitle("Ensl Game") #view.setWindowTitle(QtCore.QT_TRANSLATE_NOOP(QtGui.QGraphicsView, "Colliding Mice")) view.resize(800, 600) view.show() -- Leônidas S. Barbosa (Kirotawa) [DesenvolvedorWeb/CEFET/RN] [Ciências da Computação/UFRN] [pós-graduando em Inteligência Computacional/Processamento Gráfico /UFRN [Estudante de japonês nível Intermediário I - Japanese Student] [Desenvolvedor em python, PyGame] blog nerd: corecode.wordpress.com/ blog music: essenaomanja.blogspot.com blog tirinhas: elminiche.wordpress.com/ "Mais sábio é aquele que sabe que não sabe" (Sócrates) 日本語の学生です。 コンピュータサイエンスの学位.
_______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt