如何解决我将如何使用 pygame.mask 进行颜色碰撞?
我在某些敌人周围准备了一些碰撞箱。这些碰撞箱是白色的。当它们接触到某种颜色时,例如红色,就会触发 if 语句。我听说 pygame.mask
在这种情况下很有用。
代码:
# Setting a display width and height and then creating it
display_width = 700
display_height = 500
display_size = [display_width,display_height]
game_display = pygame.display.set_mode(display_size)
intro_display = pygame.display.set_mode(display_size)
spaceship = pygame.image.load("spaceship2.png")
blue_enemy = pygame.image.load("blue_enemy.png")
green_enemy = pygame.image.load("green_enemy.png")
orange_enemy = pygame.image.load("orange_enemy.png")
pink_enemy = pygame.image.load("pink_enemy.png")
yellow_enemy = pygame.image.load("yellow_enemy.png")
# Creating a way to add text to the screen
def message(sentence,color,x,y,font_type,display):
sentence = font_type.render(str.encode(sentence),True,color)
display.blit(sentence,[x,y])
# Creating a loop to keep program running
while True:
# --- Event Processing and controls
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
spaceship_x_change = 10
elif event.key == pygame.K_LEFT:
spaceship_x_change = -10
elif event.type == pygame.KEYUP:
spaceship_x_change = 0
message(str(blue_enemy_health),white,65,10,font,game_display)
game_display.blit(blue_enemy,(20,25))
blue_hit_Box = pygame.draw.rect(game_display,[30,35,80,70],1)
message(str(green_enemy_health),203,game_display)
game_display.blit(green_enemy,(160,25))
green_hit_Box = pygame.draw.rect(game_display,[180,60,1)
message(str(orange_enemy_health),341,game_display)
game_display.blit(orange_enemy,(300,25))
orange_hit_Box = pygame.draw.rect(game_display,[315,43,1)
message(str(pink_enemy_health),496,game_display)
game_display.blit(pink_enemy,(440,25))
pink_hit_Box = pygame.draw.rect(game_display,[460,90,1)
message(str(yellow_enemy_health),623,game_display)
game_display.blit(yellow_enemy,(580,25))
yellow_hit_Box = pygame.draw.rect(game_display,[590,40,85,1)
# Creating a spaceship,lasers,and enemies
laser = pygame.draw.rect(game_display,red,[spaceship_x + 69,100,4,300])
game_display.blit(spaceship,(spaceship_x,spaceship_y))
我希望当敌人周围的白色碰撞盒与红色接触时触发 if 事件。我希望通过 pygame.mask
专门完成此操作。
谢谢
解决方法
Pygame 中的 mask 碰撞多次回答。请参阅 Mask 和以下问题的答案:
但是,您有一个特殊情况,您想从红色 (255,0) 创建蒙版。
要从单一颜色创建蒙版,请使用 pygame.Surface.convert
创建格式不带每像素 alpha 的图像,并使用 pygame.Surface.set_colorkey
根据蒙版颜色设置透明色键:
mask_image = image.convert()
mask_image.set_colorkey(mask_color)
使用 pygame.mask.from_surface
从图像中创建蒙版并使用 pygame.mask.Mask.invert
反转蒙版:
mask = pygame.mask.from_surface(mask_image)
mask.invert()
最小示例:
import pygame
def ColorMask(image,mask_color):
mask_image = image.convert()
mask_image.set_colorkey(mask_color)
mask = pygame.mask.from_surface(mask_image)
mask.invert()
return mask
pygame.init()
window = pygame.display.set_mode((450,250))
test_image = pygame.Surface((200,200),pygame.SRCALPHA)
pygame.draw.circle(test_image,(255,0),(70,70),70)
pygame.draw.circle(test_image,(0,255,(130,255),130),70)
mask = ColorMask(test_image,0))
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.fill(0)
window.blit(test_image,(25,25))
window.blit(mask.to_surface(),(250,25))
pygame.display.flip()
pygame.quit()
exit()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。