2015-04-02 2 views
1

Я рисую спрайты, с спрайта, на экран. У спрайтов есть черный фон. Я бы хотел, чтобы черный, и только черный, был прозрачным, если это возможно. Итак, скажем, у меня красный фон. Тогда у меня есть спрайт, который имеет синий круг с черным фоном. Когда я рисую его на экране, я хочу видеть только синий круг (и, очевидно, красный фон). Вот код для моего текущего проекта. Помощь очень ценится!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(); 
     } 
+0

Просто вопрос. Вам абсолютно нужна версия вашего спрайта с черным фоном? Если нет, вам нужно только стереть черную часть с помощью Photoshop или [Gimp] (http://www.gimp.org/downloads/) и сохранить новое изображение в формате PNG. В этом формате все «пустые» части вашего изображения будут прозрачными. – vdlmrc

+0

Нет Мне не нужна версия спрайта с черным фоном, просто мой лист спрайта выглядит так: http://4.bp.blogspot.com/-ng26oRCJ4ko/UNwAXo3m7GI/AAAAAAAAAIs/wcckofUYn0Y/s1600 /Blocks+empty.png Я думаю, было бы проще во время выполнения, хотя, если бы я сделал изображение прозрачным в gimp (что я использую). –

ответ

1

Вы ищете «ключ цветности» или «поддержку цвета ключа» (и вы хотите, черным, чтобы быть вашим «цветность цвета»). В общем, это не то, что поддерживается libgdx. См. Removing a Sprites Color Key libGDX

Однако большинство инструментов (и Libgdx) поддерживают «альфа-канал», который является способом указания прозрачности любого пикселя, независимо от его цвета. Вы должны иметь возможность устанавливать прозрачность при создании изображения или даже при упаковке изображения в спрайт. Или вы можете самостоятельно создать прогон предварительной обработки изображений. См. How do you tell libgdx to use a specific color for transparency?

Если вы действительно хотите использовать подход с цветовым ключом, вы можете попробовать использовать пользовательский шейдер, но я бы избегал этого подхода, если у вас нет действительно сильной причины играть с шейдерами.

+0

Спасибо за ответ! Я думаю, что я просто попробую отредактировать спрайт с помощью gimp и превратить фон в прозрачный. Я получал довольно отчаянный, я даже сделал метод, который взял текстуру листа спрайтов, превратил его в pixmap, циклически перемещал все пиксели и проверял, были ли черные, и если да, измените его на прозрачный. Затем вернул новый лист спрайтов. По какой-то причине это не сработало: / –

0

Я знаю, что это старый, но ради старшинства, если никто не хочет, чтобы загрузить GIMP, я использовал этот бесплатный сайт, чтобы мои спрайты прозрачный PNG:

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

0

Я написал следующий скрипт в Python3 для замените кучу изображений прозрачностью цветового ключа с 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)