0

Cocos2d/Box2dアプリで落下物をタップしようとしています。

これが私のtouchesBeginコードです:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *myTouch = [touches anyObject];
    CGPoint location = [myTouch locationInView:[myTouch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];
    b2Vec2 locationWorld = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);

    for(b2Body *b = world->GetBodyList(); b; b=b->GetNext()) {
        b2Vec2 bPos = b->GetPosition();
        for (b2Fixture *f = b->GetFixtureList(); f; f=f->GetNext()) {

            if (f->TestPoint(locationWorld)) {
                NSLog(@"hit it!");
            }

        }
    }

私の世界には、地面と落下するオブジェクトの2つのオブジェクトがあります。私は重力が本当に遅いので、それに触れることは問題ではないはずです。奇妙なことに、私の立場はかなりずれているように見えます!

前回の実行では、locationWorld(タップした場所)は次のとおりです。

Printing description of locationWorld:
(b2Vec2) locationWorld = {
  x = 7.90625
  y = 9.875
}

私は外側のループを2回、各ボディに1回ずつ通過し、次のようになりました。

Printing description of bPos:
(b2Vec2) bPos = {
  x = 3.03125
  y = 19.6643
}
Printing description of bPos:
(b2Vec2) bPos = {
  x = 8.59375
  y = 17.4969
}

奇妙なことに、(8.59、17.49)で報告された2番目のボディは落下するオブジェクトであるはずですが、Y座標はかなり離れています。

これは私の最初のcocos2d/box2dアプリなので、明らかな何かが欠けていると確信しています。私はしばらくグーグルしてきました、そしてこれはそれがうまくいくはずのようです。

助けてくれてありがとう。

以下の私の答えを見てください、私のコードはここに正しいです、私は私の備品を間違ってセットアップしています。

4

1 に答える 1

0

わかりました。これは現在機能していますが、別の質問があると思います。

これを上で実行したとき、アイテムが互いに重なり合って地面に積み重なるように、かなり小さなダイナミックボックスを作成しました。

dynamicBox.SetAsBox(.25f、.25f)

これが原因でした。これをもっと大きなものに開くときは、次のように言います。

dynamicBox.SetAsBox((spriteSize.width / PTM_RATIO)/ 4、(spriteSize.height / PTM_RATIO)/ 4);

そうすれば、上記のコードで体に触れることが可能になります。(したがって、オブジェクトを積み重ねて互いにオーバーラップさせたいので、私の質問を再定式化する必要があります。

また、アイテムを近づけるためにサイズを4で割る必要がある理由もわかりません。それは、私を悩ませているだけです。

于 2013-01-15T21:50:08.880 に答える