2017-07-25 24 views
0

我正在编程一个基于六角形网格的游戏,您在其中点击相邻的玩家贴图时,以及玩家移动地图/网格时向相反方向移动(在主jframe内的jpanel上使用setLocation(),这样相对于屏幕来说,玩家仍然居中。我传入我的GameBoard类的构造函数中,最大数量的六边形高度,我希望网格位于中间和单个六边形的半径,并且它工作得很好(在某种程度上)。六角形格栅在生成流出框架时被切断

当我传入足够多的六角形时,一些网格会在jframe外部产生(与普通的1080x1920大小的显示器一样高和宽)。当发生这种情况时,我仍然可以让玩家四处移动并打开菜单并更改玩家皮肤,但是当在网格上向北移动时(当网格的顶部是在jframe外部生成的)时,网格会被切断,在整个六角形重新粉刷之前结束。

我想知道是否有解决这个问题,也许我只是简单地被忽视的方式。我的第一个想法是每次玩家移动并且根本不使用setLocation()方法时,用新的x,y坐标删除并重新生成网格,但我觉得这样做效率很低,而且更多的是暴力解决方案(last采取)。我只是觉得必须有一个更优雅或有效的方式。即使在一般方向稍有微调,也将不胜感激。我已经玩弄了setSize(),setMinimumSize()和setPreferredSize()方法来尝试使jpanel或jframe的内容窗格变大。

图片的帮助:

You can see that I can obviously highlight those hexagons and even move onto them and move back off as illustrated by the player's path being shown.

+0

这个问题可能更适合于https://gamedev.stackexchange.com/顺便说一下 –

回答

0

该解决方案真的取决于您的具体要求。你确实需要区分可见窗口和虚拟画布。你可以想象你的视图框架是一个比你所看到的世界更大的窗口。

如果你的地图的大小从一开始就知道,建立一个缓冲/帧,可以根据适合它。

如果大小事先不知道或者是无限的,那么你就需要程序上一代的瓷砖。说瓷砖时,我不是指六角形瓷砖,而是指您将它们涂抹在上面的缓冲区/框架。一旦框架边框被击中,您需要在该边上附加一个新框架。

+0

在我的情况下,我知道尺寸将基于传入的六角形和半径的数量。 – JoshuaK98

+0

那么那么那么你只需要计算所需的缓冲区/窗格/框架/画布(不管你想要的名称)大小并使用它。使用屏幕尺寸只适用于“窗口”,而不适用于“世界”。 –