2017-08-19 5 views
1

私は単純なゲームを作ろうとしており、うまくいきます。動きはテトリスブロックの動きのようなものです(瞬時に、テレポートするのと同じように)、これは私が望むものです。私は滑らかな動きをしたくない、私はこの動きのスタイルが欲しい。この移動スタイルの境界や衝突をどのように実装できますか?

しかし、問題があります...文字と矩形の境界や衝突を追加しようとすると機能しませんが、このコードを書くと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

ご協力いただきありがとうございます。ところで私はスタートメニュー(同じコード)を作成したいが、私はそれを作ることができなかった。私はたくさんの方法を試しましたが、私はできませんでした。どのように私はスタートメニューを作ることができます。完全な白い画面になり、ボタンを開始または終了しますか? –

関連する問題