【问题标题】:Cocos2D Gravity?Cocos2D 重力?
【发布时间】:2011-11-15 02:32:00
【问题描述】:

我真的很想尝试在我的游戏中加入重力。我知道每个人都说使用 Box2D,但在我的情况下 我不能。需要使用 Cocos2D 作为重力。

我知道 Cocos2D 没有内置任何重力 API,所以我需要手动做一些事情。问题是网络上没有任何教程或示例可以显示这一点。

谁能告诉我他们做了什么,或者可以解释一下一步一步如何应用非恒定重力(在下降时会稍微变强的重力) .

我认为这将帮助很多面临与我相同问题的人!

谢谢!

【问题讨论】:

  • 如果有需要我会加赏金的!

标签: ios cocos2d-iphone gravity


【解决方案1】:

重力只不过是在每个物理步骤中应用于身体的恒定速度。看看这个示例更新方法:

-(void) update:(ccTime)delta
{
   // use a gravity velocity that "feels good" for your app
   const CGPoint gravity = CGPointMake(0, -0.2);

   // update sprite position after applying downward gravity velocity
   CGPoint pos = sprite.position;
   pos.y += gravity.y;
   sprite.position = pos;
}

每一帧精灵的 y 位置都会减少。这就是简单的方法。为了获得更真实的效果,您需要为每个移动对象设置一个速度矢量,并将重力应用于速度(这也是一个 CGPoint)。

-(void) update:(ccTime)delta
{
   // use a gravity velocity that "feels good" for your app
   const CGPoint gravity = CGPointMake(0, -0.2);

   // update velocity with gravitational influence
   velocity.y += gravity.y;

   // update sprite position with velocity
   CGPoint pos = sprite.position;
   pos.y += velocity.y;
   sprite.position = pos;
}

这会导致速度随着时间的推移在向下的 y 方向上增加。这将使物体向下加速越来越快,它“下落”的时间越长。

然而,通过修改速度,您仍然可以改变对象的大致方向。例如,要让角色跳跃,您可以设置velocity.y = 2.0,它会向上移动,然后由于随着时间的推移施加的重力效应而再次下降。

这仍然是一种简化的方法,但在不使用“真实”物理引擎的游戏中非常常见。

【讨论】:

  • 我明白了。我仍然不明白是什么设置了velocity.y的值。从这个例子中它看起来总是 0 !还有一件事,我在 UIAccelerometer 方法中设置了精灵的位置。所以我应该在我的 UIAccelerometer 方法中执行此操作,如果没有,我将如何在我的 UIAccelerometer 方法中仅设置 CCSprite 的 X 位置?谢谢你的帮助。回答完这些问题后,请投票并接受!
  • 我意识到velocity.y 实际上不是0。无论如何我把它放在我的UIAccelerometer 方法中,可以吗?
  • 它清楚地说明了重力在 Cocos2d 中是如何工作的。我在“stackoverflow.com/questions/31492803/…”上发布了一个问题,但我想我可以通过手动速度更新来解决这个问题。谢谢@LearnCocos2D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2014-12-01
  • 1970-01-01
相关资源
最近更新 更多