首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >花栗鼠物理定位

花栗鼠物理定位
EN

Stack Overflow用户
提问于 2013-04-05 12:34:28
回答 2查看 855关注 0票数 0

我看了很多,也没能找到这个问题的简明答案。在我的Cocos2D游戏中,我集成了花鼠物理引擎。在初始化时,我通过建立一系列主体和静态形状来设置“游戏场”的边界,如下所示:

代码语言:javascript
复制
- (void)initPlayingField {
    // Physics parameters
    CGSize fieldSize = _model.fieldSize;
    CGFloat radius = 2.0;
    CGFloat elasticity = 0.3;
    CGFloat friction = 1.0;

    // Bottom
    CGPoint lowerLeft = ccp(0, 0);
    CGPoint lowerRight = ccp(fieldSize.width, 0);
    [self addStaticBodyToSpace:lowerLeft finish:lowerRight radius:radius elasticity:elasticity friction:friction];

    // Left
    CGPoint topLeft = ccp(0, fieldSize.height);
    [self addStaticBodyToSpace:lowerLeft finish:topLeft radius:radius elasticity:elasticity friction:friction];

    // Right
    CGPoint topRight = ccp(fieldSize.width, fieldSize.height);
    [self addStaticBodyToSpace:lowerRight finish:topRight radius:radius elasticity:elasticity friction:friction];

    // Top
    [self addStaticBodyToSpace:topLeft finish:topRight radius:radius elasticity:elasticity friction:friction];
}

这种设置是有效的,除了一件事--边界的位置似乎偏离了右侧的大量像素。初始化玩家并将其发送到边界墙后,它不会从屏幕边缘反弹(正如我所预期的那样,通过将边界框设置为0,0),而是从屏幕边缘向内反弹一定数量的像素(可能是30-50)。怎么回事?

我最初以为问题出在我渲染player sprite的地方,但是通过调试器运行之后,一切看起来都很好。当使用花栗鼠的位置来渲染精灵时,有什么特殊的协议要遵循吗?我需要把所有的东西都乘以某种PIXELS_PER_METER吗?如果它们在精灵工作表中,这有关系吗?精灵批处理节点?下面是我如何在视图中设置精灵位置的方法:

代码语言:javascript
复制
Player *player = [[RootModel sharedModel] player];
self.playerSprite.position = player.position;
self.playerSprite.rotation = player.rotation;

下面是我如何在我的模型中设置位置:

代码语言:javascript
复制
- (void)update:(CGFloat)dt {
    self.position = self.body->p;
    self.rotation = self.body->a;
}

(是的,我知道存储位置是多余的,因为花栗鼠天生就是这么做的。)

另外,对于那些读完这篇文章的人,还有一个额外的问题。你如何才能使物体在任何方向上以恒定的速度移动,只允许它在任何给定的时间向左或向右转动,而永远不会减速?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-05 16:09:40

物理物体的形状是什么?也许您只是忘记了将形状设置为与精灵相同的大小。如果只考虑位置,那么精灵将能够在任何边界移动到屏幕之外的一半,因为它的位置在精灵的中心。

要以恒定速度移动物体,请在禁用摩擦力的同时设置其速度(设置为0?)并允许它以其撞击速度从碰撞中反弹(在Box2D中,这将是恢复= 1,不知道花鼠)。

票数 1
EN

Stack Overflow用户

发布于 2013-04-05 21:49:21

你有没有试过调试绘制碰撞形状?Cocos2D 2.1中有我的CCPhysicsDebugNode类,这使得添加它变得非常容易。这将让您知道您的几何体是否与您的图形对齐。你的边界形状有多厚?您是否有可能将精灵添加到可能会偏移它们的父节点?

花栗鼠不需要你为任何真实的单位调整它。你可以只使用像素或者其他任何东西。

最后,@LearnCocos2D有关于恒定速度的正确想法。将friction设置为0,将elasticity设置为1.0。你可能还想在每一帧中检查它的速度,并在每一帧中将它加速回到正常的速度。与非静态几何体的碰撞将导致其减速。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15825970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档