簡體   English   中英

如何使用pygame檢測兩個精靈的碰撞?

[英]How do I detect the collision of two sprites using pygame?

到目前為止,這是我的代碼,我可以移動它並放置一個blip進行拾取,我只需要知道如何注冊該blip並將其移動到新的隨機位置即可! 我是pygame的新手,也不是100%精通python,但我很不錯。 如果有pdf:s對python的中級編碼者有好處,那就太好了!

import sys, pygame, os, math
from random import randint

pygame.init()

size = width, height = 800, 600
speed = [2, 2]
black = 1, 1, 1
screen = pygame.display.set_mode(size)
pygame.display.set_caption('Pick up the squares!')
UP='up'
DOWN='down'
LEFT='left'
RIGHT='right'

ball = pygame.image.load("ball.png")
ballrect = ball.get_rect()
ballx = 400
bally = 300

blip = pygame.image.load("blip.png")
bliprect = blip.get_rect()
blipx = randint(1,800)
blipy = randint(1,600)

background = pygame.Surface(screen.get_size())
background = background.convert()

background.fill((250, 250, 250))


clock = pygame.time.Clock()

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()


    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:
        ballx  -= 5
    if keys[pygame.K_RIGHT]:
        ballx += 5
    if keys[pygame.K_UP]:
        bally -= 5
    if keys[pygame.K_DOWN]:
        bally +=5    

    screen.fill(black)
    screen.blit(ball, (ballx,bally))
    screen.blit(blip, (blipx, blipy))
    pygame.display.update()
    clock.tick(40)

使用矩形的colliderect方法:

if ballrect.colliderect(bliprect):
    print 'Do something here'

基本的碰撞檢測是這樣的(假設您正在使用兩個矩形):

def does_collide(rect1, rect2):
    if rect1.x < rect2.x + rect2.width and rect1.x + rect1.width > rect2.x \ 
       and rect1.y < rect2.y + rect2.height and rect1.height + rect1.y > rect2.y:
        return True
    return False

幸運的是,Pygame包含了此類方法,因此您應該使用@MalikBrahimi的答案-使用colliderect函數調用,它將為您完成數學運算。

您也可以嘗試使用pygame.sprite.spritecollide()

if pygame.sprite.spritecollide(a, b, False):
    pass
    #Do something

a在這里是類在碰撞的精靈之一的變量名。 b這里是你的第二個精靈將是該 您可以設置的最后一個真正的,這將從中刪除的精靈。 設置為False將使其保持原樣。 這是一個例子:

if pygame.sprite.spritecollide(my_ball, ballGroup, False):
    Ball.speed[0] = -Ball.speed[0]
    hit.play()
Ball.move()

我的精靈的變量名是my_ball 包含此碰撞中的其他精靈的組是ballGroup 我將最后一個設置為False,以將所有精靈保留在表面上。 如果設置為True,則來自ballGroup的精靈將從組和屏幕中刪除。 我希望這可以幫助你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM