0

コード行を書き、スプライトを選択してドラッグできますが、ドラッグするとすぐにマウスカーソルから数ピクセル離れてしまい、その後は制御できますが、マウスから数ピクセル離れていますcursos ..変換に何か問題があるようです。CGPointまたは、わかりません。それは私のコードです

- (void)selectSpriteForTouch:(CGPoint)touchLocation {
    CCSprite * newSprite = nil;
    for (CCSprite *sprite in movableSprites) {
        if (CGRectContainsPoint(sprite.boundingBox, touchLocation)) {
            newSprite = sprite;
            NSLog(@"palieciau");
            break;
        }
    }
    if (newSprite != selSprite) {
        [selSprite stopAllActions];
        [selSprite runAction:[CCRotateTo actionWithDuration:0.1 angle:0]];
        CCRotateTo * rotLeft = [CCRotateBy actionWithDuration:0.1 angle:-4.0];
        CCRotateTo * rotCenter = [CCRotateBy actionWithDuration:0.1 angle:0.0];
        CCRotateTo * rotRight = [CCRotateBy actionWithDuration:0.1 angle:4.0];
        CCSequence * rotSeq = [CCSequence actions:rotLeft, rotCenter, rotRight, rotCenter, nil];
        [newSprite runAction:[CCRepeatForever actionWithAction:rotSeq]];
        selSprite = newSprite;
    }
}

- (BOOL)ccMouseDown:(NSEvent*)event {
    CCSprite * newSprite = nil;
    CGPoint clickLocation = [[CCDirector sharedDirector] convertEventToGL:event];
    for (CCSprite *sprite in movableSprites) {
        if (CGRectContainsPoint(sprite.boundingBox, clickLocation)) {
            newSprite = sprite;
            break;
        }
    }
    if (newSprite != selSprite) {
        [selSprite stopAllActions];
        [selSprite runAction:[CCRotateTo actionWithDuration:0.1 angle:0]];
        CCRotateTo * rotLeft = [CCRotateBy actionWithDuration:0.1 angle:-4.0];
        CCRotateTo * rotCenter = [CCRotateBy actionWithDuration:0.1 angle:0.0];
        CCRotateTo * rotRight = [CCRotateBy actionWithDuration:0.1 angle:4.0];
        CCSequence * rotSeq = [CCSequence actions:rotLeft, rotCenter, rotRight, rotCenter, nil];
        [newSprite runAction:[CCRepeatForever actionWithAction:rotSeq]];
        selSprite = newSprite;
    }
}


- (void)panForTranslation:(CGPoint)translation {
    if (selSprite) {
        CGPoint newPos = ccpAdd(selSprite.position, translation);
        selSprite.position = newPos;
    } else {
    }
}

-(BOOL)ccMouseDragged:(NSEvent *)event {
    CGPoint point = [[CCDirector sharedDirector] convertEventToGL:event];
    CGPoint mouseLocation = [self convertToNodeSpace:point];
    CGPoint translation = ccpSub(point, oldMouseLocation_);
    [self panForTranslation:translation];
    oldMouseLocation_ = point;
}
4

2 に答える 2

0

考慮すべき事項:

  1. ドラッグの開始時に、ドラッグが開始されたポイントとして oldMouseLocation を設定する必要があります
  2. スプライトが中心からドラッグされていることを確認してください。たとえば、コンテナを移動する場合は、左下隅からドラッグします。
  3. ccMouseDown で convertToNodeSpace 関数を使用していません
  4. [oldMouseLocation - mouseLocation ] の距離で移動する代わりに、ドラッグされたスプライト (selSprite) をマウスの位置で移動することを検討してください。必要に応じて、[開始ドラッグ ポイント - ドラッグされたスプライト位置] の距離で計算されたオフセットを適用できます。
于 2013-01-10T08:45:46.200 に答える
0

うまくいきました、ありがとう。

- (BOOL)ccMouseDragged:(NSEvent *)event 
{
    CGPoint point = [[CCDirector sharedDirector] convertEventToGL:event];
    CGPoint mouseLocation = [self convertToNodeSpace:point];
    CGPoint translation = (mouseLocation);
    [self panForTranslation:translation];
    return YES;
}

-(void)panForTranslation:(CGPoint)translation 
{
    if (first) 
    {
        NSLog(@"%f, %f",translation.x, translation.y);
        deb1.position = ccp( translation.x, translation.y );
    }
    if (second) 
    {
        NSLog(@"%f, %f",translation.x, translation.y);
        deb2.position = ccp( translation.x, translation.y );
    }
    if (third) 
    {
        NSLog(@"%f, %f",translation.x, translation.y);
        deb3.position = ccp( translation.x, translation.y );
    }
    else 
    {
        NSLog(@"not in sprite's rect");
    }

}
于 2013-01-10T10:26:36.303 に答える