SlideShare une entreprise Scribd logo
1  sur  95
Télécharger pour lire hors ligne
"Less" about


{COLLISION}
小胖只有一个

姓名       : 魏子钧

职务       : 盛大创新院 研究员

E-Mail   : finscn@gmail.com

Blog     : http://fins.iteye.com

新浪微博 : @大城小胖
[ Game Dev ]
计算机之子@寒冬winter 老老师


[ Game Dev ]
Why 2D ?
[ Rectangle ]
y
    x,y   width



                     height




                          x
                  AABB
y
    x,y   width



                     height



                     x',y'

                             x
                  AABB
x,y




      x',y'
x,y




        x',y'




相交==!!相交
x             x'


y
         x,y




               x',y'
y'
x             x'


                   y
    x,y




          x',y'
                   y'
Code
判断是否不不相交
Code
判断是否相交 ==!是否不不相交
Collision Box
Collision Box
Collision Box




不不应总是使用AABB作为碰撞矩形
我就是不不掉下
去,爱咋地咋地!
  哼!
我就是不不掉下
   去,爱咋地咋地!
     哼!




在非物理类的2D游戏里,
 不不精确的碰撞检测
 通常是可以接受的
[ Polygon ]
矩形碰撞区域不不再合适
可将多边形近似分解成多个矩形
 性能有时比多边形碰撞检测高
2D格斗游戏中
  常用此法
分离轴定理(SAT)
Separating Axis Theorem
不碰撞时,分离线有⼀一条或无数条
SAT

1. 在两个多边形之间,寻找分离轴
2. 找到了了,则多边形未发生碰撞,否则发生碰撞
SAT

1. 在两个多边形之间,寻找分离轴
2. 找到了了,则多边形未发生碰撞,否则发生碰撞




证明两个多边形之间存在/不不存在分离轴
line
必定有⼀一条分离线 平行于两个多边形的某⼀一条边
必定有⼀一条分离线 平行于两个多边形的某⼀一条边
平行于某⼀一条边,相当于...
相当于垂直于这⼀一条边的法线
( SAT++ )

thanks,@miloyip
如果⼀一个多边形的
  所有顶点
都在另⼀一个多边形
  的"外面",

 则两者不相交
http://weibo.com/1747724431/y2jf9h4Rf
@miloyip 提供的
   算法思路,

 详见下面地址



   http://weibo.com/1747724431/y2jf9h4Rf
凹多边形可近似分解成多个凸多边形
(任何多边形,总是可以分解成多个三角形)
Many
[ Rectangles ]
Simple & Bad


        2
1                    4
                 3

    5
             6       7


    8                9
2
1                   4
                3

    5
            6       7


    8               9
2
1                   4
                3

    5
            6       7


    8               9
Simple & Bad


1.双重循环, 检测所有物体
2.自己不不和自己检测
3.彼此之间做过碰撞检测的不不再检测
Grid & Good

        2
1                   4
                3

    5
            6       7


    8               9
Grid & Good

        2
1                   4
                3

    5
            6       7


    8               9
2
1                   4
                3

    5
            6       7


    8               9
2
1                   4
                3

    5
            6       7


    8               9
2
1                   4
                3

    5
            6       7


    8               9
2
1                   4
                3

    5
            6       7


    8               9
Grid & Good

1. 先计算所有物体分别属于哪一个格子.
   以物体某一点为基准(如AABB左上角)
2. 格子i 内的物体两两检测
3. 格子i 内的物体与 相邻格子内的物体做检测


     注意: 格子要比最大物体的AABB大
( Grid++ )
1
2
1
2
1
        3
2
1           4
        3
2
1               4
            3

    5
2
1                   4
                3

    5
            6
Grid & Better

1. 计算 物体i 在哪些格子里, 并记录.
   物体AABB覆盖的格子(一个物体可属于多个格子)
2. 检测 物体i 与自己所在格子里所有物体的碰撞
3. 记录检测过的碰撞关系
4. i++
5. 重复1到4 直到所有物体都检测完毕


         注意: 格子大小与物体大小无关
Grid & Better

            2           4
1
                    3
        5                       7

                6
                            9
    8
[ Collide ]
     &
 [ Block ]
v
d'




v
overlap
d'




v
d




v
overlap
d




v
d




v
overlap
d




v
[ Tile Based ]
What's
Tile Based?
以大小相同样式不不同的小方块为单位,
构建游戏场景的一种2D游戏(如传统的超级玛丽)
可在设计地图时,手动定义地图的碰撞矩形
可以Tile为单位定义碰撞矩形
1


    1
1


    1
1


    1
推荐阅读
Q?A:THANKS

Contenu connexe

En vedette

En vedette (8)

พรบ. คอม
พรบ. คอมพรบ. คอม
พรบ. คอม
 
พรบ. คอม
พรบ. คอมพรบ. คอม
พรบ. คอม
 
Terrestrial biomes
Terrestrial biomesTerrestrial biomes
Terrestrial biomes
 
Freshwater ecology
Freshwater ecology Freshwater ecology
Freshwater ecology
 
20080618 Suivi Lecteurs Epsa
20080618 Suivi Lecteurs Epsa20080618 Suivi Lecteurs Epsa
20080618 Suivi Lecteurs Epsa
 
Investor presentation 1014 rus
Investor presentation 1014 rusInvestor presentation 1014 rus
Investor presentation 1014 rus
 
Investor presentation H1 2014
Investor presentation H1 2014Investor presentation H1 2014
Investor presentation H1 2014
 
Investor presentation eng 09/14
Investor presentation eng 09/14Investor presentation eng 09/14
Investor presentation eng 09/14
 

Collision