情况:我目前正在编辑类似于打砖块的游戏,但我导入的砖块图片有些大,所以我使用pygame.transform.scale()更改了它的尺寸,但是它的碰撞尺寸没有因此改变,这就导致我在发射球的时候在还未碰到砖块时就已经被判定为得分
问题:请问如何改变pygame导入的图片的碰撞尺寸?
pygame的碰撞检测是基于Rect对象,你改变图片的尺寸后,绘制图片的Rect尺寸也要改变才行
def run_game():
pygame.init()
pygame.mixer.init()
ai_settings = Settings()
screen = pygame.display.set_mode(ai_settings.width_and_height)
t1 = title1(ai_settings,screen,ai_settings.size1)
t2 = title2(ai_settings,screen,ai_settings.size2)
t3 = title3(ai_settings,screen,ai_settings.size3)
ai_button_start = button_start(ai_settings,screen,ai_settings.size4,ai_settings.screen_width,ai_settings.screen_height)
ai_button_settings = button_settings(ai_settings,screen,ai_settings.size4,ai_settings.screen_width,ai_settings.screen_height)
Maus1_1 = maus1_1(screen,ai_settings.size6,ai_button_start,ai_button_settings,ai_settings.screen_width,ai_settings.screen_height)
Maus = maus(screen,ai_settings.size5,ai_button_start,ai_button_settings,Maus1_1,ai_settings.screen_width,ai_settings.screen_height)
ai_button_start_1 = button_start_1(ai_settings,screen,ai_settings.size4,Maus1_1,ai_button_start,ai_settings.screen_width,ai_settings.screen_height)
ai_button_settings_1 = button_settings_1(ai_settings,screen,ai_settings.size4,Maus1_1,ai_button_settings,ai_settings.screen_width,ai_settings.screen_height)
global size_start
global size_start_1
size_start = ai_button_start.size
size_start_1 = ai_button_start_1.size
#ai_button_start = button_start(ai_settings,screen,ai_settings.size4,Maus)
while True:
check_events()
update_screen(ai_settings,screen,t1,t2,t3,ai_button_start,ai_button_settings,Maus,Maus1_1,ai_button_start_1,ai_button_settings_1)
这是游戏主程序
import pygame
class maus1_1():
def init(self,screen,size,button_start,button_settings,screen_width,screen_height):
self.button_start = button_start
self.screen_width = screen_width
self.screen_height = screen_height
self.button_settings = button_settings
self.screen = screen
self.size = size
self.image = pygame.image.load('maus1_1.png')
self.rect = pygame.Rect((0,0),size)
self.screen_rect = self.screen.get_rect()
self.image1 = pygame.transform.scale(self.image,self.size)
self.center1 = pygame.mouse.get_pos()
self.center2 = (self.center1[0] + 50,self.center1[1] + 50)
self.rect.center = self.center1
def update(self):
self.center1 = pygame.mouse.get_pos()
self.center2 = (self.center1[0] + 178,self.center1[1] + 338)
self.rect.center = self.center1
self.screen.blit(self.image1,self.rect)
这是鼠标_1,类似于之前的button_start,这里我也设置了两个鼠标对象
import pygame
class maus():
def init(self,screen,size,button_start,button_settings,Maus,screen_width,screen_height):
self.button_start = button_start
self.Maus = Maus
self.button_settings = button_settings
self.screen_height = screen_height
self.screen_width = screen_width
self.screen = screen
self.size = size
self.image = pygame.image.load('maus_1.png')
self.image_1 = pygame.image.load('maus_2.png')
self.rect = pygame.Rect((0,0),size)
self.screen_rect = self.screen.get_rect()
self.image1 = pygame.transform.scale(self.image,self.size)
self.image1_1 = pygame.transform.scale(self.image_1,self.size)
self.center1 = pygame.mouse.get_pos()
self.center2 = (self.center1[0] + 50,self.center1[1] + 50)
self.rect.center = self.center1
def update(self):
self.center1 = pygame.mouse.get_pos()
self.center2 = (self.center1[0] + 196,self.center1[1] + 341.5)
self.rect.center = self.center1
if pygame.sprite.collide_mask(self.Maus,self.button_start) or pygame.sprite.collide_mask(self.Maus,self.button_settings):
self.screen.blit(self.image1_1,self.rect)
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONUP:
pygame.mixer.music.load('select.wav')
pygame.mixer.music.play(1)
while pygame.mixer.music.get_busy():
pass
pygame.mixer.music.stop()
if not(pygame.sprite.collide_mask(self.Maus,self.button_start) or pygame.sprite.collide_mask(self.Maus,self.button_settings)):
self.screen.blit(self.image1,self.rect)
这是鼠标1
import pygame
class button_start():
def init(self,ai_settings,screen,size,screen_width,screen_height):
self.screen_width = screen_width
self.screen_height = screen_height
self.screen = screen
self.size = size
self.screen_height = screen_height
self.image = pygame.image.load('StARt.png')
self.image1 = pygame.transform.scale(self.image,self.size)
self.image_1 = pygame.image.load('StARt_1.png')
self.image1_1 = pygame.transform.scale(self.image_1,self.size)
self.screen_rect = self.screen.get_rect()
self.width = ai_settings.w4
self.height = ai_settings.h4
self.rect = pygame.Rect((0,0),size)
self.rect.centerx = self.screen_rect.centerx
self.rect.centery = self.screen_rect.centery
def blitme(self):
global size
self.screen.blit(self.image1,self.rect)
这是另外一个button_start