【问题标题】:Iphone 2d game - Applying Gravity , Bounce issueIphone 2d 游戏 - 应用重力,弹跳问题
【发布时间】:2011-05-30 07:11:28
【问题描述】:

目前我是一名 Flash 游戏开发人员,我开始使用 cocos 2d 引擎为 iphone 编写游戏,我已经实现了单独的 Axis theorem 用于碰撞检测,效果很好。所有多边形在openGl中如下绘制。 经过多次搜索后,现在我尝试将重力应用到这个 16x16 的盒子上,我找到了这个教程 http://www.seinia.com/tutorials/Bounce/ 并在目标 C 中实现了相同的效果。

我遇到的问题是,在正方形静止后,它会不断向上/向下弹跳。我尝试了很多来解决这个问题,但我无法控制那个微小的运动。我在闪光灯中从来没有遇到过这样的问题,但这里的浮动值对方形位置的影响很大。

请让我知道处理此类问题的编写方法是什么,任何参考 URL 都会有所帮助。感谢您的帮助。谢谢!

0,16        16,16 

 ------------
|            |
|            |
|            |
|            |       
 ------------

0,0          16,0

目标 C 代码

if (square.points[0].y <= 0.1f) {
        velocity.vy *= -bounce;
        [square restInPeace:[Vector2D createVectorWithComponentX:velocity.vx Y:8.0f]];
        // landed
        if (fabs(velocity.vy) < 0.9f) {
            velocity.vy = 0.0f;
            [square restInPeace:[Vector2D createVectorWithComponentX:velocity.vx Y:8.0f]];
            isLanded = YES;
        }   
    } 

翻译对象

-(void) translateVelocity:(Vector2D*)velocity
{   
    // The center as well as all of the vertices need to be
    // accommodated.
    center.x += velocity.vx;
    center.y += velocity.vy;

    for(int i=0; i < count; i++)
    {
        points[i].x += velocity.vx;
        points[i].y += velocity.vy;

        ////NSLog(@"velocity %f %f",points[i].x , points[i].y);
    }
}

【问题讨论】:

  • 使用 cocos2d 自带的 Box2D phys 引擎可能会更容易...
  • 你是对的,但我自己实现一切的原因是因为我现在正在寻找 Job,所以我认为从头开始写作将有助于刷新基础知识、矢量数学、碰撞。
  • @JustJeff :对不起,我错过了,现在我已经添加了。

标签: objective-c c ios4 cocos2d-iphone


【解决方案1】:

在使用反弹算法时,通常建议实现轻微的缺陷,以确保不会发生此事件。您也可以扩大接受为“着陆”的范围,但请记住确保将对象粘在地板上以确保没有视觉伪影。

我的意思是不完美:

velocity.vy *= (-bounce + 0.01f);

例如。这应该使您的对象始终停止。

【讨论】:

  • 仍然有同样的问题,现在我决定妥协反弹,所以我现在只想单独实现重力。我的意思是,一旦它撞到地面,我想保持广场在地面上。现在遇到的一个新问题是设置坐标以使它们停留在地面上,重力不断将正方形向下拉,几秒钟后正方形移出边界框。
  • 我不太明白你的问题。我猜你正在对四个点施加重力,当一个点撞到地面时你会停下来。为了保持物体的大小,要么你说物体是完全刚性的,在这种情况下,其他点的位置将是绝对的,或者你可以在点之间实现弹簧式连接以保持形状。每个角应连接到其他角。
  • 很抱歉造成混乱 - 实际上我在努力实现非常基本的重力。我在更新着陆位置时犯了一个错误,我修复了现在弹跳和重力都可以工作的问题。非常感谢您的宝贵时间,这真的让我思考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 2020-05-14
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多