16

那是一个长长的假期周末,所以我又遇到了编码错误并开始玩弄:

马里奥 http://gfilter.net/junk/tileengine.jpg

我写了一个基本的瓦片引擎,但以前从未尝试过,我真的很努力处理精灵碰撞检测和实现重力的真实物理。

对于任何其他游戏爱好作家,您能否指出一些关于解决此问题的最佳方法的演练?

更新:

我想我会分享一份进度报告:

http://www.youtube.com/watch?v=-RKNQ2UiiLY <-- 游戏实战

它仍然非常有问题,但碰撞检测大部分都在工作,我已经开始研究其他一些功能(例如碰撞块(注意错误)和与敌人互动)。

马里奥仍然像在月球上一样走路,我正在使用这些常数,有什么建议可以调整它们以获得更真实的感觉吗?

    const float AirDrag = 1.00f;
    const float GroundFriction = .97f;
    const float Gravity = 0.8f;
4

9 回答 9

5

下载 FarseerPhysics 引擎,看看它是如何工作的http://www.codeplex.com/FarseerPhysics我认为这是 XNA/Silverlight 可用的最好的东西!

于 2008-12-01T23:55:37.877 回答
3

重力很简单:

const gravity = ... ; // pixels per timestep (eg. video frame) squared
// while in freefall, each timestep:
y_velocity += gravity;
y_pos += y_velocity;

请注意,我玩过的大多数 2D 平台游戏都没有真实的重力。做任何让游戏变得有趣的事情!

于 2008-12-02T01:40:35.513 回答
2

jnrdev可能会有所帮助。它涵盖了瓷砖碰撞/响应和斜坡。这不是我见过的最好的代码,但它完成了工作。

于 2008-12-02T02:30:47.207 回答
2

在http://www.metanetsoftware.com/technique/tutorialA.htmlhttp://www.metanetsoftware.com/technique/tutorialB.html上有几个非常有用的二维平台游戏教程。我认为他们已经被其他地方的其他人引用过。它们涵盖了碰撞检测和响应、光线投射、各种优化技术等,并且对于那些(像我一样)不太喜欢数学的人很好地解释了背后的理论。它并没有像刚体动力学这样的东西,但我认为对于你正在编写的游戏类型你不需要它(尽管如果你添加这种东西当然会很酷...... .)

于 2009-05-09T21:26:31.300 回答
1

这可能是绕道而行,但请尝试使用 XNA 3.0 的 Platformer 入门套件,其中包含物理和基本碰撞检测等内容。你需要改变一些东西以使它在 XNA 之外工作,但这不是火箭科学。

XNAGS 3.0 下载

于 2008-12-01T23:43:11.973 回答
0
    UIGraphicsBeginImageContext(images.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    UIColor *color = [UIColor whiteColor];
    [color setFill];

    CGContextTranslateCTM(context, 1, images.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextSetBlendMode(context, kCGBlendModeDestinationOver);
    CGRect rect = CGRectMake(0.0, 0.0, images.size.width, images.size.height);
    CGContextDrawImage(context, rect, images.CGImage);
    CGContextClipToMask(context, rect, images.CGImage);
    CGContextAddRect(context, rect);
    CGContextDrawPath(context, kCGPathFill);
    images = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
于 2012-08-09T05:10:57.613 回答
0

我不知道您在使用什么物理模型,但是最近在另一个 SO question中解决了使用流体阻力的物理模型。我不会重复我在答案中给出的所有内容,我只会链接到它

总而言之,该问题的 OP 想要将物体从静止加速到最大速度。我经历了一些推导,将速度建模为两种不同类型阻力的时间函数。您的情况可能略有不同,因此使用的积分可能有不同的形式或需要用不同的初始条件求解,但希望我的回答能为您指明一些信息方向。

于 2009-03-25T17:24:57.303 回答
0

您的多个块被碰撞的错误,您可以通过仅碰撞与播放器精灵最对齐或偏移量最小的块来解决该问题。确保不要将其限制在一个方向。在马里奥中,实际上可以从任何方向撞块。(以上通过在相同的游戏中进行地面磅,或钻旋转的东西)(使用外壳的侧面)

于 2009-07-26T14:39:09.153 回答
-6

听说过GameMaker吗?

于 2008-12-02T02:25:07.810 回答