【问题标题】:How to clear out a drawn texture from the screen in java libGDX Framework如何在 java libGDX Framework 中从屏幕上清除绘制的纹理
【发布时间】:2015-12-13 21:47:17
【问题描述】:

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

让我们举一个经典的游戏示例 - 在许多游戏中,当角色穿过硬币时,硬币会从屏幕上清除并显示一个甜美的动画,例如淡入淡出从硬币中收集的点数 (+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这样的大字体必须在那个位置淡入淡出。我试过但没有找到任何会做这个。 那么该怎么做呢?

【问题讨论】:

  • libgdx 不是一种简单易行的方式。您必须自己做所有事情
  • @DuhProgrammer13 我不是要整个游戏代码。我只是想知道是否有一些功能可以取消/删除/删除我使用 spritebatch 绘制的纹理。
  • 你的硬币是如何存储的?
  • texture.png 有一个硬币图像和其他游戏资产图像。我使用 TextureRegion() 从那里获取硬币图像,如代码本身所示。
  • 那很好,但是硬币的(x,y)坐标怎么存储呢?

标签: libgdx


【解决方案1】:

删除只是意味着不绘制,所以停止调用batcher.draw(coin, x, y, 65,73);。当然,您可能有很多硬币,所以在if 语句中放置一堆draw call 会变得一团糟。将所有硬币位置放在列表或数组中。绘制时循环遍历硬币位置列表,然后从收藏中删除取走的硬币。要淡出,您想弄乱每个硬币的批次的 alpha batcher.setColor(1.0f, 1.0f, 1.0f, alpha);

您可以自己进行数学计算,以计算硬币褪色时 alpha 的变化情况,或者您可以使用 com.badlogic.gdx.math.Interpolation 类或通用补间引擎进行研究。

如果你改用 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);

【讨论】:

  • 你能举一个用精灵做的小例子吗?
【解决方案2】:

Libgdx 具有用于绘制/隐藏/移动等的 Stage/Actor... (com.badlogic.gdx.scenes.scene2d)。

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

渲染中:
stage.draw()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多