2017-02-17 6 views
1

私はpygameにボックスを持っていて、カーソルがボックスの中にあるときにマウスボタンを押すと、何かのテキストをコンソールに出力したいと思います。問題は、マウスボタンを押してボックスにドラッグすると、テキストを印刷したくないということです。ボックス内でカーソルが押され、押されずにドラッグされている場合、どのように真を返すことができますか?

私が試してみました:

if mousePos[0] >= 500 and mousePos[0] <= 530 and mousePos[1] >= 0 and mousePos[1] <= 100 and pygame.mouse.get_pressed()[0]: 
    scrollButtonColour = (25,25,25) 
    print(mousePos) 
else: 
    scrollButtonColour = (50,50,50) 

乾杯を。

編集:ここでは

は、テストのための完全なコードは、(私が質問を投稿以来、わずかな変更を加えた)である。

import pygame 

pygame.init() 

white = (255,255,255) 
black = (0,0,0) 
red = (255,0,0) 
green = (0,255,0) 
blue = (0,0,255) 

display_width = 800 
display_height = 600 

gameDisplay = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption("Scroll Bar") 
clock = pygame.time.Clock() 

FPS = 60 

gameExit = False 

scrollButtonColour = (50,50,50) 


while not gameExit: 

    mousePos = pygame.mouse.get_pos() 
    scrollButtonColour = (50,50,50) 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameExit = True 


    if mousePos[0] >= 500 and mousePos[0] <= 530 and mousePos[1] >= 0 and mousePos[1] <= 100: 
     if pygame.mouse.get_pressed()[0]: 
      scrollButtonColour = (25,25,25) 
      print(mousePos) 




    gameDisplay.fill(green) 

    pygame.draw.rect(gameDisplay, red, (200,200,100,100)) 
    pygame.draw.rect(gameDisplay, scrollButtonColour, (500, 0, 30, 100)) 

    pygame.display.update() 
    clock.tick(FPS) 


pygame.quit() 
+1

関連しないサイドノート:Pythonプログラマは通常、「camelCase」ではなく「snake_case」を変数名に使用します。 [PEP 8](https://www.python.org/dev/peps/pep-0008/)。 – skrx

答えて

1

プレイヤーが ボックスの内側をクリックした場合にイベントがのみ印刷されていることを確認するにはプレーヤーがオブジェクトにマウスをドラッグした後にマウスを離さないでください pygame.MOUSEBUTTONDOWNを使用できます。

この方法で、マウスが実際に押されたかどうかを確認できます。 の後にマウスの位置がオブジェクトの内側にあることを確認した後、 オブジェクトにドラッグすると、オブジェクトの内側をクリックするだけで、オブジェクトは表示されません。

これは、コードは次のようにどのように見えるかです:

if mousePos[0] >= 500 and mousePos[0] <= 530 and mousePos[1] >= 0 and mousePos[1] <= 100: 
     if event.type == pygame.MOUSEBUTTONDOWN : 
      scrollButtonColour = (25,25,25) 
      print(mousePos) 

あなたがイベント

0

私が最初かどうかを確認したいかどうかを確認どこループにこのコードを配置する必要があります。このコードを動作させるために、マウスボタンが押された後、ボタンのrectがマウスposと衝突する場合は、ボタンの色を変更してテキストを印刷します。ボタンが離されると、色をリセットすることができます。私は、pygame.Rectとその衝突ポイントメソッドを使用する方法を示す例もあります。マウスイベントにはposという属性があるので、pygame.mouse.get_pos()の代わりにこれを使用できます。

import sys 
import pygame 


pygame.init() 

gameDisplay = pygame.display.set_mode((800, 600)) 
clock = pygame.time.Clock() 

# Rect(x_pos, y_pos, width, height) 
scrollButton = pygame.Rect(500, 0, 30, 100) 
scrollButtonColour = (50, 50, 50) 

gameExit = False 

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameExit = True 
     if event.type == pygame.MOUSEBUTTONDOWN: 
      if scrollButton.collidepoint(event.pos): 
       scrollButtonColour = (25, 25, 25) 
       print(event.pos) 
     if event.type == pygame.MOUSEBUTTONUP: 
      scrollButtonColour = (50, 50, 50) 

    gameDisplay.fill((0, 255, 0)) 
    pygame.draw.rect(gameDisplay, scrollButtonColour, scrollButton) 

    pygame.display.update() 
    clock.tick(60) 

pygame.quit() 
sys.exit() 

ボタンやその他のGUI要素を増やしたい場合は、クラスを定義することをお勧めします。インスタンスをリストまたはスプライトグループに入れ、イベントループでイベントをインスタンスに渡してインスタンスを処理します。

関連する問題