簡體   English   中英

libGDX將精靈中的顏色設置為透明

[英]libGDX set color in sprite to transparent

我正在將精靈從精靈表繪制到屏幕上。 子畫面具有黑色背景。 我希望將黑色(只有黑色)渲染為透明(如果可能)。 所以,說我有一個紅色背景。 然后,我有一個帶有藍色圓圈和黑色背景的精靈。 當我將其繪制到屏幕上時,我只希望看到藍色圓圈(顯然還有紅色背景)。 這是我當前項目的代碼。 幫助極大的贊賞!

   public void render(float delta) {
            Gdx.gl.glClearColor(1f, 1f, 1f, 1f);
            Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

            batch.setProjectionMatrix(camera.combined);
            batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
            batch.enableBlending();

            camera.update();
            generalUpdate();

            batch.begin();
            // Rendering Code
            Assets.sprite_moon.draw(batch);

            if (Assets.accelerated) {
                Assets.sprite_flame.draw(batch);
            }
            Assets.sprite_rocket.draw(batch);

            Assets.sprite_blue.draw(batch);
            // End render code
            batch.end();
            batch.disableBlending();
        }

您正在尋找“色度鍵”或“色鍵”支持(並且您希望黑色成為您的“色度色”)。 通常,libgdx不支持此功能。 請參見卸下Sprites顏色鍵libGDX

但是,大多數工具(和Libgdx)都支持“ alpha通道”,這是一種指定任何像素的透明度而不依賴其顏色的方式。 生成圖像甚至將圖像打包到Spritesheet中時,您都應該能夠設置透明度。 或者,您可以自己在圖像上建立預處理通道。 請參閱如何告訴libgdx使用特定顏色的透明度?

如果您真的想使用色度鍵方法,可以嘗試使用自定義着色器,但是除非您有充分的理由使用着色器,否則我會避免使用該方法。

我知道這很舊,但是出於優先考慮,如果沒人要下載GIMP,我使用這個免費網站將我的精靈變成透明的png:

http://www.online-image-editor.com/

我在python3中編寫了以下腳本,以使用帶有Alpha通道的PNG替換一堆具有顏色鍵透明度的圖像。 隨意使用它,就像這樣調用它:process_image(“ a.bmp”,“ a.png”)

它需要scipy和numpy,您可以使用pip3進行安裝。

 #!/usr/bin/env python3

 from scipy import misc
 import numpy as np

 def process_image(filepath, outfile):
     image = misc.imread(filepath)
     if image.shape[2] == 3:
         alpha = np.expand_dims(np.full(image.shape[:2], 255), axis=2)
         image = np.append(image, alpha, axis=2)

     width, height = image.shape[1], image.shape[0]
     color_key = image[0,0,:3]

     for x in range(width):
         for y in range(height):
             pixel = image[y,x,:3]
             if np.array_equal(pixel, color_key):
                 image[y,x,3] = 0
     misc.imsave(outfile, image)

這是我用來使顏色透明的一些代碼。 在這種情況下,我從Blender渲染輸出中獲得了一系列關鍵幀,這些關鍵幀使用全綠色作為色鍵,即。 綠色屏幕。

import pygame

OUTPUT_FN = 'spritesheet.png'
SPRITE_SIZE = 256
COLUMNS = 4
ROWS = 4
TRANSP_COLOR = (0,255,0)

screen_size = ((SPRITE_SIZE * COLUMNS, SPRITE_SIZE * COLUMNS))
screen = pygame.display.set_mode(screen_size)

x, y = 0, 0
column, row = 0,0

sheet = pygame.Surface(screen_size)

for i in range(1,25):
    if i < 10:
        fn = "%s%i.png" % ("000", i)
    else:
        fn = "%s%i.png" % ("00", i)
    keyframe = pygame.image.load(fn)
    keyframe.set_colorkey(TRANSP_COLOR)
    x = column * SPRITE_SIZE
    y = row * SPRITE_SIZE 
    sheet.blit(keyframe, (x,y))
    if column + 1 == COLUMNS:
        column = 0
        row += 1
    else:
        column += 1


running = True
while running:
    pygame.display.update()
    screen.blit(sheet, (0,0))


    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            running = False
        if e.type == pygame.KEYDOWN:
            kname = pygame.key.name(e.key)
            if kname == 'q':
                running = False
            if kname == 's':
                pygame.image.save(screen, OUTPUT_FN)

pygame.quit()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM