2015-04-01 2 views
0
def function(): 

    import pygame 
    import time 
    from pygame.locals import * 

    pygame.init() 

    Width = 272 
    Height = 552 

    white = 255,255,255 
    blue = 0,255,255 
    red = 255,0,0 

    Left_Rect = pygame.Rect(0,452,135,100) 
    Right_Rect = pygame.Rect(137,452,135,100) 

    Location = 136 

    WaterLevel = 452 
    Depth = 100 

    CLOCK = pygame.time.Clock() 
    FPS = 30 

    gameDisplay = pygame.display.set_mode((Width,Height)) 
    pygame.display.set_caption('boat game') 

    stop = False 

    gameDisplay.fill(white) 

    while not stop: 

####### CONTROLLES #################################################### 

     pygame.draw.rect(gameDisplay, red, Left_Rect) 

     pygame.draw.rect(gameDisplay, red, Right_Rect) 


####### BOAT ######################################################### 
     pygame.draw.rect(gameDisplay, red, (Location,WaterLevel-20,40,20)) 

####### WATER ########################################################   
     pygame.draw.rect(gameDisplay,blue,(0,WaterLevel,272,Depth)) 

     WaterLevel -= 1 
     Depth += 1 


###################################################################### 

     for event in pygame.event.get(): 

      print event 

      if event.type == pygame.MOUSEBUTTONDOWN: 
       is_Left = Left_Rect.collidepoint(pygame.mouse.get_pos()) 

       if is_Left == 1: 
        Location -= 5 

      if event.type == pygame.MOUSEBUTTONDOWN: 
       is_Right = Right_Rect.collidepoint(pygame.mouse.get_pos()) 

       if is_Right == 1: 
        Location += 5 

      if event.type == pygame.QUIT: 
       stop = True 
       pygame.quit() 
       quit() 

     CLOCK.tick(FPS) 

     pygame.display.update() 

function() 

У меня есть синий прямоугольник, который поднимается вверх по экрану, красный прямоугольник, который сидит поверх растущего синего прямоугольника. поместите две коробки в нижний левый и правый углы, и когда они будут нажаты, красный прямоугольник перемещается горизонтально влево или вправо. Как я могу сделать это, чтобы я мог удерживать мышь над одним из этих ящиков, и прямоугольник будет продолжать двигаться, пока я не допущу GoКак я могу получить непрерывное движение в pygame?

+0

'MOUSEBUTTONDOWN' происходит только тогда, когда мышь, если первый нажата, вы можете проверить, является ли кнопка по-прежнему удерживается с' pygame.mouse.get_pressed() '- см [Docs ] (http://www.pygame.org/docs/ref/mouse.html) – Marius

ответ

0

Есть много разных подходит для этой проблемы. :)

очень простой и быстрый и грязный способ заключается в

  • установить один из двух глобальных переменных, называемых is_Left и is_Right каждый раз, когда происходит событие pygame.MOUSEBUTTONDOWNи соответствующий .collidepoint() метод возвращает true
  • сбрасывать обе переменные при обнаружении pygame.MOUSEBUTTONUP.

Ваш обновленный код для этого подхода:

#your original code 

#declare global variables is_Left and is_Right 
is_Left = False 
is_Right = False 

while not stop: 
    #draw controls, boat and water 
    #increment WaterLevel and Depth 

    #event loop 
    for event in pygame.event.get(): 
     #detect MOUSEBUTTONDOWN event and collision 
     if event.type == pygame.MOUSEBUTTONDOWN: 
      is_Left = Left_Rect.collidepoint(pygame.mouse.get_pos()) 
      is_Right = Right_Rect.collidepoint(pygame.mouse.get_pos()) 

     if event.type == pygame.MOUSEBUTTONUP: 
      #reset is_Left and is_Right 
      is_Left = False 
      is_Right = False    

     if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 

    #change Location 
    if is_Left: 
     Location -= 5 
    elif is_Right: 
     Location += 5 

    CLOCK.tick(FPS) 

    pygame.display.update() 

Другой метод является, как Мариус уже упоминалось, к использовать pygame.mouse.get_pressed() функцию модуля мыши PyGames, чтобы получить состояние кнопок мыши ,

Эта функция возвращает tupel из трех булевых значений, представляющих состояние все кнопки мыши. В вашем случае нам нужно только первое значение, которое представляет состояние левой кнопкой мыши.

Мы называем pygame.mouse.get_pressed()[0]внутри основного цикла игры, чтобы получить состояние кнопки левой кнопкой мыши и проверить в то же время, если соответствующий .collidepoint() метод возвращает true:

#your original code 

while not stop: 
    #draw controls, boat and water 
    #increment WaterLevel and Depth 

    #event loop 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 

    #get state of left mouse button 
    isPressed = pygame.mouse.get_pressed()[0] 

    #change location 
    if ispressed and Left_Rect.collidepoint(pygame.mouse.get_pos()): 
     Location -= 5 
    elif ispressed and Right_Rect.collidepoint(pygame.mouse.get_pos()): 
     Location += 5 

    CLOCK.tick(FPS) 

    pygame.display.update() 

    CLOCK.tick(FPS) 

    pygame.display.update() 

В лично предпочитаю второй вариант, потому что нам не нужны дополнительные глобальные переменные (is_Left, is_Right).

Я надеюсь, что это помогает :)

+0

Спасибо, это помогло. –

+0

@ RomanFormicola: Без проблем, я рад, что смогу помочь вам! :) – elegent

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