读书人

条形小map玩家位置显示

发布时间: 2012-09-27 11:11:17 作者: rapoo

条形小地图玩家位置显示

此方法有很多局限性,但确实很适用,很多很多地方都需要他,比如说横板过关游戏,小地图是条形框,玩家的位置要按玩家在大地图上的位置的比例来显示在小地图条形框上,再比如经验值,升级所需经验值和现有经验值显示经验值浮标到哪的问题,基于数字庞大的精确运算,而不适用于可以通过口算得出坐标的场合,比如,地图总长1440像素,条形框200像素,你现在的坐标是在地图总长上的430,那么该方法的返回值就是小地图上你应该在的偏差值。

?

说了这么多,其实方法简单的很。

?

?

以地图例子来说,第一个参数就是条形框的宽,第二个参数就是你现在所在大地图上的X坐标(相对大地图X零点的坐标,也可称为世界坐标),第三个参数就是大地图的宽。

private final int getXY(int w, int x, int Exp){return (int)(((long)(x * w) * 1000000) /((long)Exp * 1000000));}

?

?

返回的是偏差值,是小地图上你该出现在相对小地图条形框X零点坐标的点。

public int getX(int xOnBigmap){ return (xOnBigmap * rate)>>14}
你原来是三个乘法一个除法,还是long的,这样一边之后就只用一次乘法,一个移位,而且还不转类型,移位那速度不用说了……而且地图一般的大小,这样算下来的rate根本不会溢出int

嘛,其实不一定14,我觉得再多点都可以……

看了鸟哥的帖子之后才知道这种方法的……public int getX(int xOnBigmap){ return (xOnBigmap * rate)>>14}
你原来是三个乘法一个除法,还是long的,这样一边之后就只用一次乘法,一个移位,而且还不转类型,移位那速度不用说了……而且地图一般的大小,这样算下来的rate根本不会溢出int

嘛,其实不一定14,我觉得再多点都可以……

看了鸟哥的帖子之后才知道这种方法的……

我测试一下,总觉得在精度上,你的这个方法会有偏差,不过,使用位移来代替乘法,确实是可行的,因为我发的那个方法很早以前就写出来了,当时没考虑用位移来代替乘法,感谢puhao7117441提醒!

求高人比较两方法优缺! 4 楼 zovikoo 2010-06-30 其实实现这个主要是解决一个很重要的问题,那就是:
如果地图长度1440,条形框200长,那么,人物的世界坐标X在1440上移动的时候,并不是每移动一像素条形框上的小图标都要移动,拿1440和200举例是因为《监狱兔》项目就是这个坐标,记得人物的世界坐标在地图上每移动8像素条形框上的小图标才移动1像素,当然这些值都可能不准确,因为时间太长了。 5 楼 chenpeilei2003 2010-07-08 贴图看看嘛

读书人网 >移动开发

热点推荐