如何从java libGDX Framework中的屏幕清除绘制的纹理

时间:2014-03-29 12:08:22

标签: libgdx

我正在使用java libGDX Framework进行游戏开发。我正试图从屏幕上清除绘制的纹理。

让我们看一个经典的游戏示例 - 在许多游戏中,当角色通过硬币时,硬币从屏幕上清除并显示甜蜜的动画,如淡入淡出并淡出从该硬币收集的点数(+10)并显示硬币在那个位置爆炸动画。

我想做类似的事情。 我正在使用SpriteBatch绘制纹理区域,如下所示。

设置纹理区域:

   (...)
    public Texture texture;
    public TextureRegion coin;
    texture = new Texture(Gdx.files.internal("data/texture.png"));
    texture.setFilter(TextureFilter.Nearest, TextureFilter.Nearest); 
    coin = new TextureRegion(texture, 0, 336, 65, 73);
   (...)  

将纹理绘制到屏幕中

  public SpriteBatch batcher;
  batcher = new SpriteBatch();
  batcher.setProjectionMatrix(cam.combined);
  batcher.begin();
  batcher.enableBlending();
  batcher.draw(coin, x, y, 65,73);
  (...)
  (...)
  batcher.end();  

游戏角色也使用上面显示的相同逻辑绘制。 现在,当游戏角色与我画的硬币发生碰撞时,必须清除硬币(消失),并且某些动画或大字体如+50必须在那个位置褪色和淡出。我试过但没有找到任何东西这会做到这一点。 那怎么办?

2 个答案:

答案 0 :(得分:0)

删除只是意味着不绘图,所以请停止调用batcher.draw(coin, x, y, 65,73);。当然你可能有很多硬币,所以在if语句中放置一堆绘制调用会变得混乱。将所有硬币位置放在List或数组中。在绘图时循环显示硬币位置列表,然后从集合中移除所拍摄的硬币。要淡出,你想要为每个硬币batcher.setColor(1.0f, 1.0f, 1.0f, alpha);

弄乱你的批次的alpha

您可以自己计算数学来计算在硬币褪色时alpha变化的方式,或者您可以使用com.badlogic.gdx.math.Interpolation类或Universal Tween Engine查看。

如果切换到使用Sprites,它将更容易管理。

// not in render
Sprite coin1 = new Sprite(coinTextureRegion);
coin1.setPosition(x,y);

// in render
coin1.setColor(1.0f, 1.0f, 1.0f, alpha); // if fading
coin1.draw(batch);

答案 1 :(得分:0)

Libgdx有舞台/演员用于绘制/隐藏/移动等...(com.badlogic.gdx.scenes.scene2d)。

用纹理创建actor:
Image image = new Image(yourTexture);
stage.addActor(image);

在渲染中:
stage.draw()

停止绘制纹理:
image.remove()