好的,所以我有一个刚刚开始的游戏,我有点坚持顺利滚动。我已完成基本的滚动部分,但我的背景(网格)仅以50的间隔移动。
for (int x = (getPlayerX() / getTileSize()) - 6; x < (getPlayerX() / getTileSize()) + 9; x++)
{
for (int y = (getPlayerY() / getTileSize()) - 5; y < (getPlayerY() / getTileSize()) + 8; y++)
{
int xPos = ((x - (getPlayerX() / tileSize)) + (getScreenX() / tileSize) - 1) * tileSize;
int yPos = ((y - (getPlayerY() / tileSize)) + (getScreenY() / tileSize) - 1) * tileSize;
if (x > 0 && x < mapX && y > 0 && y < mapY)
{
if (getTiles()[x][y].tileID == 0)
{
g.drawRect(xPos, yPos, tileSize, tileSize);
}
if (getTiles()[x][y].tileID == 1)
{
g.fillRect(xPos, yPos, tileSize + 1, tileSize + 1);
}
}
}
}
对于for循环中的减法和添加感到抱歉,我已将它们设置为从1显示为1而不是0到任何 - 1。
所以基本上我想重新绘制每个移动像素的网格,而不是每50个。我不想迭代屏幕上的每个像素
答案 0 :(得分:0)
好的,首先你会对背景和网格感到困惑。网格是一种检查冲突的方法,也是一种永不移动的空间分区算法。背景是在每个级别的游戏中的每个实体后面绘制的图像。
根据我的理解,你要做的是让关卡滚动。为此,我们创建了一个名为View
的类,也称为Camera
,它通过使由播放器控制的实体居中来绘制背景和可见实体。
为了使实体居中并绘制地图,我使用这些类。希望你明白我是用C#编写的。
这是Grid的实施。我有相同类here的java版本,但我没有在java中实现Grid类。
您可以阅读我的教程Using Grids For Collisions
,了解有关其工作原理的详细信息。希望它有所帮助。