以与使用 CCRepeatForever 移动 CCSprite 类似的方式重复移动 box2d 主体

发布于 2024-12-03 16:57:10 字数 546 浏览 0 评论 0原文

我当前的项目有问题。

我想做的是让 b2Body 反复上下移动。我已经知道如何使用 CCSprite 执行此操作:

[paddle runAction:[CCRepeatForever actionWithAction: [CC序列操作: [CCMoveTo actionWithDuration:1.0 位置:ccp([桨位置].x,[桨位置].y+40)], [CCMoveTo actionWithDuration:1.0 位置:ccp([桨位置].x,[桨位置].y)], 零 ]]];

有人可以帮我用 b2Body 做同样的事情吗? 提前致谢!

I've got a problem with my current project.

What I'd like to do is make a b2Body move up and down repeatedly. I already know how to do this with a CCSprite:

[paddle runAction:[CCRepeatForever actionWithAction:
[CCSequence actions:
[CCMoveTo actionWithDuration:1.0 position:ccp([paddle position].x,[paddle position].y+40)],
[CCMoveTo actionWithDuration:1.0 position:ccp([paddle position].x,[paddle position].y)],
nil
]]];

Can anybody help me do the same thing with a b2Body?
Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

余生共白头 2024-12-10 16:57:10

您必须自己实现该序列,其中包括:

  • 跟踪当前目标位置
  • 从身体的当前位置
  • ,检测是否已到达目标(如果已到达),更改目标位置
  • 施加力、脉冲或将速度设置为移动身体所必需的

您也许可以扩展 CCMoveTo 来创建您自己的类来执行此操作...我会首先研究这一点。

You will have to implement the sequence yourself, which involves:

  • keeping track of the current target position
  • from the current position of the body, detect whether it has reached the target
  • if it has, change the target position
  • apply force, impulse or set velocity as necessary to move the body

You might be able to extend CCMoveTo to make your own class to do this... I would look into that first.

〃温暖了心ぐ 2024-12-10 16:57:10

我明白了,伙计,
在几乎解释中,每个 CCsprite 移动都依赖于 b2body 移动 - 该移动被放置在 'tick' 方法中 -。
就我而言,我以这种方式反转,我根据tick方法上的CCsprite运动来移动b2body,所以我在tick方法上给出了这些代码:

for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {    
    if (b->GetUserData() != NULL) {
        CCSprite *sprite = (CCSprite *)b->GetUserData();
        if (sprite.tag == 4 || sprite.tag == 5) {
            b2Vec2 b2Position = b2Vec2(sprite.position.x/PTM_RATIO,
                                       sprite.position.y/PTM_RATIO);
            float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(sprite.rotation);

            b->SetTransform(b2Position, b2Angle);
        }

    }        
}

i've got it dude,
in almost explanation, every CCsprite move depend on b2body movement -that movement is placed at 'tick' method-.
in my case, i reverse that way, i move b2body according to CCsprite movement on tick method, so i give these code on tick method:

for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {    
    if (b->GetUserData() != NULL) {
        CCSprite *sprite = (CCSprite *)b->GetUserData();
        if (sprite.tag == 4 || sprite.tag == 5) {
            b2Vec2 b2Position = b2Vec2(sprite.position.x/PTM_RATIO,
                                       sprite.position.y/PTM_RATIO);
            float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(sprite.rotation);

            b->SetTransform(b2Position, b2Angle);
        }

    }        
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文