Pygame 像素完美碰撞代码无效
Pygame pixel perfect collision code not working
我正在导入 pixelperfect 并使用其中一个名为 check_collision(object1, object2) 的函数,这是我从 http://www.pygame.org/wiki/FastPixelPerfect 获得的网站
当我使用该函数时,它总是 returns false,我不知道为什么。如果有人可以帮助我或有更好的方法来进行像素完美碰撞,我将不胜感激。
问题总是返回 false。
代码如下:
import pygame, pixelperfect
from pygame.locals import *
from pixelperfect import *
screen = pygame.display.set_mode([640, 480])
screen.fill([255,255,255])
pygame.display.flip()
class Ball(object):
def __init__(self, picture, speed, loc):
self.image = pygame.image.load(picture)
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = loc
self.speed = speed
def move(self):
self.rect = self.rect.move(self.speed)
if self.rect.left < 0 or self.rect.right > screen.get_width():
self.speed[0] = - self.speed[0]
elif self.rect.top < 0 or self.rect.bottom > screen.get_height():
self.speed[1] = - self.speed[1]
ball = Ball("beach_ball.png", [5,5], [0,0])
ball.rect.center = [80, 50]
ball2 = Ball("beach_ball.png", [-5,-5], [200, 200])
ball2.rect.center = [100, 200]
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill([255,255,255])
ball.move()
ball2.move()
if check_collision(ball, ball2):
print 'hit'
screen.blit(ball.image, ball.rect)
screen.blit(ball2.image, ball2.rect)
pygame.display.flip()
clock.tick(30)
pygame.quit()
来自您提供的页面:
All objects must have a 'rect' attribute and a 'hitmask' attribute.
您只实现了 rect。它使用命中图来检查是否存在碰撞,并且由于您没有提供它 returns false。
编辑:
尝试使用 get_full_hitmask(image, rect) 来获取一个 hitmask,并将其添加到对象中。
我正在导入 pixelperfect 并使用其中一个名为 check_collision(object1, object2) 的函数,这是我从 http://www.pygame.org/wiki/FastPixelPerfect 获得的网站 当我使用该函数时,它总是 returns false,我不知道为什么。如果有人可以帮助我或有更好的方法来进行像素完美碰撞,我将不胜感激。
问题总是返回 false。
代码如下:
import pygame, pixelperfect
from pygame.locals import *
from pixelperfect import *
screen = pygame.display.set_mode([640, 480])
screen.fill([255,255,255])
pygame.display.flip()
class Ball(object):
def __init__(self, picture, speed, loc):
self.image = pygame.image.load(picture)
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = loc
self.speed = speed
def move(self):
self.rect = self.rect.move(self.speed)
if self.rect.left < 0 or self.rect.right > screen.get_width():
self.speed[0] = - self.speed[0]
elif self.rect.top < 0 or self.rect.bottom > screen.get_height():
self.speed[1] = - self.speed[1]
ball = Ball("beach_ball.png", [5,5], [0,0])
ball.rect.center = [80, 50]
ball2 = Ball("beach_ball.png", [-5,-5], [200, 200])
ball2.rect.center = [100, 200]
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill([255,255,255])
ball.move()
ball2.move()
if check_collision(ball, ball2):
print 'hit'
screen.blit(ball.image, ball.rect)
screen.blit(ball2.image, ball2.rect)
pygame.display.flip()
clock.tick(30)
pygame.quit()
来自您提供的页面:
All objects must have a 'rect' attribute and a 'hitmask' attribute.
您只实现了 rect。它使用命中图来检查是否存在碰撞,并且由于您没有提供它 returns false。
编辑: 尝试使用 get_full_hitmask(image, rect) 来获取一个 hitmask,并将其添加到对象中。