目前我是一名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);
}
}
答案 0 :(得分:2)
使用反弹算法时,通常建议实施轻微的不完美,以确保不会发生此事件。你也可以扩大被接受为“Landed”的范围,但要记住确保然后将对象粘贴到地板上以确保没有视觉伪像。
我的意思是不完美:
velocity.vy *= (-bounce + 0.01f);
例如。这应该使你的对象永远停止。