0

いくつかの cocos2d コードに問題があります。シミュレーターでは正常に動作します (この場合、タッチしてスクロールするとスプライトが移動することを意味します) が、ipod では動作しません。シミュレーターでのみ移動

CCSprite *gradA = [CCSprite spriteWithFile:@"grad.png"];
gradA.anchorPoint = ccp(0, 0);
gradA.position = ccp(0, 0);

[...]

-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{   
    //NSLog(@"ccTouchesMoved called");

    UITouch *touch   = [touches anyObject];
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    int d = (_prevTouch.y - location.y);
    // This code should make the sprite moving
    // And it does on the simulator but not on my ipod
    gradA.position = ccp(PARALAX_X, gradA.position.y - d);

    _prevTouch = location;
}

-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch   = [touches anyObject];
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    _firstTouch = location;
}

-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{   
    UITouch *touch   = [touches anyObject];
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    _lastTouch = location;
}

ところで、「gradA.position = ccp(0, gradA.position.y - d);」を実行すると ccTouchesMoved 以外の方法では、デバイスとシミュレーターで動作します。

これは私の最初のプロジェクトであるため、私の側では愚かな間違いである可能性があります (そうであることを願っています)。

4

2 に答える 2

1

現時点でスプライトを移動する方法を次に示します (ccTouchesMoved で):

    UITouch *touch = [touches anyObject];

    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];

    CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];
    oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];
    oldTouchLocation = [self convertToNodeSpace:oldTouchLocation];

    CGPoint translation = ccpSub(touchLocation, oldTouchLocation);

    CGPoint newPos = ccpAdd(currentFragment.position, translation);
    currentFragment.position = newPos;
于 2013-02-21T12:25:37.657 に答える
0

答えは簡単です。デバイスとシミュレーターの間に問題がある場合は、NSLog がデバイス上で非常に遅く、デバイスがスプライトの動きをレンダリングできないことを確認する必要があります (ファイル名のケースも同様です)。

ccTouchesMoved メソッドのコードに 2 つの NSLog がありましたが、それらを削除すると、魅力的に機能します。

デバイスで NSLog を使用しないでください。

于 2013-02-21T12:36:19.640 に答える