游戏开发基础:判断碰撞(转摘)
本文转摘自Silvery Night的Silverlight C# 游戏开发:Flyer05与什么什么进行搏斗
在游戏开发中,对于碰撞的检测有很多,3D一般用射线判定法(Vector),而2D游戏就不需要那么复杂,虽然使用向量能作出最准确的判定,但是在一个平面中有更加简便的解决方案,当然,这取决于开发者是否严格要求最准确的碰撞判定。
我简单介绍两种2D游戏中最准确的判定方法:射线判定和色值判定
第一,射线判定来自于一个数学判断一个点是否在任意一个封闭形状内的方法:一个点向任意一个方向发出射线如果这条线经过线的数量是奇数,那么这个点就在这个形状内。
很显然这种方法不但复杂还很麻烦,需要计算经过线的数量还要对很多个点进行判断,我相信大多数人都不会对这个方法感兴趣。
第二,色值判定,这个原理通过对比两张图像的色值看看是否有重合点判断是否碰撞,使用数组保存所有的色值,然后进行“与”运算,如果这个数组中出现了“true”,那么就可以判断是有重合点,这个判定方法非常准确,但是准确的代价是效率的降低,当游戏中有n个图片对象,进行的对比判定将是一个n的几何数字,进行如此之海量的判定,玩家的机器和不会买单。
上面介绍的是两种最准确的方法,但是很显然在实现上还是在效率上都不是我们所期望的解决方案,所以,伟大的游戏开发者先驱们在更加伟大的数学面前,找出了更为简单及更为有效率的方案——圆形判定和矩形判定,具体请参看图片。
圆形判定方法来自一个经典的数学导论,两个圆的中心点的距离如果小于两个圆的半径之和,那么它们两个必然重合,具体做法也是很简单,首先求出两个点之间的向量,然后求出长度即可,这方面没学好的朋友可以研究一下勾股定理,中国人早就明白如何取得弦的长度。
矩形判定更加容易,只需要对四个点进行逐次判断,取得两个矩形是否重合。
为什么游戏开发者比较普遍用后面的两种法,因为第一在游戏中对于碰撞的检测并非那么非常严格,而是达到目的即可,第二游戏中也不太可能设计非常复杂的奇怪形状,第三使用图形进行判断(注意是图形而不是图像)较为好控制,而且效率也高。
以上属于转摘。
下面是我自己做的一个判断两个矩形是否相交的程序,直接贴代码
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes; namespace SilverlightApplication5{public partial class MainPage : UserControl {public MainPage() { InitializeComponent();this.Loaded += new RoutedEventHandler(MainPage_Loaded); } void MainPage_Loaded(object sender, RoutedEventArgs e) { Rect rect1 = new Rect(new Point(0, 0), new Point(3, 3)); Rect rect2 = new Rect(new Point(4, 4), new Point(10, 10));bool isBool = IsCross(rect1, rect2); }//判断两个矩形是否相交 private bool IsCross(Rect rect1,Rect rect2) {bool isCross = false;//查找当前 Rect 所表示的矩形和指定 Rect 所表示的矩形的交集,并将结果存储为当前 Rect。//如果不存在任何交集,则当前 Rect 将变为 Rect.Empty。 rect1.Intersect(rect2);if (rect1.IsEmpty) { isCross = false; }else { isCross = true; }return isCross; } }}
转载于:https://www.cnblogs.com/Joetao/articles/2368442.html
游戏开发基础:判断碰撞(转摘)相关推荐
- 《游戏开发基础》课程论文丨基于Unity与Bolt的抗美援朝主题3D游戏设计
文章目录 摘要 关键词 一.导言 二.角色操控 2.1 隐藏鼠标 2.2 通过移动鼠标更新玩家视角 2.3 使角色跳跃 2.4 使角色移动 2.5 使角色冲刺 2.6 使角色卧倒 2.7 设置准星及切 ...
- cocos2d-x游戏开发基础与实战 经典视频教程
cocos2d-x游戏开发基础与实战 经典视频教程 cocos2d-x游戏开发工资高吗? 精通C/C++,熟练掌握Cocos2d-x引擎及其Cocos2d-x引擎周边开发工具,了解游戏开发常用的工具和 ...
- 虚幻引擎C++编程游戏开发基础
流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:23.8 GB |时长:44h 59m ...
- Android游戏开发基础part2--Canvas画布
游戏开发基础part2--Canvas画布 又过了一周才继续做总结,四级结束了,应该可以多点时间学习游戏编程了. Canvas画布类是一个在游戏当中担当非常重要的角色,它可以绘制出不同的图形和图片,可 ...
- 【读书笔记《Android游戏编程之从零开始》】16.游戏开发基础(动画)
1. Animation动画 在Android 中,系统提供了动画类 Animation ,其中又分为四种动画效果: ● AlphaAnimation:透明度渐变动画 ● ScaleAnimation ...
- os-cocos2d游戏开发基础-进度条-开发笔记
os-cocos2d游戏开发基础-进度条-开发笔记(十) ios-cocos2d游戏开发基础-游戏音效-开发笔记(九) ios-cocos2d游戏开发基础-CCLayer和Touch ...
- Unity2D游戏开发基础教程1.2项目、资源和场景
Unity2D游戏开发基础教程1.2项目.资源和场景 如果使用Unity制作游戏,就一定会接触到项目(Project.资源(Asset)和场景(Scene).本节将依次介绍它们. 1.2.1 项目 ...
- Unity2D游戏开发基础教程1.2 项目、资源和场景
Unity2D游戏开发基础教程1.2 项目.资源和场景 如果使用Unity制作游戏,就一定会接触到项目(Project.资源(Asset)和场景(Scene).本节将依次介绍它们. 1.2.1 项目 ...
- Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍
Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介绍Unity的下 ...
- Unity 4.x 2D游戏开发基础教程大学霸第一更
Unity 4.x 2D游戏开发基础教程 大学霸 第1章 Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介 ...
最新文章
- Python关于%matplotlib inline
- 系统吞吐量(TPS)、用户并发量、性能测试概念和公式(转载)
- python中list与array互相转换
- Visual Studio 2008 每日提示(四)
- 三种获取Class类型的实例的方法
- linux 禁止账户远程登录
- 基于海思开发板的屏幕截图程序(二)
- 二十九、制作首页的显示列表
- Kafka从上手到实践-Zookeeper CLI:CRUD zNode | 凌云时刻
- K3 Cloud 表体显示序号
- 中小银行传统数据仓库向大数据平台迁移探索
- IDEA更改maven镜像源
- Protocol Buffer 简介
- python怎么判断实数_检查python对象是否可以解释为实数[python]
- 关闭windows server服务器的密码过期提示
- HTML中head与body标签
- 操作系统基本功能(操作系统)
- finereport与finebi差别_finebi和finereport区别
- DELL R630升级BIOS固件和IDARC
- 使用 SNMP 监控 VCSA (2145018)
热门文章
- python【数据结构与算法】KMP算法模板(我吐了!)
- java ejb3.0_初识EJB3.0 ---配置与运行篇
- 机器人末端执行器气爪怎么吸合_平行气爪工作原理是什么?平行气爪原理图作用是什么...
- python为什么运行不了_为什么python运行效率低?原来因为它!
- genrsa out php,PHP进行RSA加密解密
- 东莞网络推广浅析网站优化中常见的引流方式有哪些?
- 网站标题怎么写可以被搜索引擎快速识别?
- 计算机专业的个人实习报告范文,大学计算机专业的个人实习报告范文
- python的windows出现问题_Windows下使用python库 curses遇到错误消息的解决方案
- Android Handler与Looper原理简析