如何在libgdx中定义高亮,可点击的自定义对象(风险游戏)

时间:2018-02-01 01:44:49

标签: java libgdx

我正在开发一款类似于Risk的游戏,并努力寻找实现与各国互动的方法。

基本思想是创建非矩形的自定义对象,并且可以通过单击它们来更改颜色,使用鼠标悬停突出显示它们,或者随着游戏的进行。

我如何选择可以选择的高亮国家? sprite的问题是它们的边界框是矩形的,如果我定义Box2D顶点并制作多边形,它会变得非常混乱。此外,还有很多国家因此很多平台式解决方案都不合适。

我该如何更改所选内容的颜色?是否最好为每个国家都有一个单独的精灵,并在它们之间切换或有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

一种方法是使用像你尝试的多边形,但我想知道为什么以及你的意思是它变得凌乱。有tools可以让你在图像上绘制顶点并让你导出它。您可能需要稍微清理一下数据并将其导入您的应用程序。自己制作这样的应用程序也不是很难,让它导入你的图像并开始绘图并导出到你喜欢的格式。您绘制多边形的细节越详细,您获得的细节就越多。

或许更简单的解决方案是使用国家/地区每张图片的不透明度。每个国家都有自己的图像,你需要重叠边界矩形以排列它们。当鼠标悬停在一个或多个这些边界框上时,检查鼠标是否在透明像素上。如果它是透明的,你显然不会在实际国家上空盘旋。有些事情需要考虑:

  • 我会以像素完美的方式创建游戏,因此您图像的每个像素都会转换为您输出的屏幕的单个像素。
  • 要对齐整个地图,我会在绘图应用程序中创建一个大的世界地图。然后保存每个国家/地区,但保留完整地图的画布大小。使用LibGDX TexturePacker打包这些图像时,删除空白(透明像素),您将在地图集中获得偏移量。您可以为每个国家/地区使用此偏移量来排列它们,并通过删除所有空格来节省宝贵的纹理空间。
  • 在深入潜水之前,请先检查是否发生了简单碰撞。
  • 如果您想拥有“悬停”功能,那么每次更新都不要pixmap = texture.getTextureData().consumePixmap(),因为它相当昂贵。在初始化国家/地区对象时,最好创建自己的2D布尔数组来表示可点击区域。