2017-04-12 122 views
0

因此,首先,我遇到了碰撞處理問題。基本上,我有這樣的代碼:pygame中的按鍵處理和邊界碰撞的問題

 x_move = 0 
     player_width = 115 

    ... 


     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_a: 
       x_move -= 6 
      if event.key == pygame.K_d: 
       x_move += 6 
       print(x_move) 
     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_a or event.key == pygame.K_d: 
       x_move = 0 


    if x > display_width - player_width: 
     x_move -= 1 
    if x < 0: 
     x_move += 1 

    x += x_move 

顯然,當玩家按下「A」他們向左走,當他們按「d」,他們去的權利。現在邊界碰撞非常便宜,我從一開始就知道這一點。

我的想法是檢測玩家輸入的畫面,如果畫面(或其後的畫面)在屏幕外,減去精靈的寬度(這樣玩家的一半不在屏幕外 - 這是一個飛船),然後拒絕玩家繼續前進。

現在,這其他的實現實際上阻止了玩家繼續前進,但是如果他們不斷點擊A或D,他們將逐幀移出屏幕。

但是,當他們碰到邊緣時,他們會逐字地反彈回來,如果他們在正確的時間點擊相反的方向,他們會增加速度並加快速度。

第二個問題是 - 除非他們完全釋放密鑰 - 他們不能使用另一個密鑰。它阻止他們去任何地方。

任何人都可以幫助我瞭解幕後故事嗎?這兩個問題一直是我身邊的一個棘手問題。

回答

0

對於「他們不停地輕拍或d他們將移出畫面一幀一幀」 你只需要改變你的代碼:

if x > display_width - player_width + x_move: 
    x_move = 0 
if x - x_move < 0: 
    x_move = 0 

如果你不明白爲什麼,我可以解釋,但我認爲這很容易理解......

但是,我不明白「他們不能使用另一個鍵」,你在想什麼?

+0

使用此代碼時,玩家會在邊緣處凍結。 –

+0

例如,當玩家要離開(K_a)時,他們必須完全釋放K_a鍵,然後才能向右走。通常遊戲允許一個人用最近按下的那個覆蓋另一個。這樣做非常不切實際,所以我希望能夠用任何按鍵來覆蓋按鍵。 –

+0

所以你想讓玩家在邊緣彈跳? 您可以創建一個變量來計算按下了多少個鍵 –