0

繰り返しますが、この質問は PyParticles4 にあります。
参照用の最後の質問へのリンク

不明な点はコメント...

私はこれによく似たシューティングゲームに取り組んでいますが、ターンごとに高さが変化する壁のある平らな土地(ゲームの楽しみのための何か)と2人のプレーヤーがいて、それぞれがある程度の距離を移動できる大砲を持っています(制限があり、開始位置から一定量を超えて移動することはできません) 各ターン (移動するかどうかはプレイヤーが決定します)。

これまでの私のコード(弾丸とシューター用)

class Bullet(PyParticles.Particle):
    def hit(self,shooterlist):
        for shoot in shooterlist:
            #confusion
            dist = math.hypot(dx,dy)
    # other funcs to added
class Shooter:
    def __init__(self,pos,size):
        self.rect = pygame.Rect(pos,size)
    # other funcs to added

私の問題

シューターとの弾丸の衝突。弾丸が四角形と衝突するタイミングを知る方法についてのアイデアはありますか?
四角形の端にあるすべての点を見て、それが円内にあるかどうかを確認するように誰かにアドバイスされましたが、非常に遅いようです。
もっと速いものがいいと思います
..
..
更新:
円はその周りに四角形を持つことができます.四角形と衝突すると、四角形が円に近づいたとき、おそらくそれに触れているかがわかります..方法前に進みますか??(Thx to PygameNerd)

4

3 に答える 3

1

質問の意味がわかりませんが、そのcolliderect機能が必要だと思います。

rect.colliderect(rect): Return bool

これをコードのどこかに入れて、true が返されたらボールを​​爆発させます。

于 2013-01-05T17:58:03.733 に答える
1

colliderecttrue が返されるたびに、別のテストを実行できます。そのテストが何であるかについては、いくつかのオプションがあります。1つは、すでに受けたアドバイスに似ていますが、壁と円が入れ替わっています。円の円周上の点を確認し、 を使用してそれらの 1 つが壁に衝突するかどうかを確認しRect.collidepointます。Maskpygame では、円サーフェスからを作成して を実行すると、円周ポイントのリストを取得できますMask.outline。おそらくすべてのポイントが必要なわけではないので、N 番目のポイントごとに取得できます。Rect実際、オブジェクト自体から取得できる円の四角形のエッジの中点のみが必要な場合があります。

正確な衝突を求めています。これにより、円と長方形の間のピクセルに完全な衝突検出が得られます。ただし、ゲームでは必要ないかもしれないので、colliderect最初は試してみることをお勧めします。Mask一般に pygame での衝突検出に関心がある場合は、およびドキュメントで説明されている関数に直接実装されている、または関数に基づいている多くのオプションがありSpriteます。

于 2013-01-08T02:26:05.247 に答える
0

円の中心で Rect.collidepoint を使用できますが、rect を大きくすることができます

collide_rect = Rect(x - p.radius,y - p.radius,w + 2 * p.radius,h + 2 * p.radius)
if collide_rect.collide_point(p.pos):
    # Collision Resolution
于 2013-03-27T18:09:10.263 に答える