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

news/2024/11/28 2:47:26/

开发游戏免不了要计算两个坐标之间的距离,计算两点之间的距离我们可以用勾股定理,比如说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


http://www.ppmy.cn/news/535660.html

相关文章

世嘉MD游戏开发【十】:精灵动画,Sprite Animation

能在世嘉MD上显示自己做的精灵动画实在是一件令人兴奋的事啊,今天就来讲一下如何在MD上显示精灵动画。 先准备好一张精灵图片序列,有这么几点要求: 1.单个精灵的像素宽x高不能超过16384,(以tile为单位的话,就是16x16…

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

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

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

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

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

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

世嘉MD游戏开发【十二】:伪3D地面,Pseudo-3D

终于讲到伪3D效果了,这一块比较棘手,我从github上下载的老外写的例子一点点研究,研究了两三天才研究出原理,其实原理很TM简单,主要是那个老外写的代码太烂了,写了很多没用的东西,而且算法上还啰…

世嘉MD游戏开发【二】:Hello World

上一节课已经讲了SGDK环境的配置,这一节课来开发我们的第一个世嘉MD程序:Hello World 编辑器我用的vscode,本文就以vscode为主。 一、新建一个工程,其实不用说的这么正式,意思就是在你喜欢的任意位置新建一个文件夹&…

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

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

神龟对打java_谁知道世嘉游戏忍者神龟对打的出招表!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 忍者神龟之格斗大会 Teenage Mutant Hero Turtles Tournament Fighters (E) KONAMI/93.12.10/机种MD/类型FTG 基本操作-出招-- A 轻斩 B 轻踢 C 挑衅 投技: 近身 → A或B 当血槽减少呈闪灭状态时可使用超必杀 ~~~~~~~…