2016-05-04 5 views
0

Pixmapを使用してLibGDXで「破壊可能な」地形(2D)を作成しようとしています。 しかし、設定している色が画面に正しく表示されません。LibGDX pixmapがピクセルを正しく更新しない

完全なソース(色は、デバッグのために現在、リリースのアルファ= 0でなければならない):

public class Terrain extends Actor implements Disposable { 
private Sprite mySprite; 
private Texture myTexture; 
private Pixmap myMap; 

public Terrain(Texture texture, Vector2 position) 
{ 
    setPosition(position.x, position.y); 
    if (!texture.getTextureData().isPrepared()) { 
     texture.getTextureData().prepare(); 
    } 
    // Final product will take original image from a texture to create pixmap 
    // myMap = texture.getTextureData().consumePixmap(); 
    myMap = new Pixmap(400, 400, Pixmap.Format.RGBA8888); 
    myMap.setBlending(Pixmap.Blending.SourceOver); 
    myMap.setColor(Color.BLUE); 
    myMap.fillRectangle(0, 0, 400, 400); 
    myTexture = new Texture(myMap, Pixmap.Format.RGBA8888, false); 
    mySprite = new Sprite(myTexture); 
} 

public void removePixels(List<Vector2> pixels) 
{ 
    myMap.setColor(Color.GREEN); 
    myMap.fillCircle(1,1,1); 
    myMap.setColor(Color.YELLOW); 
    for (Vector2 pixel:pixels) { 
     myMap.fillCircle((int)pixel.x, (int)pixel.y, 1); // Works, but is Black? 
     myMap.drawPixel((int)pixel.x, (int)pixel.y, 255) // Does not work 
    } 
    myTexture = new Texture(myMap, Pixmap.Format.RGBA8888, false); 
    mySprite = new Sprite(myTexture); 

    System.out.println("Pixels Removed"); 
} 

@Override 
public void draw(Batch batch, float parentAlpha) { 
    batch.draw(mySprite, getX(), getY(), mySprite.getWidth(), mySprite.getHeight()); 
// batch.draw(myMap, getX(), getY(), myMap.getWidth(), myMap.getHeight()); 
} 

@Override 
public void dispose() { 
    myMap.dispose(); 
} 

drawPixelで描かれた画素が表示されませんがfillCircleで描かれた形状は、常に黒であり、いくつかの理由更新(元の色のまま)。 LibGDXでピクセルを設定するにはどうすればいいですか? (好ましくはglslを使用しないで)

答えて

1

drawCircle(x, y, 1)を呼び出すと、R = 0、G = 0、B = 0、A = 1/255と考えることができるRGBA8888カラー1が渡されます。 .drawPixel((int)pixel.x, (int)pixel.y, 255)を呼び出すと、R = 0、G = 0、B = 0、A = 1と思われるRGBA8888カラー255が渡されます。どちらの場合も、呼び出しはピックスマップで最後に設定した色を無視します。カラーパラメータを使用しないこれらのメソッドのバージョンを使用します。

他にもいくつかのエラーがあります。古いものを廃棄しない場合は、myTexture = new Texture(...)に電話するたびにテクスチャが漏れています。しかし、実際には、あなたのテクスチャに更新されたpixmapを描画して、高速になるはずです。 myTexture.draw(myMap, 0, 0);sprite.drawを使用していない場合でも、Spriteオブジェクトを使用する理由はありません。 batch.drawでスプライトを描画する場合は、TextureRegionを使用することもできます。

+0

私はdrawCircleではなく、fillCircleを呼び出しています(3番目の引数(1)はこの円の半径です)。さらに、drawPixel()呼び出しは(0を試した(空の場合)、255、1024、2048)引数では機能しません。 私はスプライトを使用している理由は、私のゲームのすべてのオブジェクトがスプライトを持っているので、私の衝突を書き換えるよりスプライトを使用するほうが簡単です。 テクスチャが既に私のピックスマップをソースとして使用している場合、「テクスチャに描画する」必要がありますか? –

関連する問題