2015-04-07 37 views
-2

我想要的代碼是這樣,如果我按下某個鍵,手電筒顏色鍵盤輸入援助

pygame.draw.ellipse(gameDisplay, yellow,[375+lead_x,-43+lead_y,105,led]) 

變得更亮,如光yellow.Please assist.Here是完整的代碼。

import pygame 
pygame.init() 
white = (34,34,34) 
black=(0,0,0) 
red=(255,0,0) 
led=45 
silver=(110,108,108) 
yellow=(193,206,104) 
yellow2=(213,230,100) 
gameDisplay = pygame.display.set_mode((800,600)) 
pygame.display.set_caption('Slither') 

gameExit=False 

myfont = pygame.font.SysFont("monospace", 15) 
lead_x = 300 
lead_y = 300 
background_color=black 
while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameExit = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       lead_x -= 10 
       print("LEFT") 

      if event.key == pygame.K_RIGHT: 
       lead_x +=10 
       print("RIGHT") 
      if event.key == pygame.K_UP: 
       lead_y -=10 
       print("UP") 
      if event.key == pygame.K_DOWN: 
       lead_y +=10 
       print("DOWN") 
      if event.key == pygame.K_a: 
       gameDisplay.fill(red) 
       led +=10 
      if led == 95: 
       background_color=red 
       print("YOU FOUND ME.NOW YOU WILL D I E") 
       background_color=red 

    gameDisplay.fill(background_color) 
    pygame.draw.ellipse(gameDisplay, black,[-295+300,-54+300,75,100]) 
    pygame.draw.ellipse(gameDisplay, red,[-285+300,-35+300,20,34]) 
    pygame.draw.ellipse(gameDisplay, red,[-255+300,-35+300,20,34]) 
    pygame.draw.rect(gameDisplay, silver,[470+lead_x,-35+lead_y,75,30]) 
    pygame.draw.ellipse(gameDisplay, yellow,[375+lead_x,-43+lead_y,105,led]) 


    pygame.display.update() 

pygame.quit() 
quit() 

回答

2

的問題是,pygame的支持RGBA color values- [R版,穎,b略和的顏色的 lpha值),但不幸的是PyGames繪製功能don' t透明繪製(根據domcumanetaion)。

爲了避免這個問題,你可以

  1. 創建新的表面
  2. 更改使用.set_alpha()
  3. 它的Alpha值畫出你的 「手電筒」 橢圓到新的表面
  4. 將此表面切入主屏幕表面通過調用.blit()方法支持Alpha透明

這裏是更新的程序:

# ... your code 

alpha = 0 

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

     if event.type == pygame.KEYDOWN: 
      #... your original code 

      if event.key == pygame.K_SPACE: 
       #change alpha value 
       alpha += 10 

    gameDisplay.fill(background_color) 

    pygame.draw.ellipse(gameDisplay, black,[-295+300,-54+300,75,100]) 
    pygame.draw.ellipse(gameDisplay, red,[-285+300,-35+300,20,34]) 
    pygame.draw.ellipse(gameDisplay, red,[-255+300,-35+300,20,34]) 


    alphaSurface = pygame.Surface((105,led)) # 1. 

    alphaSurface.set_alpha(alpha) # 2. 
    alphaSurface.fill(background_color) 

    pygame.draw.ellipse(alphaSurface, yellow,[0,0,105,led]) # 3. 
    gameDisplay.blit(alphaSurface, (375+lead_x,-43+lead_y)) # 4. 


    pygame.draw.rect(gameDisplay, silver,[470+lead_x,-35+lead_y,75,30]) 

    pygame.display.update() 

pygame.quit() 
quit() 

請注意,我們需要改變背景顏色和alphaSurface表面每次迭代的大小主循環的以獲得預期的結果,這可能會減慢我們的遊戲速度。

你也可以考慮使用pygame.HWSURFACE標誌創建硬件加速的表面。看到PyGame documentation about surfaces以獲取更多信息。

+0

啊,我明白了,謝謝。 – DarkRunner