当生成从框架中移出时,六边形网格会被切断

时间:2017-07-25 04:17:20

标签: java

我正在编写一个基于十六进制网格的游戏,你可以点击播放器的相邻图块,当玩家移动时,地图/网格向相反方向移动(使用主jframe内jpanel上的setLocation())相对于屏幕,播放器仍然居中。我传入我的GameBoard类构造函数中的六边形高的最大数量我想要网格在中间和各个六边形的半径,它完全正常(在一定程度上)。

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

我想知道是否有办法解决这个问题,也许我只是忽略了。我的第一个想法是每次玩家移动时删除然后用新的x,y坐标重新生成网格,而根本不使用setLocation()方法,但我觉得这样效率非常低,而且更多的是暴力解决方案(最后采取)。我觉得必须有一种更优雅或更有效的方式。即使是在一般方向上最轻微的推动也会受到高度赞赏。我肯定使用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.

1 个答案:

答案 0 :(得分:0)

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

如果从一开始就知道地图的大小,请根据该地图创建一个适合它的缓冲区/框架。

如果事先不知道尺寸或者它是无限的,那么你需要程序生成瓷砖。说瓷砖时,我不是指六角形瓷砖,而是你在上面绘制的缓冲区/框架。一旦框架的边框被击中,你需要在那边附加一个新边框。