这是一个漫长的假期周末,所以我再次得到了编码错误并开始玩游戏:
Mario 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;
答案 0 :(得分:5)
下载FarseerPhysics引擎,了解它是如何工作的http://www.codeplex.com/FarseerPhysics我认为这是XNA / Silverlight最好的东西!
答案 1 :(得分:3)
重力很容易:
const gravity = ... ; // pixels per timestep (eg. video frame) squared
// while in freefall, each timestep:
y_velocity += gravity;
y_pos += y_velocity;
请注意,我玩过的大多数2D平台游戏不具有逼真的引力。做任何让游戏变得有趣的事情!
答案 2 :(得分:2)
jnrdev可能会有所帮助。它涵盖了瓷砖碰撞/响应和斜坡。这不是我见过的最好的代码,但它完成了工作。
答案 3 :(得分:2)
在http://www.metanetsoftware.com/technique/tutorialA.html和http://www.metanetsoftware.com/technique/tutorialB.html有几个非常有用的二维平台游戏教程。我认为他们已经被其他人引用了SO。它们涵盖了碰撞检测和响应,光线投射,各种优化技术等,并且对于那些在数学上不那么倾向的人(比如我),对它背后的理论有很好的解释。它并没有像刚体动力学这样的东西,但我认为你不需要你正在编写的游戏类型(尽管如果你添加这种东西当然会很酷.. 。)
答案 4 :(得分:1)
这可能是一个绕道而行,但请尝试使用XNA 3.0中的Platformer入门套件,其中包含物理和基本碰撞检测等内容。你需要改变一些东西,让它在XNA之外工作,但这不是火箭科学。
答案 5 :(得分:0)
我不知道你在物理模型中使用了什么,但最近在fluid drag中解决了使用another SO question的物理模型。我不会重复我在答案中给出的所有内容,我只会link to it。
总而言之,问题的OP希望将对象从静止加速到最大速度。我对两种不同类型的阻力进行了一些推导,将速度建模作为时间的函数。您的情况可能略有不同,因此使用的积分可能有不同的形式或需要在不同的初始条件下解决,但希望我的回答将指向您的信息方向。
答案 6 :(得分:0)
你的错误是多个块被碰撞,你可以通过仅碰撞与playerprite最对齐的块,或者具有最小的偏移量来解决这个问题。一定不要将其限制在一个方向。在马里奥,实际上可以从任何方向碰撞阻挡。 (通过在相同的游戏中做一个地面磅,或钻 - 旋转的东西)(使用壳的侧面)
答案 7 :(得分: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();
答案 8 :(得分:-6)
有没有听说过GameMaker?