彻底理解游戏开发中的绝对位置和相对位置

简介: 在游戏的世界中存在着两种位置,一种叫做绝对位置,一种叫做相对位置。在不同的游戏开发工具中这两种位置分别有着不同的别名,绝对位置有时也叫世界位置,或者 world position,而相对位置也叫本地位置(局部位置),或者 local position。

在游戏的世界中存在着两种位置,一种叫做绝对位置,一种叫做相对位置。在不同的游戏开发工具中这两种位置分别有着不同的别名,绝对位置有时也叫世界位置,或者 world position,而相对位置也叫本地位置(局部位置),或者 local position。


理解这两种位置的不同对于游戏开发者来讲是很重要的,尤其是在处理与位置相关的问题时。


今天,我们就以一个示例来彻底的理解这两种位置的区别。



如图,是小游戏制作工具中的场景编辑区,在场景编辑区的两侧包含标尺,从标尺可以看出游戏屏幕的中点就是整个游戏世界坐标系的起点(不同的游戏开发工具起点可能不同,例如 CocosCreator 中的起点就是游戏屏幕的左下角)。通常我们所说的一个物体的位置,都是指的物体在游戏世界坐标系中的位置。例如当前的红色的小球的位置坐标为 (100, 100),指的就是红色小球在世界坐标系中位置。


接下来,我们做个小实验,下方有两个小方块,一个蓝色一个绿色的,我们会将蓝色的方块位置设置在红球的绝对位置,然后将绿色的方块的位置设置在红球的相对位置。看一下结果会怎么样。



蓝色方块的积木。


红色方块的积木。


运行一下看看结果。


蓝色方块和绿色方块都被设置到了相同的位置上,可见,此时不论是我们设置绝对位置还是相对位置,结果都一样。



接下来我们做一些调整。



如图,我又增加添加了一个绿色的小球,并且将这两个小球打包到了一个容器中。


修改一下蓝色和绿色方块的积木,这一次分别将它们设置到绿色的小球的绝对位置和相对位置上。


蓝色方块积木。


绿色方块积木。


再次运行一下看看结果。



这下出问题了,蓝色的方块(设置为小球的绝对位置)正确的设置在了小球的位置,但是绿色的方块(设置为小球的相对位置)却没有被设置到小球的位置。


这是为什么呢?为什么在第一个例子中,我们设置的绝对位置和相对位置都相同,但是在第二个例子中这两个位置却发生了差异呢?


这是因为在第二个例子中我们将球放进了容器中,这导致了计算相对位置的坐标系发生了了变化。



如图,绿球的相对位置变为了以容器中心为原点的坐标系中的位置。



其实可以这样理解,绝对位置就是物体在世界坐标系中的位置,而相对位置就是物体在本地坐标系中的位置。世界坐标系在游戏世界中是恒定不变的,但是本地坐标系是可能随时变化的。


所以第二个例子中的绿色的方块之所以位置会出现在那里,是因为我们将绿色方块在世界坐标中的位置设置成了绿球在本地坐标中的位置。


对于游戏开发新手来讲很容易搞混这两种位置的区别,因为当只有一个物体时,这个物体的相对位置和绝对位置是一样的,所以这两种位置经常会被混用,也不会出现问题。但是当需要处理容器中的物体位置时,就要格外注意区分这两者的区别了。一旦用错,游戏中的物体位置就会出现问题。











相关文章
|
2月前
|
C语言
C语言获取鼠标位置并设置鼠标位置
C语言获取鼠标位置并设置鼠标位置
|
2月前
如何在屏幕的任意位置拖拽控制图片的移动?
如何在屏幕的任意位置拖拽控制图片的移动?
51 1
|
2月前
|
算法 小程序 API
uniapp显示当前位置与所传入位置的距离
uniapp显示当前位置与所传入位置的距离
176 0
|
8月前
《QT从基础到进阶·十七》QCursor鼠标的不同位置坐标获取
《QT从基础到进阶·十七》QCursor鼠标的不同位置坐标获取
94 0
|
JavaScript 前端开发
js 各种位置获取全解(包括元素属性、鼠标位置、滚动位置)
js 各种位置获取全解(包括元素属性、鼠标位置、滚动位置)
js 各种位置获取全解(包括元素属性、鼠标位置、滚动位置)
|
小程序 开发工具 开发者
理解游戏开发中的绝对位置和相对位置
本文主要内容带你彻底理解游戏开发中的绝对位置和相对位置的区别。 如果你没有任何的游戏开发经验,欢迎观看我的“人人都能做游戏”系列视频教程,它会手把手的教你做出自己的第一个小游戏。 开始之前,推荐一下我的视频号,每天分享一点儿与做游戏有关的有用有趣的内容,欢迎大家关注一下。本文的内容主要也是对这期视频内容的应用和解释。
90 0
|
开发工具 开发者
在屏幕的任意位置拖拽,控制精灵移动
在屏幕的任意位置按住拖拽,然后控制屏幕中指定的精灵移动,这个前几天@stack发过一个示例,刚好最近又有几位同学来问,说是看不懂其中的逻辑。索性就在这里详细的讲一下,原理很简单,理解透了原理,其中的积木逻辑也就很容易理解了。
86 0
|
JavaScript API 容器
彻底弄懂元素样式、位置、大小相关计算
在我们日常开发中偶尔会碰到获取元素样式、设置某元素样式、计算元素位置、计算滚动距离等需求。但是js中关于元素位置、样式、大小的api种类繁多,稍不留神就会搞不清楚。今天笔者就带你彻底弄清楚,让你在这类问题上不再迷茫。
185 0
|
iOS开发
iOS开发 - 渐变导航条升级版(判断滚动的方向和改变方向时的位置)
iOS开发 - 渐变导航条升级版(判断滚动的方向和改变方向时的位置)
125 0
iOS开发 - 渐变导航条升级版(判断滚动的方向和改变方向时的位置)
|
前端开发 容器
每日一题:如何判断一个元素是否在可视区域中?
每日一题:如何判断一个元素是否在可视区域中?
335 0
每日一题:如何判断一个元素是否在可视区域中?