Pythonでスクラッチミュージックを実現(マスクレイヤーも絵)

Pythonでスクラッチミュージックを実現(マスクレイヤーも絵)

Pythonでは通常のスクラッチとは一味違うスクラッチ効果を実現しており、スクラッチされたマスクレイヤーが絵になっており、それを削ると下の絵が露出します。ゲーム ループでは、スクラッチ効果をシミュレートするマウス移動イベントをリッスンします。

レンダリング

 Pygame は、SDL ライブラリに基づいて開発された、ゲーム ソフトウェア開発に使用される Python プログラム モジュールのセットです。Pygame は、Python プログラムで機能豊富なゲームやマルチメディア プログラムを作成できるようにする、複数のオペレーティング システムをサポートする移植性の高いモジュールです。小規模なゲームの開発に非常に適しています。
このコードを実行する前に、Pygame ライブラリがインストールされていることを確認する必要があることに注意してください。インストールされていない場合は、コンソールで次のコマンドを使用してインストールします:
pip install pygame
[サードパーティ ライブラリのインストールの詳細については、https: //blog.csdn.net/cnds123/article/details/を参照してください。 104393385 ]

ソースコードは次のとおりです。

import pygame

# 初始化 Pygame
pygame.init()

# 创建屏幕和加载图片
screen = pygame.display.set_mode((590, 710))  #屏幕大小根据实际修改
mask_image = pygame.image.load("mask_image.jpg")  #图片名称及路径根据实际情况修改
image = pygame.image.load("base_image.jpg") #图片名称及路径根据实际情况修改

# 将遮罩层图片缩放到与底部图片相同大小
mask_image = pygame.transform.scale(mask_image, image.get_size())

# 转换遮罩层和底部图片的表面类型为 alpha 模式
mask_surface = mask_image.convert_alpha()
image_surface = image.convert_alpha()

# 创建一个用于将重叠的表面合成的 Surface 对象
result_surface = pygame.Surface(image.get_size(), flags=pygame.SRCALPHA)

# 游戏主循环
def main_loop():
    while True:
        for event in pygame.event.get():
            if event.type == pygame.MOUSEMOTION:
                if pygame.mouse.get_pressed()[0]:
                    # 在遮罩层上绘制擦除线条
                    pygame.draw.circle(mask_surface, (0, 0, 0, 0), event.pos, 30)

            if event.type == pygame.QUIT:
                pygame.quit()
                return

        # 将底部图片和遮罩层图片绘制到 draw_surface 上
        draw_surface = pygame.Surface(image.get_size(), flags=pygame.SRCALPHA)
        draw_surface.blit(image_surface, (0, 0))
        draw_surface.blit(mask_surface, (0, 0))

        # 将重叠的表面合成
        result_surface.fill((255, 255, 255, 255))
        result_surface.blit(draw_surface, (0, 0), special_flags=pygame.BLEND_RGBA_MULT)

        # 在屏幕上绘制合成后的表面
        screen.blit(result_surface, (0, 0))

        pygame.display.flip()

if __name__ == "__main__":
    main_loop()

OK!

おすすめ

転載: blog.csdn.net/cnds123/article/details/131213316