2017-05-03 75 views
2

我有兩個矩形(條紋)我想單擊條紋上下移動鼠標,然後使用K_UP和K_DOWN鍵移動相同的條紋。隨着我寫的代碼,我可以用鼠標移動條紋,但鍵同時移動兩個條紋,而不是單獨移動。我只有一週編碼器,請幫忙!Pygame鼠標/鍵盤控制條件

import pygame 
import pygame.gfxdraw 

pygame.init() 
width, height = 800, 600 
gameWindow = pygame.display.set_mode((width, height)) 
pygame.display.set_caption("Koordynacja LoL") 
clock = pygame.time.Clock() 
# Colors 
white = (255, 255, 255) 
black = (0, 0, 0) 
red = (255, 0, 0) 
blue = (0, 0, 255) 
green = (0, 102, 0) 
yellow = (255, 204, 0) 

grid_color = (224, 224, 224) 
k = 5 


class Stripe(): 
    def __init__(self, color, size, pos_x, pos_y): 

     self.size = size 
     self.image = pygame.Surface(size) 
     self.image.fill(color) 
     self.rect = self.image.get_rect() 
     self.pos_x = pos_x 
     self.pos_y = pos_y 
     self.rect.x = pos_x 
     self.rect.y = pos_y 

     self.speed = 5 

    def move(self, xdir, ydir): 
     self.rect.x += xdir * self.speed 
     self.rect.y += ydir * self.speed 

P1_len = 250 
stripe1 = Stripe(green, (15, P1_len), 100, 200) 

stripe_1a = Stripe(0, (15, 1000), 100, 0) 
stripe_1aa = gameWindow.blit(stripe_1a.image, stripe_1a.rect) 

P2_len = 110 
stripe2 = Stripe(red, (15, P2_len), 200, 100) 
stripe_2a = Stripe(0, (15, 1000), 200, 0) 
stripe_2aa = gameWindow.blit(stripe_2a.image, stripe_2a.rect) 

zielone2 = gameWindow.blit(stripe2.image, stripe2.rect) 

pygame.display.update() 

FPS = 15 
Running = True 

stripe_move = None 
while Running: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      Running = False 
     (mouseX, mouseY) = pygame.mouse.get_pos() 
     (p1, p2, p3) = pygame.mouse.get_pressed() 
     if stripe_1aa.collidepoint(mouseX, mouseY) and p1 == 1: 
      stripe1 = Stripe(green, (15, 250), 100, mouseY-P1_len) 

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_DOWN: 
       stripe1.move(0, 1) 
       print("lol") 
      if event.key == pygame.K_UP: 
       stripe1.move(0, -1) 


     elif stripe_2aa.collidepoint(mouseX, mouseY) and p1 == 1: 
      stripe2 = Stripe(red, (15, 110), 200, mouseY - P2_len) 

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_DOWN: 
       stripe2.move(0, 1) 
      if event.key == pygame.K_UP: 
       stripe2.move(0, -1) 
       print("wut?") 
     elif event.type == pygame.MOUSEBUTTONUP: 
      stripe_move = None 

    gameWindow.fill((255, 255, 255)) 

    # Draw stuff here 
    """ Greedy Grid """ 
    for i in range(width): 
     grid_x = k * i 
     grid_y = k * i 

     pygame.draw.line(gameWindow, grid_color, (grid_x, 0), (grid_x, height), 1) 
     pygame.draw.line(gameWindow, grid_color, (0, grid_y), (width, grid_y), 1) 
     pygame.draw.line(gameWindow, black, (2 * k, height - 2 * k), (width - 2 * k, height - 2 * k), 3) 
     pygame.draw.line(gameWindow, black, (2 * k, height - 2 * k), (2 * k, 2 * k), 3) 
     pygame.draw.aaline(gameWindow, black, (2 * k, 2 * k), (width - 2 * k, 2 * k), 3) 

    pygame.draw.aaline(gameWindow, blue, (200, 115), (500, 70), True) 
    gameWindow.blit(stripe1.image, stripe1.rect) 
    gameWindow.blit(stripe2.image, stripe2.rect) 


    # End draw stuff here 
    pygame.display.update() 
    clock.tick(FPS) 


pygame.quit() 
quit() 
enter code here 
+0

歡迎來到SO!更好地發佈[完整示例](http://stackoverflow.com/help/mcve),因爲這會讓我們更容易幫助您。 – skrx

+0

我發佈了整個代碼 – Bartnick81

+0

感謝您的編輯。 – skrx

回答

1

如下我構造的代碼:如果點擊鼠標和event.pos碰撞的條紋,該條紋分配給一個變量(selected_stripe),並且如果用戶點擊別處設置爲None。只要鼠標按鈕關閉,也可將scrolling變量設置爲True。在事件循環之外,您可以將選定條帶的y位置設置爲鼠標pos。對於向上和向下鍵,您可以使用所選條帶的move方法。

selected_stripe = None 
scrolling = True 

while Running: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      Running = False 
     if event.type == pygame.MOUSEBUTTONDOWN: 
      if event.button == 1: 
       scrolling = True 
       if stripe_1aa.collidepoint(event.pos): 
        selected_stripe = stripe1 
       elif stripe_2aa.collidepoint(event.pos): 
        selected_stripe = stripe2 
       else: 
        selected_stripe = None 
     elif event.type == pygame.MOUSEBUTTONUP: 
      scrolling = False 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_DOWN: 
       if selected_stripe: 
        selected_stripe.move(0, 1) 
      if event.key == pygame.K_UP: 
       if selected_stripe: 
        selected_stripe.move(0, -1) 

    if selected_stripe and scrolling: 
     mouse_x, mouse_y = pygame.mouse.get_pos() 
     selected_stripe.rect.y = mouse_y 
+1

如果您有後續問題或需要進行調整,請告訴我。 – skrx

+1

您的解決方案完美無缺!非常感謝你教我這種方法,你搖滾!我有很多關於這個項目的問題(比如如何將條紋運動捕捉到網格中),但是我當然會嘗試使用這個論壇作爲我的最後手段。 – Bartnick81

+0

嗨,是否有可能添加到變量selected_stripe另一個矩形對象作爲stripe1但具有不同的y_pos和顏色,將隨着條紋1(唯一)一起移動。我試過了,但它不起作用。 – Bartnick81