开发游戏免不了要计算两个坐标之间的距离,计算两点之间的距离我们可以用勾股定理,比如说A代表直角三角形的一条直角边,B代表另一条直角边,C代表斜边,得到公式A²+B²=C²。C也就是两点之间的距离,根据公式可计算出C=根号(A²+B²);

以上就是常用的方法之一,但是世嘉MD机能有限,又是平方又是开方的,性能开销太大了,现在我给大家说一个简单的方法,只需要几句代码就能计算出两点之间的距离了,而且计算速度比上述方法快很多倍,虽然这个方法得到的结果不是很精确,但两个点水平或者垂直的时候是没有误差的,不怎么影响计算。

代码如下:

//u32是SGDK里定义的一个整数类型,相当于unsigned long
//Vect2D_s32是SGDK里定义的一个向量结构体,包含x和y两个值,而且x和y都是s32类型,相当于long类型u32 get_approx_distance(Vect2D_s32 _p1, Vect2D_s32 _p2)
{// x的距离u32 dx = abs(_p1.x - _p2.x);// y的距离u32 dy = abs(_p1.y - _p2.y);//返回:最大值 + ( 最小值 >> 2 )return max(dx, dy) + (min(dx, dy) >> 2);
}

至于这个原理是啥我也不懂,我也是从国外网站找到的,知道原理的大神可以指点一下,这个方法简单明了,记起来也很容易。

这是一个讲解类似原理的文档:https://www.flipcode.com/archives/Fast_Approximate_Distance_Functions.shtml

世嘉MD游戏开发进阶篇【一】:两点之间的距离相关推荐

  1. 世嘉MD游戏开发进阶篇【三】:向量归一化的实现及应用

    向量归一化是非常有用的,游戏中经常能用到,就说大家都见过的,FC魂斗罗的敌人发射子弹就能用到了,敌人向玩家发射子弹首先要获取到向量,这个向量不能直接作为方向去用,必须要经过归一化处理才行,经过归一化处 ...

  2. 世嘉MD游戏开发进阶篇【四】:向量点乘的计算

    向量点乘有时候是很有用的,在Unity等游戏引擎里向量点乘都是自带函数的,直接调用就可以,但是在世嘉MD这种简陋的平台,什么运算都得自己去实现,向量点乘也不例外. 直接看公式: //如果是三维向量的话 ...

  3. 世嘉MD游戏开发【四】:输入控制(下)

    上一节讲了世嘉MD两种输入控制当中的一种,也是比较容易理解的一种,这一节讲一下剩下的这种控制方式:回调函数式. 建好文件夹,用vscode打开,新建main.c,依然是直觉一般的写下如下代码: #in ...

  4. 世嘉MD游戏开发【七】:绘制图片,drawImage

    这一期讲绘制图片. 上一期讲的是绘制tile,还要用那个不怎么好用的工具导出数组数据,很繁琐,这次就不用那个蹩脚的工具了,随便一个图片用photoshop处理一下就可以了,对于图片的要求有这么几点: ...

  5. 世嘉MD游戏开发【五】:显示Tile图块

    显示Tile图块,首先要有tile图块,这就要用到一个小工具了,叫Sega Genesis Tile Designer,软件界面如下: 看起来很复杂,其实自己亲自操作一下几分钟就能搞懂了,都是些很基础 ...

  6. 世嘉MD游戏开发【六】:矩形填充Tile图块

    上节课讲了如何显示一个Tile图块,这节课我来讲一下Tile图块的矩形填充. 打开Sega Genesis Tile Designer,设置tile宽度为4tiles,高度也是4tiles: 随便绘制 ...

  7. 世嘉MD游戏开发【三】:输入控制(上)

    这一节讲一下SGDK中的输入控制,SGDK提供了两种输入控制方式,一种是用回调函数接收输入信息,很自然的另一种就没有用回调函数了(貌似废话-.-!),成上下两节,这一节讲不用回调函数来接收输入信息. ...

  8. 世嘉MD游戏开发【九】:Sprite精灵

    终于讲到Sprite精灵了,我自己也很希望快点讲精灵,但是欲速则不达,自己要是还没研究透彻这个知识点就去讲下一个,感觉文章肯定是写不好的. 我用下图来做演示,SFC幽游白书-魔界最强列传里的雷禅: 怎 ...

  9. 世嘉MD游戏开发【八】:淡入和淡出

    淡入淡出,很好理解,淡入就是画面由黑过渡到彩色,淡出就是画面由彩色过渡到黑色,其实也不一定必须是黑色,看你自己需求了. 注:淡入淡出的功能可以完成非常多的游戏玩法设计哦~打开脑洞就有惊喜~ 效果图如下 ...

  10. 【游戏开发进阶】教你Unity通过Jenkins实现自动化打包,打包这种事情就交给策划了(保姆级教程 | 命令行打包 | 自动构建)

    文章目录 一.前言 二.Jenkins简介 三.Jenkins的下载与安装 1.JDK下载与安装 2.Jenkins下载 3.Jenkins安装 4.Jenkins初始化 四.Jenkins的基本操作 ...

最新文章

  1. 2021-03-18TOMCAT的非双亲委派机制众家辨解
  2. 阿里、腾讯基本薪资曝光,资深算法工程师24万美元,高级研究员26万美元
  3. Oulipo(kmp算法)
  4. 中国程序员容易发音错误的单词
  5. SAP在中国的发展和现状(培训公司欺诈推广)
  6. ubuntu 更换系统软件源 和 pip源
  7. python图形化界面开发工具_图形用户界面(GUI)常见问题
  8. Java数据库篇8——索引、视图、存储过程、触发器
  9. oracle 内存分配,Oracle调优修改10g,11g内存分配
  10. 神经网络之感知器算法简单介绍和MATLAB简单实现
  11. 在CentOS7上安装和使用ZooKeeper最新版本(V3.4.12)
  12. 帆软JS实现局部刷新CPT
  13. 图说区块链:神一样的金融科技与未来社会
  14. 推荐一些经典的学习书籍
  15. ChatGPT 爆火,社交应用如何 Get 新技能
  16. Spring Cache缓存技术,Cacheable、CachePut、CacheEvict、Caching、CacheConfig注解的使用
  17. 元宇宙如何改写人类社会生活
  18. 2018华北五省计算机应用大赛,“远洋航空杯”2019年华北五省(市、自治区) 及港澳台大学生计算机应用大赛隆重举行...
  19. python3.7反编译生成的.exe
  20. rhel6 PXE网络装机和Kickstart无人值守安

热门文章

  1. Unity Hub和Unity安装教程
  2. 遗传算法GA优化BPNN
  3. 数据库实验一实验报告
  4. 解决MATLAB不能设置为.m .slx .mat等文件默认打开方式
  5. volte的sip信令流程_VOLTESIP代码详解及SIP流程图解
  6. CAD中 OLE不能旋转_AutoCAD中光栅图像和OLE图像,究竟如何选择
  7. 田洪川(天轰穿)老师谈.NET学习:将励志和教学结合起来
  8. Nature杂志总编辑:如何培养一个有价值的研究者
  9. 全屏模式fullscreen
  10. 关于Autorelease和RunLoop