游戏开发论坛

 找回密码
 立即注册
搜索
查看: 20974|回复: 87

新手求助:2D碰撞

[复制链接]

41

主题

242

帖子

273

积分

中级会员

Rank: 3Rank: 3

积分
273
发表于 2006-9-6 08:08:00 | 显示全部楼层 |阅读模式
最近想研究一下2d的碰撞问题。
我知道有方形碰撞和圆形碰撞,但是不知道具体的算法,应该怎样写。
如果判断10个方形是否碰撞,或10个圆形是否碰撞应该怎样写代码?
那种更快些?
最好写个例子。谢谢。

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2006-9-6 08:40:00 | 显示全部楼层

Re:新手求助:2D碰撞

上次刚有人发了文章。你找找看看,前几页。

10

主题

411

帖子

411

积分

中级会员

Rank: 3Rank: 3

积分
411
发表于 2006-9-6 09:01:00 | 显示全部楼层

Re:新手求助:2D碰撞

不规则图形不好判断,尤其是一个物体有很多不规则的边角,DOS时代是用物体边缘颜色判断,现在VB6用的是矩形判断。

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2006-9-6 09:13:00 | 显示全部楼层

Re: 新手求助:2D碰撞

这是我用的

矩形与矩形碰撞
    Public Structure SERect '矩形
        Public Loca As SEPoint '位置
        Public ValHeight As Single
        Public ValWidth As Single
        Public Function TestPoint(ByRef inP As SEPoint) As Boolean
            '测试是否包含输入的点
            Return inP.X < Loca.X + ValWidth AndAlso inP.X > Loca.X - ValWidth AndAlso _
            inP.Y < Loca.Y + ValHeight AndAlso inP.Y > Loca.Y - ValHeight
        End Function
    End Structure

圆形与圆形碰撞
    Public Structure SERound '圆形
        Public Loca As SEPoint '位置
        Public ValRange As Single '半径
        Public Function TestPoint(ByRef inP As SEPoint) As Boolean
            '测试是否包含输入的点
            If (inP.X - Loca.X) * (inP.X - Loca.X) + (inP.Y - Loca.Y) * (inP.Y - Loca.Y) < ValRange * ValRange Then
                Return True
            End If
        End Function
    End Structure

矩形与圆形碰撞
    Public Structure SERoundRect '圆角矩形
        Public Loca As SEPoint '位置
        Public RoundRange As Single '半径
        Public RectHeight As Single
        Public RectWidth As Single
        Public Function TestPoint(ByRef inP As SEPoint) As Boolean
            '测试是否包含输入的点
            Dim tX As Single = Abs(Loca.X - inP.X)
            Dim tY As Single = Abs(Loca.Y - inP.Y)
            If tX > RectWidth + RoundRange OrElse tY > RectHeight + RoundRange Then
                Return False
            ElseIf tX < RectWidth OrElse tY < RectHeight Then
                Return True
            Else
                tX -= RectWidth
                tY -= RectHeight
                Return (tX * tX + tY * tY) < RoundRange * RoundRange
            End If
        End Function
    End Structure

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2006-9-6 09:22:00 | 显示全部楼层

Re: Re:新手求助:2D碰撞

游戏之家5世: Re:新手求助:2D碰撞

不规则图形不好判断,尤其是一个物体有很多不规则的边角,DOS时代是用物体边缘颜色判断,现在VB6用的是矩形判断。


不规则图形通常是用矩形和圆形来组合成近似的图形来判断

10

主题

411

帖子

411

积分

中级会员

Rank: 3Rank: 3

积分
411
发表于 2006-9-6 10:39:00 | 显示全部楼层

Re: Re: Re:新手求助:2D碰撞

psic: Re: Re:新手求助:2D碰撞



不规则图形通常是用矩形和圆形来组合成近似的图形来判断


你有没遇到这种情况,不信你写个例子。
sf_200696103917.jpg

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2006-9-6 11:12:00 | 显示全部楼层

Re:新手求助:2D碰撞

哦?这Boss形状太怪了吧。

10

主题

411

帖子

411

积分

中级会员

Rank: 3Rank: 3

积分
411
发表于 2006-9-6 11:34:00 | 显示全部楼层

Re: Re:新手求助:2D碰撞

Miu.C: Re:新手求助:2D碰撞

哦?这Boss形状太怪了吧。


你玩下流行的街机游戏就知道了,一个BOSS还要变几次形, 比如1945III。

0

主题

1037

帖子

1037

积分

金牌会员

Rank: 6Rank: 6

积分
1037
发表于 2006-9-6 14:19:00 | 显示全部楼层

Re:新手求助:2D碰撞

谁可以教我做Boss?

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2006-9-6 14:26:00 | 显示全部楼层

Re: Re:新手求助:2D碰撞

griffin2006: Re:新手求助:2D碰撞

谁可以教我做Boss?

做好的发给我啊。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 08:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表