Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在libgdx(风险游戏)中定义可高亮显示、可单击的自定义对象_Java_Libgdx - Fatal编程技术网

Java 如何在libgdx(风险游戏)中定义可高亮显示、可单击的自定义对象

Java 如何在libgdx(风险游戏)中定义可高亮显示、可单击的自定义对象,java,libgdx,Java,Libgdx,我正在制作一个类似于风险的游戏,并努力寻找一种方法来实现与各国的互动 其基本思想是创建非矩形的自定义对象,并能够通过单击它们、使用鼠标悬停突出显示它们或随着游戏的进行而改变它们的颜色 我将如何选择有能力的国家?精灵的问题是它们的边界框是矩形的,如果我定义Box2D顶点并使多边形变得非常混乱。此外,还有很多国家,所以很多平台式解决方案都不适合 我应该如何更改所选内容的颜色?最好是每个国家都有一个单独的精灵,并在它们之间不断切换,还是有更好的方法?一种方法是像你尝试过的那样使用多边形,但我想知道为什

我正在制作一个类似于风险的游戏,并努力寻找一种方法来实现与各国的互动

其基本思想是创建非矩形的自定义对象,并能够通过单击它们、使用鼠标悬停突出显示它们或随着游戏的进行而改变它们的颜色

我将如何选择有能力的国家?精灵的问题是它们的边界框是矩形的,如果我定义Box2D顶点并使多边形变得非常混乱。此外,还有很多国家,所以很多平台式解决方案都不适合


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

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

也许更简单的解决办法是使用一个国家的每张图像的不透明性。每个国家都有它自己的图像,你需要重叠边界矩形来排列它们。当鼠标悬停在一个或多个边界框上时,检查鼠标是否位于透明像素上。如果它是透明的,你显然不是在实际的国家上空盘旋。需要考虑的一些事项:

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

通常为精灵制作一个“遮罩”,使其具有非矩形轮廓。这里有很多技巧。谢谢你的回复。我认为它变得凌乱的原因是因为我用坐标等手动定义多边形,但我认为如果我使用您链接的工具可能没问题。当在国内检测到咔嗒声时,你有没有改变纹理的想法?或者我应该简单地将每个国家的不同州存储在一大组纹理中,并在它们之间切换吗?@ParJar有很多想法。如果国家/地区实际上是可点击的,您可以使用Scene2D并从
按钮
图像按钮
扩展“超过”、“按下”和“注册点击的侦听器”功能。否则,只需创建两个状态(如您提到的)听起来不错。如果我将国家作为图像按钮来实现,是否可以将physicseditor中的多边形作为其边界框来检测单击?nvm我已经找到了如何创建一些精确的Box2D实体,使其位于纹理之下,它现在主要是切换纹理