Как повернуть и изменить размер спрайта как фотографию в библиотеке - PullRequest
2 голосов
/ 14 октября 2010

Как мне вращать спрайт вокруг его центра в cocos2d в ccTouchesMoved. Я нашел некоторый код, но это не то, что мне нужно. Мне нужно повернуть спрайт как фотографию в приложении Фотогалерея.


- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    NSArray *allTouch = [touches allObjects];
    if([allTouch count] > 1){
        UITouch *touch = [allTouch objectAtIndex:0];
        CGPoint point = [touch locationInView: [touch view]];
        point = [[CCDirector sharedDirector] convertToGL:point];

        float angleRadians = atanf((float)point.y / (float)point.x);
        float angleDegrees = CC_RADIANS_TO_DEGREES(angleRadians);
        float cocosAngle = -1 * angleDegrees;
        imageFromPicker.rotation = imageFromPicker.rotation + cocosAngle;

    }
}

1 Ответ

1 голос
/ 14 октября 2010

, вероятно, не лучший способ, но я использую это:

Когда я касаюсь спрайта двумя пальцами, я использую арктан двух точек, чтобы вращать спрайт:

сначала янайдите направление с помощью этой функции:

static inline int ccw(CGPoint p0, CGPoint p1, CGPoint p2)
{
    int dx1, dx2, dy1, dy2;

    dx1 = p1.x - p0.x; dy1 = p1.y - p0.y;
    dx2 = p2.x - p0.x; dy2 = p2.y - p0.y;

    int v1 = dx1 * dy2;
    int v2 = dy1 * dx2;

    if (v1 > v2)
        return 1;

    if (v1 < v2)
        return -1;

    if ((dx1*dx2 < 0) || (dy1*dy2 < 0))
        return -1;

    if ((dx1*dx1 + dy1*dy1) < (dx2*dx2 + dy2*dy2))
        return 1;

    return 0;
}

и после этого с помощью метода ccTouchesMoved я делаю это:

if ([allTouches count] == 2) {
            rotating=TRUE;
            NSArray *twoTouches = [allTouches allObjects];
            UITouch *first = [twoTouches objectAtIndex:0];
            UITouch *second = [twoTouches objectAtIndex:1];

            CGPoint a = [first previousLocationInView:[touch view]];
            CGPoint b = [second previousLocationInView:[touch view]];
            CGPoint c = [first locationInView:[touch view]];



            int direction =ccw(b, a, c);
            float pX= fabs(c.x-b.x);
            float pY= fabs(c.y-b.y);

            float rotation  = atan2(pY, pX);
        //  rotTotal= (rotTotal+rotacion)/10;
            if(direction<0)
            YourSprite.rotation=(YourSprite.rotation-rotation);
            else
            YourSprite.rotation=(YourSprite.rotation+rotation);

             }

это работает для меня, надеюсь, оно работает и для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...