2017-08-19 63 views
1

我正在嘗試做一個簡單的遊戲,它運行良好。這個動作就像是俄羅斯方塊的移動(就像瞬移一樣),這就是我想要的。我不想流暢的運動,我想要這種運動風格。如何爲這種運動風格實現邊界或碰撞?

但有一個問題...當我嘗試爲我的角色和矩形添加邊界或碰撞時,它不起作用,但是如果我編寫此代碼,它只能工作一次,然後左右兩個箭頭鑰匙不再工作了。我怎麼解決這個問題?

import pygame 
pygame.init() 

ekranx = 160 
ekrany = 310 
window = pygame.display.set_mode((ekranx, ekrany)) 
white = (255,255,255) 
black = (0,0,0) 
blue = (0,0,200) 
pygame.display.set_caption("TOP") 
clock = pygame.time.Clock() 
ball = pygame.image.load("top.png") 


def top(x,y): 
    window.blit(ball,(x,y)) 
top_x = (55) 
top_y = (250) 
cikis = False 
while not cikis: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      cikis = True 
     if event.type == pygame.KEYDOWN: 
       #--SOL 
       if event.key == pygame.K_LEFT: 
        top_x += -50 


       #--SAĞ 
       if event.key == pygame.K_RIGHT: 
        top_x += 50 


    #print(event) 
    window.fill(white) 
    top(top_x,top_y) 
    pygame.draw.rect(window,blue,(5,5,150,300),5) 
    if top_x < 6: 
     pygame.K_LEFT = False 
    if top_x > 104: 
     pygame.K_RIGHT = False 
    pygame.display.update() 
    clock.tick(60) 
pygame.quit() 
quit() 
+0

不要發佈您的代碼的截圖,直接的形式添加代碼後[最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve)。只需將代碼粘貼到問題中,選擇它並按下Ctrl-K即可。 – skrx

回答

1

pygame.K_LEFT = False < - 不要這樣做。你在這裏覆蓋pygame.K_LEFT常量(實際上是一個整數276),這意味着你不能在你的程序中使用它(pygame不會再識別這些事件)。

只需設置top_x到最大值或最小值,如果球移動太遠向左或向右:

if top_x < 6: 
    top_x = 6 
if top_x > 104: 
    top_x = 104 
+0

非常感謝你,skrx。你修好了!即時讚賞。萬分感謝!! –

+0

如果您需要碰撞檢測,我還建議查看['pygame.Rect'](http://www.pygame.org/docs/ref/rect.html)的工作方式。 – skrx

+0

感謝您的全力幫助。順便說一句,我想創建一個開始菜單(代碼相同),但我無法做到。我嘗試了很多方法,但我不能。我怎麼做一個開始菜單。它將是一個完整的白色屏幕和開始或退出按鈕? –