2014-02-11 3 views
0

, поэтому я попытался обнаружить столкновение, сделав 2 фигуры, но в этом есть какая-то ошибка, и мне интересно, есть ли более простые способы. так это то, что я пробовал:обнаружить щелчок на форме pygame

cursorSurface = pygame.Surface((0,0)) 
cursor = pygame.draw.rect(cursorSurface, (0,0,0),(mouseX,mouseY,2,2))    
mouse_mask = pygame.mask.from_surface(cursorSurface,255) 
mouse_rect = cursor  
if mouseAction[0] == 'move': 
    if mouseX > x and mouseX < xEnd and mouseY > y and mouseY < yEnd:   
     topTriangle = selectedSquare.subsurface(x+4,y+4,xEnd-(x+5),int((yEnd-(y+5))*0.25)) 
     bottomTriangle = selectedSquare.subsurface(x+4,y+4+int((yEnd-(y+5))*0.75),xEnd-(x+5),int((yEnd-(y+5))*0.25)) 
     leftTriangle = selectedSquare.subsurface(x+4,y+4,int((xEnd-(x+5))*0.25),yEnd-(y+5)) 
     rightTriangle = selectedSquare.subsurface(x+4+int((xEnd-(x+5))*0.75),y+4,int((xEnd-(x+5))*0.25),yEnd-(y+5)) 

     collisionTop_mask = pygame.mask.from_surface(topTriangle,255) 
     collisionTop_rect = topTriangle.get_rect()      
     collisionTop_rect.topleft = (0,0) 

     pygame.draw.rect(selectedSquare, colorDark,(x+5+int((xEnd-(x+5))*0.25),y+5+int((yEnd-(y+5))*0.25),int((xEnd-(x+5))*0.75)-int((xEnd-(x+5))*0.25)-2,int((yEnd-(y+5))*0.75)-int((yEnd-(y+5))*0.25)-2))  
     pygame.draw.polygon(topTriangle, colorDark, ((1,0), (topTriangle.get_width()-2,0), (int((xEnd-(x+7))/2),(int((yEnd-(y+7))/2)-1)))) 
     pygame.draw.polygon(leftTriangle, colorDark, ((0,1), (0,leftTriangle.get_height()-2), (int((xEnd-(x+7))/2)-1,(int((yEnd-(y+7))/2))))) 
     pygame.draw.polygon(bottomTriangle, colorDark, ((1,yEnd-(y+6)-int((yEnd-(y+5))*0.75)), (bottomTriangle.get_width()-2,yEnd-(y+6)-int((yEnd-(y+5))*0.75)), (int((xEnd-(x+7))/2),(int((yEnd-(y+7))/2)+1-(yEnd-(y+5))*0.75)))) 
     pygame.draw.polygon(rightTriangle, colorDark, ((xEnd-(x+6)-int((xEnd-(x+5))*0.75),1), (xEnd-(x+6)-int((xEnd-(x+5))*0.75),rightTriangle.get_height()-2), (int((xEnd-(x+7))/2)+1-int((xEnd-(x+5))*0.75),(int((yEnd-(y+7))/2))))) 

     screen.blit(selectedSquare, (0,0)) 
     if collisionTop_mask.overlap(mouse_mask,(mouse_rect.left-collisionTop_rect.left,mouse_rect.top-collisionTop_rect.top)) != None: 
      print('detect') 

, но я также видел этот Methode:

if topTriangle.get_rect().collidepoint(pygame.mouse.get_pos()): 

проблема заключается в том, что это только обнаруживает квадраты, и мне нужно, чтобы обнаружить треугольник. Может ли кто-нибудь помочь мне с этим?

ответ

0

Вы могли бы сделать что-то вроде этого, я думаю (не проверяло):

posx, posy = pygame.mouse.get_pos() 
posx -= XCoordinateOfTopTriangleOnScreen 
posy -= YCoordinateOfTopTriangleOnScreen 
if topTriangle.get_at((posx,posy)) == colorDark: 
    print('detect') 
+0

ну это не работает с подповерхностным, потому что он просто принимает Al цвет оригинальных поверхностей, но я могу просто изменить его немного так спасибо! – thegunmaster

Смежные вопросы