【发布时间】:2015-11-08 13:56:50
【问题描述】:
我有这两个纹理
ballImage = new Texture(Gdx.files.internal("ball.png"));
spikeImage = new Texture(Gdx.files.internal("spike.png"));
点击时,我正在检查一个条件,这取决于我将绘制与矩形相关的 ballImage 或 peakImage(保存在数组中)。如下所示,
if (Gdx.input.isTouched()) {
Vector3 touchPos = new Vector3();
touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
camera.unproject(touchPos);
if (isSpike()) {
spawnSpike(touchPos);
} else {
spawnBalls(touchPos);
}
}
这里有一个spawn方法(另一个类似),
private void spawnSpike(Vector3 touchPos) {
Spike spike = new Spike();
spike.setRectX((int) touchPos.x);
spike.setRectY((int) touchPos.y);
spike.setRectWidth(64);
spike.setRectHeight(48);
spikes.add(spike);
}
渲染中的绘图是,
for (Ball ball : balls) {
game.batch.draw(ballImage, ball.getRectX(), ball.getRectY());
}
for (Spike spike : spikes) {
game.batch.draw(spikeImage, spike.getRectX(), spike.getRectY());
}
问题:
在触摸事件中,当 isSpike() 为假时,一切都很好,它绘制了正确的纹理(球),但当它为真时,它应该绘制它所做的尖峰图像,但由于某种原因,绘制了一个球图像在此之前,spikeImage 被绘制在其顶部(重叠)。为什么会这样,我做错了什么。
【问题讨论】:
-
在我看来,您在未显示的部分代码中一定犯了某种错误。可能是一些有缺陷的逻辑。一个球要么在其他地方产生,要么你的 isSpike() 方法有一个错误,导致它在返回 true 之前返回 false,从而产生一个球。