Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何最好地在silverlight中创建游戏地图_C#_Silverlight - Fatal编程技术网

C# 如何最好地在silverlight中创建游戏地图

C# 如何最好地在silverlight中创建游戏地图,c#,silverlight,C#,Silverlight,我正在寻找一些关于如何创建游戏的2d布局(步行路径)的想法。 平铺将为32x32像素,以及在平铺上移动的角色 我目前想到了两种方法,但都还没有尝试过 游戏将在大约400x300或512x356的窗口中显示。。没有比游戏地图本身大1000×1000的地方大多少。因此,在大多数情况下,只有地图的一部分是可见的 这是我想到的两个选择 [1]:在开始时创建整个地图(这可能会增加加载时间,但会使地图更容易移动),包括每个对象、玩家、敌人等 [2]:只创建看到的地图,并在地图周围创建一个平铺(不可见),这样

我正在寻找一些关于如何创建游戏的2d布局(步行路径)的想法。 平铺将为32x32像素,以及在平铺上移动的角色

我目前想到了两种方法,但都还没有尝试过

游戏将在大约400x300或512x356的窗口中显示。。没有比游戏地图本身大1000×1000的地方大多少。因此,在大多数情况下,只有地图的一部分是可见的

这是我想到的两个选择

[1]:在开始时创建整个地图(这可能会增加加载时间,但会使地图更容易移动),包括每个对象、玩家、敌人等

[2]:只创建看到的地图,并在地图周围创建一个平铺(不可见),这样我就可以使用故事板使该地图可见,并删除超出边界的行/列,然后再次创建列

也就是说,如果我有一个房间有5x5个瓷砖,我可以装7x7个瓷砖。如果我向右移动,我移动所有的瓦片,并保持球员在屏幕中间。然后我移除最左边的一组瓷砖,并在右边创建一组新的瓷砖,希望在故事板完成移动之前完成

在第二种方法中,我必须考虑的是大于32×32的对象。我怎样才能对这些做出最好的反应。。然而,这是一个我想稍后解决的问题。。现在我更喜欢了解人们的意见和可能更好的方法

如果这个问题不适合stackoverflow,我会表示歉意。

请小心“加载”这个词。加载意味着从磁盘/驱动器中取出数据并将其放入内存。为此,您应该在游戏开始之前立即加载所有当前世界/地图。相信我,当地图运行时,你不会希望自己陷入动态加载的状态

但是您只需要加载地图的定义,不需要在该点创建对象的实例。因此,您可以在玩家行走时从地图定义创建实例。。。但你真的是记忆中的那个约束吗?我可以理解,对于像Minecraft或Terraria这样的游戏,地图上几乎包含数百万块瓷砖。。。但是对于32×32,当加载定义时,可以考虑将它们全部化。
当然,无论采用何种解决方案,您都应该只绘制/计算/碰撞/更新屏幕上可见的分幅。

当然,这是一个很好的解决方案。。向玩家渲染图形的最佳方式是什么。我是应该提前“加载”所有瓷砖,还是应该在每次移动后“加载”瓷砖。。我应该使用画布还是包装纸,我应该使用图片框还是网格?就像我说的,“加载”意味着从磁盘获取数据并将其放入内存。为什么你会在播放器移动时从磁盘上“加载”东西?您想在走动时“创建”瓷砖的实例吗?就像我说的,对于32x32来说,这可能是过度使用了。所以基本上,我应该在游戏开始时从磁盘创建瓷砖并加载图片,然后在画布/图片框/漂浮在我船上的任何东西中显示它们。。。如果我从一张地图转到另一张完整的地图,它不应该有停机时间?它会有停机时间。但您认为在32x32个项目上循环需要多长时间?(1024个项目)如果你有创意,你可以把时间隐藏在一些屏幕效果后面。