我在修补PyGame,阅读文章,我遇到了这种奇怪的现象。出于某种原因,当两个精灵不接触时,pygame.colliderect返回True
。代码:
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
running = True
spriteX = 100
spriteY = 100
spriteVY = 3
clock = pygame.time.Clock()
class Sprite(pygame.sprite.Sprite):
def __init__(self):
super(Sprite, self).__init__()
self.vel = (0, 0)
self.surf = pygame.Surface((100, 200))
self.surf.fill((255, 255, 255))
self.rectangle = self.surf.get_rect()
class Platform(pygame.sprite.Sprite):
def __init__(self):
super(Platform, self).__init__()
self.surf = pygame.Surface((200, 10))
self.surf.fill((142, 212, 25))
self.rectangle = self.surf.get_rect()
on_ground = True
while running:
platform_group = pygame.sprite.Group()
platform_group.add(Platform())
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if pygame.key.get_pressed()[pygame.K_SPACE]: spriteY -= 10
if pygame.key.get_pressed()[pygame.K_d]: spriteX += 10
if pygame.key.get_pressed()[pygame.K_a]: spriteX -= 10
print((Platform().rectangle.colliderect(Sprite().rectangle)))
screen.fill((0, 0, 0))
if spriteX >= 300:
spriteX = 300
if spriteX <= 0:
spriteX = 0
if not on_ground:
spriteY += spriteVY
spriteVY -= 3
screen.blit(Sprite().surf, ((spriteX, spriteY)))
screen.blit(Platform().surf, ((50, 20)))
pygame.display.flip()
clock.tick(24)
A^{} 没有位置。因此^{} 返回的^{} 对象的位置是(0,0)。} 时,必须指定位置
注意:当曲面为^{
从曲面获取矩形时,通过关键字参数指定位置。 在主应用程序循环之前创建对象的实例(请参见Instance Objects),并将它们添加到^{} 。每个^{} 应该具有组的方法^{} 使用的属性
.rect
和.image
。使用全局变量
spriteX
和spriteY
,并使用精灵的.rect
属性例如:
相关问题 更多 >
编程相关推荐