我正在制作一个游戏,其中一个物体是一艘船而另一个是敌舰,我设置我的敌舰跟随船。我想让敌舰与船相撞,然后使用碰撞探测器结束游戏;
这是我的代码。
from pygame import *
size_x = 1200
size_y = 700
class Object:
def disp(self, screen):
screen.blit(self.sprite, self.rect)
class Bad (Object):
def __init__(self):
self.sprite = image.load("bad guys.bmp")
self.rect = self.sprite.get_rect()
self.rect.centerx = size_x / 2
self.rect.centery = size_y / 2
def chase(self, mouse):
if self.rect.centerx > S.rect.centerx:
self.rect.centerx-=10
if self.rect.centerx< S.rect.centerx:
self.rect.centerx+= 10
if self.rect.centery > S.rect.centery:
self.rect.centery-= 10
if self.rect.centery< S.rect.centery:
self.rect.centery+= 10
class gameover (Object):
def __init__(self):
self.sprite= image.load("game over.bmp")
self.rect= self.sprite.get_rect()
self.rect.centerx=500
self.rect.centery=500
class Ship(Object):
def __init__(self):
self.sprite = image.load("ship.bmp")
self.rect = self.sprite.get_rect()
self.rect.centerx = 100
self.rect.centery = 100
def cycle (self):
self.rect.centerx, self.rect.centery=mouse.get_pos()
class shot(Object):
def __init__(self):
self.sprite = image.load("shot.bmp")
self.rect = self.sprite.get_rect()
self.rect.centerx=100
self.rect.centery=100
def cycle (self):
self.rect.centerx = S.rect.centerx
self.rect.centery = S.rect.centery-(S.sprite.get_width()/2)
for e in event.get():
if e.type==KEYDOWN:
if e.key==K_SPACE:
self.rect.centery-=10
init()
screen = display.set_mode((size_x, size_y))
B = Bad()
S = Ship()
g= gameover()
shot=shot()
clock = time.Clock()
while True:
for e in event.get():
if e.type == QUIT:
quit()
B.chase(S)
S.cycle()
shot.cycle()
screen.fill((255,255,255))
screen=display.set_mode((size_x,size_y))
screen=display.set_mode((size_x,size_y))
background=image.load("space.bmp")
background=transform.scale(background,(size_x,size_y))
screen.blit(background,(0,0))
S.disp(screen)
B.disp(screen)
shot.disp(screen)
display.flip()
clock.tick(60)
答案 0 :(得分:1)
Pygame rect
对象有很多碰撞检测方法。更多http://www.pygame.org/docs/ref/rect.html
import pygame
ship1 = (left_pos1, right_pos1, width1, height1)
ship2 = (left_pos2, right_pos2, width2, height2)
if ship1.colliderect(ship2): # ships collide
# do something
答案 1 :(得分:0)
因为您在所有对象中都有self.rect
,所以您可以使用Sprite碰撞检测
B = Bad()
S = Ship()
pygame.sprite.collide_rect(B, S) # return True or False
使用精灵,你可以使用rectangle,circle或mask来检测碰撞。
顺便说一下:
您的Object
课程和其他课程与Sprite
非常相似,因此您可以使用更多精灵功能。
Sprite
和其他类&lt; =&gt;使用的一些属性/函数你的财产/职能