我基本上是在使用Pong克隆,我想添加碰撞。我想要它的工作方式是,每个桨将被分成4个部分(不是视觉上),并且球将根据它击中的部分做出不同的反应。
就碰撞而言,我只知道矩形碰撞,这基本上就是整个桨叶。我不知道怎么做,所以桨叶有4个可能的碰撞点与不同的反应。
答案 0 :(得分:4)
将划桨分成4块,并保持整体:)
碰撞方法返回-1,如果rects没有碰撞,或者是第一个碰撞索引。
CollideIndex 方法返回碰撞rects的IEnumerable索引。 ;)
Paddle p;
World w;
Ball b;
Rect[] paddleSections = new Rect[]
{
p.Section[0],
p.Section[1],
p.Section[2],
p.Section[3],
}
Rect[] worldSections = new Rect[]
{
new Rect(p.Top, p.Left, p.Right, p.Bottom) // just simple world, for example
}
Rect[] ballSections = new Rect[]
{
new Rect(p.Top, p.Left, p.Right, p.Bottom) // just one ball piece, for example
}
Rect[] bricksSection = GetBrickRects();
int index = 0;
if ((index = Collide(ballSections, worldSections) != -1)
{
foreach(int collideIndex in CollideIndex(ballSection[index], worldSection)
{
// worldSection[collideIndex] intersects ballSections[index]
...
// something goes up here
}
}
将您喜欢的算法称为球,墙,砖。
别忘了给我发一副你的游戏!
答案 1 :(得分:1)
只是为答案添加另一个维度,这是一个经典的构建与购买决策:-)如果你想构建,一定要自己动手。但是,如果您只想专注于您的游戏,那么您可以使用大量库来实现此功能:
有一个非常好的其他引擎列表,可能比我在XNA Wiki上的SO答案中提供的更全面: http://www.xnawiki.com/index.php?title=Physics_Engine
答案 2 :(得分:0)
我将划桨分成不同宽度的琴道,例如:
ABBCCCDDDDDDDDDDDDCCCBBA
其中每个字母代表一个连续的矩形(DDDDDDDDD是一个宽矩形)。既然你知道如何交叉rects,你可以说,设置为D rect,反应将是完美的反射(180-alpha),其中对于A,B,C它将是(180-alpha * factor),其中因子取决于矩形,例如对于A,它是2,对于B 1.8,对于C 1.5。嗯,从技术上讲,D因子是1:)