`
zovikoo
  • 浏览: 11333 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
最近访客 更多访客>>
社区版块
存档分类
最新评论

条形小地图玩家位置显示

阅读更多

此方法有很多局限性,但确实很适用,很多很多地方都需要他,比如说横板过关游戏,小地图是条形框,玩家的位置要按玩家在大地图上的位置的比例来显示在小地图条形框上,再比如经验值,升级所需经验值和现有经验值显示经验值浮标到哪的问题,基于数字庞大的精确运算,而不适用于可以通过口算得出坐标的场合,比如,地图总长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零点坐标的点。

分享到:
评论
5 楼 chenpeilei2003 2010-07-08  
贴图看看嘛
4 楼 zovikoo 2010-06-30  
其实实现这个主要是解决一个很重要的问题,那就是:
如果地图长度1440,条形框200长,那么,人物的世界坐标X在1440上移动的时候,并不是每移动一像素条形框上的小图标都要移动,拿1440和200举例是因为《监狱兔》项目就是这个坐标,记得人物的世界坐标在地图上每移动8像素条形框上的小图标才移动1像素,当然这些值都可能不准确,因为时间太长了。
3 楼 zovikoo 2010-06-30  
puhao7117441 写道
个人意见哈,这样首先乘法计算比较耗时间,然后int转long,long值的计算是比int慢的……其实你整个大地图的长度和小的显示框的长度是知道的,那么他们的比值也就知道。假设大地图的宽是mapWidth, 小地图的宽式smallWidth,那么你可以先把他们的比值算出来,rate = ((double)smallWidth / (double)mapWidth) * Math.power(2,14),然后最后再把人物的实际位置和哪个rate一乘,然后再用移位运算来除以刚才乘的值,移位(x * rate)>>14 = 实际坐标
public int getX(int xOnBigmap){
    return (xOnBigmap * rate)>>14
}

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

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

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


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

求高人比较两方法优缺!
2 楼 puhao7117441 2010-06-29  
个人意见哈,这样首先乘法计算比较耗时间,然后int转long,long值的计算是比int慢的……其实你整个大地图的长度和小的显示框的长度是知道的,那么他们的比值也就知道。假设大地图的宽是mapWidth, 小地图的宽式smallWidth,那么你可以先把他们的比值算出来,rate = ((double)smallWidth / (double)mapWidth) * Math.power(2,14),然后最后再把人物的实际位置和哪个rate一乘,然后再用移位运算来除以刚才乘的值,移位(x * rate)>>14 = 实际坐标
public int getX(int xOnBigmap){
    return (xOnBigmap * rate)>>14
}

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

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

看了鸟哥的帖子之后才知道这种方法的……
1 楼 amcucn 2010-06-23  
收藏一下,我的游戏当中就会用到这个。

相关推荐

    51单片机Proteus仿真实例 4×4键盘矩阵控制条形LED显示

    51单片机Proteus仿真实例 4×4键盘矩阵控制条形LED显示51单片机Proteus仿真实例 4×4键盘矩阵控制条形LED显示51单片机Proteus仿真实例 4×4键盘矩阵控制条形LED显示51单片机Proteus仿真实例 4×4键盘矩阵控制条形LED...

    c# 自带的报表rdlc显示条形码

    在C#中利用自带的报表RDLC(Report Definition Language Collection)显示条形码是一个常见的需求,尤其是在需要在报告中嵌入商品、库存或其他需要条形码标识的信息时。以下是对如何在C#中使用RDLC生成条形码的详细...

    单片机C语言程序设计4×4键盘矩阵控制条形LED显示(基于8051+Proteus仿真)

    单片机C语言程序设计4×4键盘矩阵控制条形LED显示(基于8051+Proteus仿真)单片机C语言程序设计4×4键盘矩阵控制条形LED显示(基于8051+Proteus仿真)单片机C语言程序设计4×4键盘矩阵控制条形LED显示(基于8051+...

    单片机C语言程序设计 4×4键盘矩阵控制条形LED显示(有源码)

    单片机C语言程序设计 4×4键盘矩阵控制条形LED显示(有源码)单片机C语言程序设计 4×4键盘矩阵控制条形LED显示(有源码)单片机C语言程序设计 4×4键盘矩阵控制条形LED显示(有源码)单片机C语言程序设计 4×4键盘矩阵...

    echarts地图下钻、柱状、条形完美结合

    4. **切换显示**:在地图下钻事件触发后,可以隐藏地图系列,显示柱状图或条形图系列。反之,当用户完成下钻操作,可以恢复原始的显示状态。 5. **数据绑定**:确保地图的区域与柱状图/条形图的数据一一对应,这...

    4*4键盘矩阵控制条形LED显示

    4*4键盘矩阵控制条形LED显示

    无缝地将条形图与地图合并,以显示地理编码的分类变量matlab代码.zip

    4. **定位和调整**:为了在地图上精确放置条形图,你需要计算每个条形的中心位置(基于其对应的经纬度),然后利用MATLAB的图形对象属性进行调整。例如,设置条形的位置、宽度和高度,使其与地图上的地理位置对应。 ...

    4×4键盘矩阵控制条形LED显示_protues矩阵_4×4键盘矩阵控制条形LED显示_

    在电子设计领域,4×4键盘矩阵控制条形LED显示是一种常见的实践项目,它涉及到微控制器接口技术、矩阵键盘的工作原理以及LED显示技术。这里,我们将深入探讨这些知识点。 首先,4×4键盘矩阵是一种经济高效的键盘...

    基于Protues仿真-4×4键盘矩阵控制条形LED显示

    本主题“基于Protues仿真-4×4键盘矩阵控制条形LED显示”将探讨如何使用Protues软件,通过4×4键盘矩阵来控制条形LED显示器,实现互动式的灯光效果。 首先,4×4键盘矩阵是一种常见的输入设备,由4行4列共16个按键...

    C#条形码扫描

    4. Windows Forms或WPF:对于桌面应用,开发者可能使用了Windows Forms或WPF(Windows Presentation Foundation)来创建用户界面,用于显示扫描的图像,接收用户输入,以及显示扫描结果。 5. 设备交互:为了实际...

    条形码识别_C++_条形码识别_条形码_

    3. 条形码定位:定位条形码在图像中的位置,可以使用模板匹配、霍夫变换或机器学习算法。OpenCV中的`findContours`函数可用于检测图像中的连续区域,帮助找到潜在的条形码区域。 4. 条形码解码:一旦找到条形码,就...

    div控制条形图下面指针的指定位置

    "div控制条形图下面指针的指定位置"这个话题涉及到如何利用HTML的div元素以及JavaScript技术来实现一个条形图,并精确控制其中的指针在特定位置的显示。这通常用于制作数据仪表盘、数据分析界面等,帮助用户直观地...

    最新单片机仿真 4×4键盘矩阵控制条形LED显示

    最新单片机仿真 4×4键盘矩阵控制条形LED显示最新单片机仿真 4×4键盘矩阵控制条形LED显示最新单片机仿真 4×4键盘矩阵控制条形LED显示最新单片机仿真 4×4键盘矩阵控制条形LED显示最新单片机仿真 4×4键盘矩阵控制...

    OPENCV条形码定位与识别

    条形码定位是找到条形码在图像中的精确位置,而识别则是解读条形码所携带的信息。 条形码定位通常涉及以下步骤: 1. 图像预处理:首先,对输入的图像进行预处理,如灰度化、二值化、平滑滤波等,以提高后续步骤的...

    Halcon学习之条形码识别

    find_bar_code 算子可以返回条形码的位置、方向、类型等信息。 三、使用 Halcon 做一个 Demo 接下来,我们使用 Halcon 创建一个简单的条形码识别 Demo。 首先,我们需要准备一张包含条形码的图像,然后使用 ...

    Code128条形码的读取和显示

    使用 dev_display 函数显示图像和条形码区域。 使用 disp_message 和 disp_continue_message 函数在窗口中显示消息和继续消息。 循环控制: 如果还有更多的图像需要处理,显示继续消息并暂停,直到用户决定继续。 ...

    golang 显示条形码 web svg

    golang搭建的http服务,用于直接显示svg条形码。 使用: go run example/main.go http://127.0.0.1:1323/C128/ABC123/2/80

    vb条形码控件程序_vb条形码控件程序_

    2. **设计界面**:在VB的Form设计器中,从工具箱拖拽条形码控件到窗体上,调整其大小和位置以适应应用需求。 3. **配置条形码属性**:通过属性窗口设置条形码的相关属性。例如,设置`Type`属性为Code 128,`Value`...

    java条形码识别

    Java条形码识别技术主要涉及的是对一维和二维条形码进行解码的过程,它在物流、零售、仓储管理等领域广泛应用。在这个场景中,我们关注的焦点是Google提供的ZXing(Zebra Crossing)库,这是一个开源项目,专门用于...

    C#开发生成条形码

    3. 显示条形码:将生成的Bitmap对象设置为窗体上的PictureBox控件的Image属性,从而在界面上显示条形码。 4. 打印条形码:为“Print”按钮添加Click事件,调用PrintDocument类的Print方法,先将Bitmap对象转换为...

Global site tag (gtag.js) - Google Analytics