【问题标题】:Moving b2Body in given angle以给定角度移动 b2Body
【发布时间】:2011-07-06 12:29:24
【问题描述】:

我有使用 setTransform 设置角度的 b2Body。但我希望 b2Body 以特定角度移动。我的 CCSprite 正在使用 ccMoveBy 以那个角度移动。但是我的 b2Body 并没有与那个 CCSprite 一起移动。所以我想到了使用setTransform。我将角度设置为与移动 CCSprite 相同的值。但是 b2Body 仍然会移动到其他地方。

我用过

b->setTransform(b->getPosition(),30*DEG_TO_RED);
b->setLinearVelocity(b2Vec2(120,180));

非常感谢任何帮助。

谢谢你。

【问题讨论】:

    标签: iphone cocos2d-iphone box2d box2d-iphone


    【解决方案1】:

    如果您想自己移动 b2Body,那么最好将其设置为运动体(您可以随时更改身体的类型)。然后只需设置速度:

    body->SetType(b2_kinematikBody);
    float angle = 30*M_PI/180.0f;
    float spd = 50;
    b2Vec2 velocity = spd*b2Vec2(cos(angle), sin(angle));
    body->SetLinearVelocity(velocity);
    

    【讨论】:

    • cossin 采用弧度。
    【解决方案2】:
    #define CC_DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) * 0.01745329252f) // PI / 180
    

    这是为了让身体旋转 30 度而不改变它的位置。

        b->setTransform(b->getPosition(),CC_DEGREES_TO_RADIANS(30));
    
        b->setLinearVelocity(b2Vec2(120,180));
    

        b->setTransform(b2Vec(100/PTMRATIO,200/PTMRATIO),CC_DEGREES_TO_RADIANS(30));
    

    这里我改成 100 X 200Y POSITION

    导入“CGPointExtension.h”

            b->setTransform(ccpAdd(b2Vec(100/PTMRATIO,200/PTMRATIO), b2Vec(50/PTMRATIO,50/PTMRATIO)),CC_DEGREES_TO_RADIANS(30));
    

    【讨论】:

    • 那么如何改变特定角度的位置??
    • 我希望它以特定角度移动?我可以改变位置,但现在说我希望 b2Body 移动 5,然后它应该移动 5 到那个特定的角度,比如 CCSprite。
    • 您可以使用 body->GetAngle() 获取当前角度,然后添加。本教程可能会有所帮助:iforce2d.net/b2dtut/rotate-to-angle
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2011-11-20
    相关资源
    最近更新 更多