Iphone 2d游戏 - 应用Gravity,Bounce问题

时间:2011-05-30 07:11:28

标签: objective-c c ios4 cocos2d-iphone

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

我遇到的问题是在广场休息之后它会在分数上下跳动。我尝试了很多来解决这个问题,但是我无法控制那个微小的动作。我从来没有在闪光灯中遇到过这样的问题,但这里浮动值很大程度上影响了方形位置。

请让我知道处理此类问题的书写方式是什么,任何参考网址都会有所帮助。恭喜你的帮助。谢谢!

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);
    }
}

1 个答案:

答案 0 :(得分:2)

使用反弹算法时,通常建议实施轻微的不完美,以确保不会发生此事件。你也可以扩大被接受为“Landed”的范围,但要记住确保然后将对象粘贴到地板上以确保没有视觉伪像。

我的意思是不完美:

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

例如。这应该使你的对象永远停止。