我试图建立一个简单的游戏与两个精灵。我不知道如何添加代码来检测一个精灵是否接触到另一个。我也很难理解关于这个主题的无数教程。如果你能尽可能简单地向我解释这件事,那就太棒了!在
import pygame
import sys
from pygame.locals import *
pygame.init()
black = (0, 0, 0)
white = (255, 255, 255)
bg = black
square = pygame.image.load('square.png')
square1 = pygame.image.load('square1.png')
screen = pygame.display.set_mode((640, 400))
UP = 'UP'
DOWN = 'DOWN'
LEFT = 'LEFT'
RIGHT = 'RIGHT'
direction = RIGHT
movex, movey, movex1, movey1 = 100, 100, 200, 200
class player1(pygame.sprite.Sprite):
"""Player 1"""
def __init__(self, xy):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('square.png')
self.rect = self.image.get_rect()
class player2(pygame.sprite.Sprite):
"""Player 2"""
def __init__(self, xy):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('square1.png')
self.rect = self.image.get_rect()
while True:
screen.fill(black)
collide = pygame.sprite.collide_mask(player1, player2)
if collide == True:
print 'collision!'
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_w:
movey -= 10
elif event.key == K_s:
movey += 10
elif event.key == K_a:
movex -= 10
elif event.key == K_d:
movex += 10
if event.key == K_UP:
movey1 -= 10
elif event.key == K_DOWN:
movey1 += 10
elif event.key == K_LEFT:
movex1 -= 10
elif event.key == K_RIGHT:
movex1 += 10
if event.type == QUIT:
pygame.quit()
sys.exit()
screen.blit(square, (movex, movey))
screen.blit(square1, (movex1, movey1))
pygame.display.update()
一些问题首先:
pygame.sprite.collide_mask
从不返回True
。它返回一个点或None
。所以你的支票collide == True
永远不会被计算成{pygame.sprite.collide_mask
除了两个Sprite
实例,但是使用class
对象作为参数(collide_mask(player1, player2)
)来调用它pygame.sprite.collide_mask
当您想进行像素完美的碰撞检测时player1
和{如果使用的是} 简单地检查它们的
Sprite
类,冲突检测的一个简单方法是使用Group
类。但是由于只有两个精灵,所以可以使用^{Rects
的交集。在我已更新您的代码以使用
Sprite
类:碰撞检测是一个广泛的主题,但这应该让您开始。在
相关问题 更多 >
编程相关推荐