【发布时间】:2013-01-06 21:10:04
【问题描述】:
我正在使用 libGDX 为 Android 开发游戏。我实现了“聚光灯效果”来突出教程关卡中的一些场景元素。我确实使用 Pixmap 类来实现这一点。所以我做了这样的事情:
public class ComplexSpotlight implements MoveObserver{
// somewhere in class
public void update(){
black.setColor(0, 0, 0, 0.7f);
black.fill();
black.setColor(0, 0, 0, 0);
for(Map.Entry<MoveObservable, Vector2> entry : currentObservablePositions.entrySet()){
Vector2 position = entry.getValue();
int x = (int)(Gdx.graphics.getWidth()/2+position.x);
int y = (int)(Gdx.graphics.getHeight()*1.5f-position.y);
int radius = 50;
black.fillCircle(x, y, radius);
System.out.println("at "+x+" "+y);
}
overlay.dispose();
overlay = new Texture(black);
}
public Texture getOverlayTexture(){
return overlay;
}
快速解释 - 我正在创建一个像素图,用颜色(0,0,0,0.7f)填充它。在此之后,我使用 Pixmap.fillCircle() 方法绘制透明圆圈。然后我正在使用这个像素图创建新的纹理。 我已经使用以下设备测试了此代码:HTC One V(480*800)、Sony XPeria Neo 15i(480*854)、HTC Desire S(480*800),效果很好;
但今天我发现 HTC One X(1280*720) 和 Gamsung Nexus(1280*720) 有问题 - 我只看到黑屏。
所以如果有人给我一些关于这个问题的解释,那就太好了。链接,想法 - 任何事情都可能有帮助。 提前致谢!
【问题讨论】:
-
有问题的手机是相当大的屏幕。你的纹理内存用完了还是类似的东西? (假设您以全分辨率绘图)。您可以尝试渲染到较小的视口,看看是否能解决问题。还要确保它真的是覆盖问题(如果禁用覆盖,背景是否正确显示?如果用红色或白色填充它?)
-
我也关注过屏幕尺寸,但没有任何建议。在创建和渲染我的叠加层期间没有发生任何异常/错误。点击屏幕覆盖后删除(根据我的游戏逻辑),我看到了我的背景和游戏对象。此外,我还在此叠加层上方显示带有文本消息的弹出窗口,并且它可以正确呈现。我将尝试测试您提出的建议并用结果更新我的帖子。
-
@P.T.您对大屏幕尺寸完全正确-出于某些原因,我使用了 2*screen 尺寸尺寸,这将纹理尺寸增加到了 4 倍!在我将 Pixmap 大小更改为屏幕大小后,一切正常。如果您将评论作为答案发布,我将批准它作为主题解决方案。谢谢!