首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
PowerPC
» HTML5 2D 游戏开发 碰撞检测和 sprite 动画(1)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
HTML5 2D 游戏开发 碰撞检测和 sprite 动画(1)
发短消息
加为好友
look_w
当前离线
UID
1066743
帖子
8283
精华
0
积分
4142
阅读权限
90
在线时间
233 小时
注册时间
2017-6-23
最后登录
2019-5-18
论坛元老
UID
1066743
1
#
打印
字体大小:
t
T
look_w
发表于 2018-10-19 18:51
|
只看该作者
HTML5 2D 游戏开发 碰撞检测和 sprite 动画(1)
碰撞检测和 sprite 动画是所有视频游戏的主要成分。Snail Bait(本
系列文章
中构建的游戏)也不例外。图 1 显示了 Snail Bait 的跑步小人与左上角的蜜蜂碰撞后发生爆炸。
图 1. 碰撞检测的实际应用
在本文中,学习如何:
检测碰撞
将 HTML5 Canvas 上下文用于碰撞检测
将碰撞检测实现为 sprite 行为
处理碰撞
实现 sprite 动画,比如爆炸
碰撞检测过程碰撞检测是一个 4 步过程,第一步是实际检测碰撞:
在游戏的 sprite 上进行迭代
排除不适合碰撞检测的 sprite
检测候选 sprite 之间的碰撞
处理碰撞
碰撞检测可能需要很高的计算量,所以,避免对不可能碰撞的 sprite 进行检测非常重要。例如,在 sprite 爆炸时,Snail Bait 的跑步小人会穿过其他 sprite。因为检查一个 sprite 是否在爆炸比执行碰撞检测所需的时间更少,Snail Bait 从碰撞检测中排除了爆炸的 sprite。
我们首先将概述一下碰撞检测技术。
碰撞检测技术可通过多种方式检测 sprite 之间的碰撞。可采用的三种流行技术(按先进程度和复杂度递增顺序排列)是:
边界区域(在 3D 游戏中称为包围体)
光线投射
分离轴定理 (Separating Axis Theorem)
使用边界区域的碰撞检测,检测圆圈或多边形的交点。在 图 2 中的示例中,小圆圈是表示一个 sprite(一个小球)的边界区域,大圆圈是一个桶的 sprite 的边界区域,桶比球大。当两个圆形边界区域相交时,球就会掉落到桶中。
图 2. 边界区域:圆圈之间的碰撞
检测两个圆圈的碰撞是所有碰撞检测技术中最简单的。如果两个圆圈中心之间距离小于圆圈的半径之和,就会相交,sprite 就会爆炸。
边界区域碰撞检测很简单,但当边界区域太小或移动得太快时,检测可能失败。在这两种情况下,sprite 可在单个动画帧中彼此穿过,进而避免检测。
对于小型、快速移动的 sprite,更加可靠的一种技术是
光线投射
,如 图 3 所示。光线投射检测两个 sprite 的速度向量的焦点。在 图 3 中的 5 个帧中,球的速度向量是以蓝色绘制的对角线,桶的速度向量是红色的水平线(桶水平移动)。在这些向量的交点位于桶顶部的开口内,并且球在开口下方时,球就会落入桶中,如 图 3 中最右边的屏幕截图中所示。
图 3. 光线投射
先验或后验碰撞检测可在碰撞发生之前(
先验
)或之后(
后验
)它们。如果在碰撞发生之前进行检测,必须预测 sprite 未来将位于何处。如果在碰撞发生之后检测,通常需要将已碰撞的 sprite 分开。这两种方法孰优孰劣并不明显。
光线投射非常适合以下环境中的简单形状(比如 中球落在桶中),其中给出了两个形状的速度向量的焦点,很容易确定它们是否已经发生碰撞。
对于更复杂的场景,比如任意大小和形状的多边形之间的碰撞,分离轴定理是最可靠的(和最复杂的)碰撞检测技术之一。分离轴定理是将光线从两个不同的角度照射到两个多边形上的数学描述,如 图 4 中所示。如果多边形背后的墙上的影子露出空隙,那么多边形没有发生碰撞。
图 4. 分离轴定理
本文不会进一步介绍光线投射或分离轴定理。您可以在
Core HTML5 Canvas
(Prentice Hall,2012 年)中查阅每种方法的深入讨论。(请参阅 ,获取相关链接。)
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议