Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.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
Android 创建';标高/地图';基于画布的游戏?_Android - Fatal编程技术网

Android 创建';标高/地图';基于画布的游戏?

Android 创建';标高/地图';基于画布的游戏?,android,Android,我目前正在开发一款突破式游戏,但到目前为止,我只使用以下方法硬编码了一个关卡: for (int i = 0; i < 6; i++) { for (int j = 0; j < 7; j++) { int y_coordinate = (i * (blockHeight + spacing)) + topOffset; int x_coordinate = j * (blockWidth + s

我目前正在开发一款突破式游戏,但到目前为止,我只使用以下方法硬编码了一个关卡:

for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 7; j++) {
                int y_coordinate = (i * (blockHeight + spacing)) + topOffset;
                int x_coordinate = j * (blockWidth + spacing);
for(int i=0;i<6;i++){
对于(int j=0;j<7;j++){
int y_坐标=(i*(块高+间距))+地形偏移;
int x_坐标=j*(块宽度+间距);
因此,基本上是在屏幕宽度上放置7个块,然后向下放置6层,形成一个“块的正方形”。然而,这对用户来说远不是有趣或吸引人的,我希望能够实现一个。实现某种级别的升级,这应该通过外部文件来完成吗?我该如何确保这些项目是正确的按照屏幕大小/密度的正确坐标放置在屏幕上,第二,我的主要问题是,如何使用块(即面)制作某些形状,而不为每个屏幕硬编码单个单词


有点像一个问题只有两种表达方式,真的,抱歉,如果这太模糊了?

如果你只是想让级别不同,那么你可以随机生成它们。对于每个区块位置,有一个随机的机会,那里会有一个区块。永远不要两次(或多或少)相同的级别。如果你想要特定的方块图案,比如一张脸,那么你必须想出某种方法将某个关卡的方块布局存储在一个文件中,然后当关卡开始时,游戏将加载当前关卡的文件,读取方块位置并按正确的排列创建它们。除非你喜欢用数学公式来描述你的水平形状,并用它们按程序生成它们

[编辑] 至于坐标问题,你说得对,不同的设备有不同的屏幕分辨率、像素密度等。然而,这并不一定会对你的游戏产生太大的影响

解决这个问题的一个常见方法是有两个坐标集:“世界”坐标表示对象在游戏世界中的位置,“屏幕”坐标表示对象被绘制的位置。所有物理和游戏逻辑代码都应该使用世界坐标,可以是您喜欢的任何比例(我建议选择一个大于游戏将显示的最大屏幕像素尺寸的尺寸)。我前面提到的关卡文件当然也应该是世界坐标。你对屏幕坐标感兴趣的唯一时间是当你在屏幕上绘制一些东西时。在这一点上,你有一个小功能,可以将一个坐标集映射到另一个坐标集。通常它只是一个简单的比例因子。因此,当你的游戏启动时,它会问它是手机或平板电脑的屏幕分辨率,计算出这个特定实例的比例因子,并将其存储,然后你只需在绘图时查找它,并使用它进行转换。例如,如果你的游戏使用的坐标集是10000点,而你的游戏在76点的屏幕上运行8像素宽,游戏将计算比例因子为10000/768=13.021ish。然后每当你画球时,你就知道它的屏幕x坐标是它的实际x坐标除以13.021ish


这不仅使您的游戏独立于屏幕大小,还意味着您可以在内部使用更精确的位置,允许更精确的行为(碰撞检测等)。只要您的内部“世界”坐标集大于屏幕上的像素数,但不会大到需要大量内存(如果必须存储每个位置的数据)或处理能力(如果要在每个循环的多个位置上进行连续碰撞检测)那么它就可以正常工作了。对于一款Android游戏,考虑到一般Android设备的功能和屏幕的类型,我认为你应该对“世界”很满意协调一组两到三千个点。然后,你唯一要决定的是当比例不匹配时该怎么做-例如,你的游戏有一个边长为4:3的网格,并且它在一个16:9屏幕的手机上玩。你可以剪掉边缘(记住在那里加一个障碍物,这样球就不会离开屏幕)或者只是扭曲它以匹配(这在某些情况下不起作用,但在突破式游戏中可能不明显)。也许两种方法都试一下,看看你最喜欢哪一种。

好吧,听起来不错,但是,对于像脸这样的东西,我给的用于制作脸的块的字词只在我测试的设备上有效?因为屏幕大小不同?啊,现在我明白你问题的另一半的意思了。你说得对,屏幕字词s可能会从一个设备切换到另一个设备。一条评论不允许我有足够的字符来完整回答这个问题,所以我将把它编辑到我的答案中。绝对精彩的答案谢谢你,很可能是我收到的最有帮助和最彻底的答案,我很乐意在某个时候为游戏开发开动脑筋,我一直专注于工业y和实际应用