【发布时间】:2009-01-14 23:14:10
【问题描述】:
为了我的大学作业,我必须制作一个可联网的 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);
这使整个事情顺利进行 - 但是当我删除这些行时,整个事情变慢了?这可能是什么原因造成的?
【问题讨论】:
-
Malachi,发布您的游戏完整代码。我宁愿能够 run 一些东西。将其压缩并放在 filedropper 上
-
正如 Simucal 所提到的,如果不访问整个源代码,就很难调试您的程序。使用上面的代码不会立即出现问题,我建议首先查看的是 getSprite 方法的实现。
标签: java network-programming pacman