我正在使用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必须在那个位置褪色和淡出。我试过但没有找到任何东西这会做到这一点。 那怎么办?
答案 0 :(得分:0)
删除只是意味着不绘图,所以请停止调用batcher.draw(coin, x, y, 65,73);
。当然你可能有很多硬币,所以在if
语句中放置一堆绘制调用会变得混乱。将所有硬币位置放在List或数组中。在绘图时循环显示硬币位置列表,然后从集合中移除所拍摄的硬币。要淡出,你想要为每个硬币batcher.setColor(1.0f, 1.0f, 1.0f, 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()