0

我正在制作一个游戏,我的一个对象是一艘船,另一个是一艘敌舰,我让我的敌舰跟随这艘船。我想让敌舰与船相撞,然后使用碰撞检测器结束游戏;

这是我的代码。

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)
4

2 回答 2

1

Pygamerect对象有大量的碰撞检测方法。更多信息请访问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
于 2013-11-12T09:51:29.947 回答
0

因为您self.rect在所有对象中都可以使用Sprite碰撞检测

B = Bad()
S = Ship()

pygame.sprite.collide_rect(B, S) # return True or False

使用 sprite,您可以使用以下方法检测碰撞:rectanglecirclemask

顺便一提:

您的Object类和其他类非常相似,Sprite因此您可以使用更多的精灵函数。

Sprite和其他类<=>您的属性/功能使用的一些属性/功能

  • 绘制(屏幕)<=>显示(屏幕)
  • 更新()<=>追逐(),循环()
  • self.rect <=> self.rect
  • self.image <=> self.sprite
于 2013-11-12T17:53:16.067 回答