2012-03-31 15 views
0

どのように私はスプライトの配管にキーコマンドを追加しますか?以下はこれまでの私の試みですが、上のボタンを押すと結果が出ません。ボタンアップボタンが押されたとき、私はどのようにudを設定し、ldを10だけ変更するのですか?スプライトにキーコマンドを追加するにはどうすればよいですか?

pink = (255, 64, 64) 
w = 640 
h = 480 
ld = 0 
ud = 0 
screen = pygame.display.set_mode((w, h)) 
running = 1 
def key_event(self, event): 

     if event.key == pygame.K_UP: 
      ud - 10 
      ld + 10 
def show_sprites(): 
    screen.blit(plumbers,(50+ld ,100+ud)) 
def setup_background(): 
    screen.fill((pink)) 
    screen.blit(cloud_background,(0,0)) 
    brick_width, brick_height = brick_tile.get_width(), brick_tile.get_height() 
    for x,y in itertools.product(range(0,640,brick_width), 
           range(390,480,brick_height)): 
     screen.blit(brick_tile, (x,y)) 

while running: 

    setup_background() 
    event = pygame.event.poll() 
    show_sprites() 
    pygame.display.flip() 

    if event.type == pygame.QUIT: 
     sys.exit() 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
     elif event.type == pygame.KEYDOWN: 
      w.key_event(event) 

答えて

0

問題は、あなたがキーを失っているように、世論調査との両方のイベントキューからイベントを取り得るということであるライン

event = pygame.event.poll() 

if event.type == pygame.QUIT: 
    sys.exit() 

の最初の発生を削除します。ポーリングするコールのイベント。あなたは(イベント= pygame.event.pollを呼び出す。これは、キュー

  • にKeyDownイベントを挿入
  • UPキーを押し

    1. :つまり

      何が起こることはありますこれはKEYDOWNイベントを返します

    2. あなたはこれが終了しているかどうかを確認します。続行しないでください。
    3. あなたはpygame.event.get()を呼び出しますが、キューは今、空のループに入力された

    例コードを取得しないように:私はそれを試してみましたが、得た

    import pygame 
    pink = (255, 64, 64) 
    w = 640 
    h = 480 
    ud = 0 
    ld = 0 
    screen = pygame.display.set_mode((w, h)) 
    running = 1 
    def key_event(event): 
        global ud 
        if event.key == pygame.K_UP: 
         ud -= 10 
         print 'ud',ud   
    
    def setup_background(): 
        screen.fill((pink)) 
    
    while running: 
    
        setup_background() 
        pygame.display.flip() 
    
        for event in pygame.event.get(): 
         if event.type == pygame.QUIT: 
          running = False 
         elif event.type == pygame.KEYDOWN: 
          key_event(event) 
    
  • +0

    を: 'はAttributeError:「int型のオブジェクトは、このkey_event''何の属性は」refrenceではありませんしました: 'w.key_event(event)'私は何をイベントに置き換えますか? – enrique2334

    +0

    私はあなたのコードwが整数なので、あなたはメンバー関数としてkey_eventを持つオブジェクトとしてそれを使用しようとしているからだと思います。私は答えに使用したコードのバージョンを追加しました(これはkey_eventが呼び出される方法にいくつかの変更があります) –

    +0

    これは私にこのエラーを与えます。 'TypeError:key_event()は2つの引数(1) 2番目の引数を追加する/ 2番目の引数は何をするか。 – enrique2334