0

これは非常に簡単に聞こえるかもしれません。スプライト ボディの位置は、mouseJoint によって移動された後にのみ追跡したいので、(mouseJoint が解放された後の任意の時点で) その位置を特定の位置と比較することで、その動きを制限できます。助けてください。

更新しました

これが私がしたことです。ccTouchesEnded メソッドで呼び出すスプライトの位置を返すメソッドを作成しました。

- (CGPoint)spritePositionRelease    {

for(b2Body *b = mouseJoint->GetBodyB(); b; b=b->GetNext())    {
    if (b->GetUserData() != NULL)
    {
        CCSprite *mySprite = (CCSprite*)b->GetUserData();
        if (mySprite.tag == 1) {
            mySprite.position = CGPointMake( b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO);
            spritePosition = mySprite.position;
            CCLOG(@"the sprite position is x:%0.2f , y:%0.2f", spritePosition.x, spritePosition.y);

            return spritePosition;
        }
    }
}
}

ccTouchesEnded:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

if (mouseJoint)
{
    [self spritePositionRelease];
    world->DestroyJoint(mouseJoint);
    mouseJoint = NULL;
}
}

tick メソッドに、次のコードを追加しました。

        for(b2Body *b = world->GetBodyList(); b; b=b->GetNext())    {
        if (b->GetUserData() != NULL)
        {
            CCSprite *mySprite = (CCSprite*)b->GetUserData();
            if (mySprite.tag == 1) {
                mySprite.position = CGPointMake( b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO);
                CGPoint spriteCurrentPosition = mySprite.position;

                if ( spritePosition.x != spriteCurrentPosition.x && 
                     spritePosition.y == spriteCurrentPosition.y) {
                    CCLOG(@"the sprite limit for y is y:%0.2f has been reached",  spriteCurrentPosition.y);
                }
            }
        }
    }

HelloWorldLayer.h クラスで spritePosition を初期化しました。私は何か間違ったことをしたことを知っています。tick メソッドでアクセスしている spritePosition が ccTouchesEnded メソッドの spritePosition と同じ値を持つとは思わないため、tick メソッドの条件が満たされることはありません。これを修正する方法がわかりません。助けてください

4

1 に答える 1

0

を使用ccpdistance(X2 , X1);して、2 点間の距離を見つけることができます。その距離から、スプライトが移動できる範囲を制限できます。

于 2012-08-21T12:14:31.003 に答える