Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah Pengesanan Perlanggaran Pygame Saya Sentiasa Kembali Benar, dan Mengapa Kedudukan Segiempat Segiempat Imej Saya Ditetapkan dengan Salah kepada (0, 0)?

Mengapakah Pengesanan Perlanggaran Pygame Saya Sentiasa Kembali Benar, dan Mengapa Kedudukan Segiempat Segiempat Imej Saya Ditetapkan dengan Salah kepada (0, 0)?

Linda Hamilton
Linda Hamiltonasal
2024-12-18 12:57:11681semak imbas

Why Does My Pygame Collision Detection Always Return True, and Why Is My Image Rectangle Position Incorrectly Set to (0, 0)?

Mengapa Ujian Perlanggaran Sentiasa Kembali 'Benar' dan Kedudukan Segiempat Imej Sentiasa Salah (0, 0)

Isu Ujian Perlanggaran

Sebab:

Ujian perlanggaran bergantung pada atribut tepat bagi objek Sprite untuk menentukan sama ada ia bersilang. Walau bagaimanapun, kaedah get_rect() dalam kod anda tidak menetapkan kedudukan segi empat tepat kepada koordinat yang dimaksudkan.

Penyelesaian:

Apabila menggunakan get_rect() , anda boleh menentukan kedudukan dengan hujah kata kunci atau menetapkannya pada atribut maya atas segi empat tepat. Gunakan kod yang diperbetulkan ini:

self.rect = self.image.get_rect(topleft=(self.x, self.y))

Kedudukan Segi Empat Salah

Sebab:

Anda menambahkan atribut x dan y yang tidak perlu pada sprite dan bukannya bergantung pada kedudukan segi empat tepat. Akibatnya, kedudukan segi empat tepat sentiasa ditetapkan kepada (0, 0) kerana objek Surface tidak mempunyai kedudukan lalai.

Penyelesaian:

Alih keluar atribut x dan y dan gunakan atribut rect untuk menetapkan kedudukan objek Sprite. Berikut ialah kod yang diperbetulkan:

class Ball(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("ball.png")
        self.rect = self.image.get_rect(topleft=(280, 475))
        self.col = False

Kod Ringkas Menggunakan Kumpulan Sprite

Anda boleh memudahkan lagi kod anda dengan menggunakan pygame.sprite.Group untuk mengurus objek Sprite. Ini akan mengendalikan lukisan dan mengemas kini secara automatik.

obstacle = Obstacle()
ball = Ball()

# Create a sprite group and add the sprites to it.
all_sprites = pygame.sprite.Group([obstacle, ball])

while not crashed:
    # [... event handling and game logic]

    gameDisplay.fill((255, 255, 255))

    # Draw all sprites using the group's draw method.
    all_sprites.draw(gameDisplay)

    # [... other game loop tasks]

Atas ialah kandungan terperinci Mengapakah Pengesanan Perlanggaran Pygame Saya Sentiasa Kembali Benar, dan Mengapa Kedudukan Segiempat Segiempat Imej Saya Ditetapkan dengan Salah kepada (0, 0)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn