2

背景の上に小さなスプライト (ボール) を表示しようとして、Pygame を使用する Python コードに取り組んでいます。私はその部分を機能させていますが、ボールスプライトの背景を透明にしようとしているので、「黒い四角の中のボール」スプライトとして表示されませんが、代わりに黒いピクセルが表示されませんディスプレイ表面にブリット。

これが私のコードです:

# For sys.exit()
import sys

# Pygame imports
import pygame
from pygame.locals import *

# Initialize all the Pygame Modules
pygame.init()

# Build a screen (640 x 480, 32-bit color)
screen = pygame.display.set_mode((640,480)) 

# Create and Convert image files
# Use JPG files for lots of color, and use conver()
# Use PNG files for transparency, and use convert_alpha()
background = pygame.image.load("bg.jpg").convert()
ball = pygame.image.load("ball.png").convert_alpha()
ball.set_colorkey(-1, RLEACCEL) # Use the upper-left pixel color as transparent

# The main loop
while True:

    # 1 - Process all input events
    for event in pygame.event.get():

        # Make sure to exit if the user clicks the X box
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    # 2 - Blit images to screen (main display window)
    screen.blit(background, (0,0))
    x,y = pygame.mouse.get_pos()
    x = x - ball.get_width()/2
    y = y - ball.get_height()/2
    screen.blit(ball, (x,y))

    # 3 - Update the main screen (redraw)
    pygame.display.update()

私は明らかな間違いを犯しているに違いありませんが、それを理解することはできません。ball.set_colorkey(-1, RLEACCEL) を呼び出すと、ボール スプライトの左上隅の色 (たまたま黒) が取得され、それが「ブリットしない」ピクセルの色として使用されます。手順がありませんか?

ご協力いただきありがとうございます。

4

2 に答える 2

4

ピクセルごとのアルファ、カラーキー アルファ、サーフェスごとのアルファがあります。あなたはカラーキーを求めています。

呼び出すconvert_alpha()と、ピクセルごとのアルファ用に新しいサーフェスが作成されます。

そして set_colorkeyから

Surface がピクセルごとのアルファ値を使用するようにフォーマットされている場合、カラーキーは無視されます。

.convert()So:カラーキーを使用したいので、画像をロードします。次に、 を呼び出しますset_colorkey

また、「-1」を set_colorkey の最初の引数として渡すことについて、ドキュメントには何も見ませんでした。

これはおそらく、左上のピクセルの色の値を取得するための load_image 関数を持つチュートリアルからのものです。

于 2012-10-25T22:08:44.637 に答える
0

あなたのイメージはどのように作られていますか?「ball.png」ファイルが透明な背景のボールであり、黒い四角のボールではない場合、ブリッティングの Pygame 透明度は機能するはずです。そうは言っても、「set_colorkey」の Pygame の表面ドキュメントから:

「サーフェスがピクセルごとのアルファ値を使用するようにフォーマットされている場合、カラーキーは無視されます。カラーキーは、完全なサーフェス アルファ値と混合できます。」

したがって、カラーキーの考え方は、画像にピクセルごとのアルファがない場合に使用することです。「アルファの変換」を呼び出すときに、それがあることを確認するだけです。また、「-1」を set_colorkey の最初の引数として渡すことについて、ドキュメントには何も見ませんでした。

要するに、私のアドバイスは、適切な透過画像を使用して開始することです。「convert」、「convert_alpha」、「set_colorkey」などは忘れてください。PNG ファイルのピクセル単位のアルファを使用しない何らかの理由がある場合は、この回答が正しい方法であることを確認してください (画面にブリットするときにピクセル単位のアルファを使用しない理由の 1 つでも): PyGame: Applying transparentアルファ付きの画像に?

于 2012-10-25T01:30:14.603 に答える