2

我目前正在研究基于网格的游戏地图原型。每个“图块”为 24 像素 x 24 像素,脚本在屏幕上绘制出 31 个基于 x 的图块和 21 个基于 y 的图块,总共 651 个图块。

我遇到的问题是我的脚本运行方式,它为每次页面刷新时绘制的每个图块进行数据库调用,这意味着它正在进行 651 次数据库调用以检查图块是什么以及图块的坐标. 对我来说,这似乎效率低下。

x 和 y 坐标存储在会话变量中。当用户单击地图下方的方向按钮之一时,它会相应地偏移适当的坐标并重新绘制地图。

如果我要根据我使用的逻辑创建一个游戏,并玩数字游戏,假设我有 100 名玩家在任何时候玩这个游戏并且他们都在浏览地图,我会同时进行 65,100 个数据库调用。这对系统资源不利。

在 PHP/MySQL 编程方面,我不是菜鸟,因为我创建并启动了一些不同的基于浏览器的游戏,但是,这是我第一次尝试生成地图并在地图上导航。

瓦片地图可以在这里查看:

http://fordserver.com/gamemap/

可以在这里找到实际的代码:

http://fordserver.com/gamemap/index.txt

任何人都可以推荐一个让这个运行更顺利的好方法吗?您会注意到,当使用其中一个方向按钮时,游戏可能需要相当长的时间才能生成实际地图,尤其是当您只是第一次访问它时。

我试图想出不同的方式来使用数组和其他所有东西,但实际上,游戏需要检查数据库中每个单独的图块,因为我计划合并功能,以便它显示特定用户当前的位置或建筑物, ETC。

我很感激我能得到的任何帮助。

瑞奇

4

1 回答 1

2

我曾经实现了一个简单的游戏,它也使用了笛卡尔坐标系,并且在数据库中为每个点提供了多行数据。我只是通过按照以下方式拨打一个电话来解决它:

$xCord=34;
$xCord=16;
// Example data


select
    ID,
    tileImage,
    xcord,
    ycord,
    otherStuff
from
    mainLocationTable
where
    abs(xCord-$xCord)<15
    and abs(yCord-$yCord)<15

这将为您在玩家位置本身的两侧提供 15 个图块。当然,您可以自定义它以满足您的需求,但原理是相同的。如果您将 x,y 笛卡尔坐标存储在数据库中,那么很容易在单个查询中提取所需的所有数据并从那里开始。

由于您还将玩家位置的数据存储在会话中,您可以简单地让代码本身进一步检查玩家所在的瓷砖的详细信息 - 或使用第二次调用来获取更详细的信息一个位置。

于 2013-10-10T02:36:19.320 回答