2017-11-30 3 views
0

私は小さなゲームを作ろうとしています。私はここでは帰郷時に問題があります。本当に、私がする必要があるのは、このリストをイメージにblitすることだけです。PygameはForループ内のリスト内の個々のアイテムをブレットできません||| Err(Blitの無効な宛先)

はmyListは(brick.get_rectで構成されている)

# myList = myCollider(myList, ballRect) 
    for i in range(len(myList)): 
     if(ballRect.colliderect(myList[i])): 
      print("ok") 
      del myList[i] 

    #for i in range(0, len(myList)): 

    # screen.blit(brick, myList[i]) 
    for i in range(len(myList)): 
     screen.blit(brick, myList[i]) 

    screen.blit(platform, platformRectangle) 
    screen.blit(ball, ballRect) 

また、すべてのコードは、私がこの

del myList[i] 

を追加するまでのコードは、私はそれを削除した場合に動作し、衝突時にアクティブに動作します私が望むように、しかし何らかの理由でこれはうまくいかないようです。

なぜ私のリストをblitしませんか?

さらに、ゲームは定義された衝突が発生し、del myList [i]がアクティブになるまで動作します。

全エラー:

Traceback (most recent call last): 
    File "C:\Users\Jackson\source\repos\C200-Breakout-Team26\JackCrap\EXT.py", line 152, in <module> 
    Play(400, 400, black, 1) 
    File "C:\Users\Jackson\source\repos\C200-Breakout-Team26\JackCrap\EXT.py", line 129, in Play 
    if(ballRect.colliderect(myList[i])): 
IndexError: list index out of range 
+0

常に置く完全なエラー・メッセージ(トレースバック)を持つクラスでなければならない – furas

+0

[my] [i] 'が空のリストの場合に行うべきですか? – Matthias

+0

なぜ 'myList [i] = []'を追加しますか? 'get_rect()'は、描画に使用される 'Rect()'クラスのインスタンスを返します。今度は 'screen.blit(brick、[])'を描画しようとしています – furas

答えて

1

リストから要素を削除したい場合は、あなたがdel myList[i]を使用する必要がありますが、あなたはforループ内でそれを使用する場合、それはとても良く、あなたが維持しなければならない要素のためのリストを作成し、問題になります。

keep = [] 

for item in myList: 
    if ballRect.colliderect(item): 
     print("ok") 
    else: 
     keep.append(item) 

myList = keep 

for item in myList: 
    screen.blit(brick, item) 

EDIT:リスト内包を使用して取り除く要素

myList = [item for item in myList if not ballRect.colliderect(item)] 

EDIT:あなたはの要素を維持する場合はSprite

のためのドキュメントを参照してくださいpygame.sprite.spritecollideを使用して、ボールとすべてのレンガの衝突をチェックし、レンガを自動的に削除することができます。あなたは `screen.blit(レンガ、myListと期待していない何

しかしbricksballは(テキストではなく、スクリーンショットなど)問題のself.rect

pygame.sprite.spritecollide(ball_sprite, block_sprites_group, True) 
+0

ハハ恐ろしい!ありがとう、それは夢のように動作します! – Berkly

+0

リストの理解と同じものを追加しますが、 '' ok ''を出力することはできません。 – furas

関連する問題