对于我的大学作业,我必须制作一个可联网的 pacman 版本。我想我最好先制作一个 pacman 的本地副本来解决这个问题,然后将此功能扩展为网络游戏。
我不得不说我对 java GUI 开发和在 java 中利用这些特性还比较陌生。
我已经开始关注上面关于 java 中的游戏开发的链接和一个 pacman 游戏的例子。
我决定将迷宫表示为一个 int 数组,其中不同的值意味着不同的事物。然而,当主游戏循环中的绘制方法运行时,我正在用这种方法重新绘制整个迷宫。
for (int i : theGame.getMaze())
{
if (i == 4)
{
g.setColor(mazeWallColour);
g.fillRect(curX, curY, cellSize, cellSize);
curX += 25;
}
else
{
curX += cellSize;
}
index++;
// Move to new row
if (index == 25)
{
index = 0;
curX = 10;
curY += cellSize;
}
}
然而,这为我提供了不到 1fps 的速度。尽管我注意到上面链接的示例在每次调用paint方法时都使用类似的重绘方式,并且我相信在不可见的图像上会这样做(有点像双缓冲[我使用了像第一个链接一样的 BufferStrategy解释]) 重新绘制迷宫的更好方法是什么?
任何与此有关的指针/建议都会很有用。
感谢您的时间。
http://pastebin.com/m25052d5a - 用于主要游戏类。
编辑:我刚刚注意到在尝试查看哪些代码需要这么长时间才能执行之后发生了一些非常奇怪的事情。
在我添加的 paintClear(Graphics g) 方法中
ocean = sprites.getSprite("oceano.gif");
g.setPaint(new TexturePaint(ocean, new Rectangle(0,t,ocean.getWidth(),ocean.getHeight())));
g.fillRect(10, 10,getWidth() - 20,getHeight() - 110);
这使整个事情顺利进行 - 但是当我删除这些行时,整个事情变慢了?是什么原因造成的?