0

当我将精灵移动到屏幕右侧时,我不断收到分段错误或崩溃。

我试图让我的“精灵”与我在与蒙版接触时拥有的另一个图像“切换”像素,然后在它离开时变回来。目前它做得不太好,分段错误也无济于事。

该项目从 https://www.youtube.com/watch?v=Idu8XfwKUao 上的 code.Pylet 显示的内容开始。我正在修改它的地方就是我遇到问题的地方,从 while 循环开始。根据我的 IDE,它与maskOverlap变量的设置有关,我认为更具体的错误在于offset2变量

所以我的问题是:任何人都可以看到分段错误发生的位置和原因,以及:我可以做些什么来改善我的精灵改变颜色然后变回来的结果。

import math, random, sys
import cv2
import pygame
from pygame.locals import *

# exit the program
def events():
    for event in pygame.event.get():
        if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
            pygame.quit()
            sys.exit()

# define display surface            
W, H = 900, 600
HW, HH = W / 2, H / 2
AREA = W * H

# initialise display
pygame.init()
CLOCK = pygame.time.Clock()
DS = pygame.display.set_mode((W, H))
pygame.display.set_caption("code.Pylet - Pixel Perfect Collision")
FPS = 120

# define some colors
BLACK = (0, 0, 0, 255)
WHITE = (255, 255, 255, 255)

obstacle = pygame.image.load("obstacle-400x399.png").convert_alpha()
#obstacle = pygame.image.load("mask.jpg").convert_alpha()
obstacle_mask = pygame.mask.from_surface(obstacle)
obstacle_rect = obstacle.get_rect()
ox = HW - obstacle_rect.center[0]
oy = HH - obstacle_rect.center[1]

green_blob = pygame.image.load("greenblob-59x51.png").convert_alpha()
orange_blob = pygame.image.load("orangeblob-59x51.png").convert_alpha()


blob_mask = pygame.mask.from_surface(green_blob)
blob_rect = green_blob.get_rect()
#blob_color = green_blob

# main loop
while True:
    events()

    mx, my = pygame.mouse.get_pos()

    offset = (int(mx - ox), int(my - oy))
    offset2 = (int(ox - mx), int(oy - my))
    result = obstacle_mask.overlap(blob_mask, offset)
    maskOverlap = blob_mask.overlap_mask(obstacle_mask, offset2)
    #blob_temp = blob_color
    maskSize = maskOverlap.get_size()
    a, b = maskSize

    if result:
        blob_color = green_blob.copy()
        for x in range(maskSize[0]):
            for y in range(maskSize[1]):
                if maskOverlap.get_at((x,y)):
                    blob_color.set_at((x,y), orange_blob.get_at((x,y)))

    else:
        blob_color = green_blob

    DS.blit(obstacle, (ox, oy))
    DS.blit(blob_color, (mx, my))

    pygame.display.update()
    CLOCK.tick(FPS)
    DS.fill(BLACK)
4

0 回答 0