Как сдвинуть спрайт под определенным углом с помощью джойстика

Привет, наконец-то я сделал работающий джойстик в cocos2d. Я могу повернуть спрайт точно под таким углом, на который «указывает» большой палец или колпачок джойстика. Однако я не могу переместить спрайт в том же направлении. Есть ли простой способ переместить спрайт так, как у меня настроен вращающийся код? Также есть ли способ заставить его двигаться, если ваш большой палец все еще нажат, но не двигает джойстик? PS весь этот код находится в методе TouchesMoved. ППС. колпачок — это большой палец, подушечка — это фон джойстика, а Sprite2 — это спрайт, который я хочу переместить. (95, 95) — это центр спрайта пэда.

if(capSprite.position.x>=padSprite.position.x){
            id a3 = [CCFlipX actionWithFlipX:NO];
            [sprite2 runAction:a3];
        }
        if(capSprite.position.x<=padSprite.position.x){
            id a4 = [CCFlipX actionWithFlipX:YES];
            [sprite2 runAction:a4];
        }


        CGPoint pos1 = ccp(95, 95);
        CGPoint pos2 = ccp(capSprite.position.x, capSprite.position.y);
        int offX = pos2.x-pos1.x;
        int offY = pos2.y-pos1.y;


        float angleRadians = atanf((float)offY/(float)offX);
        float angleDegrees = CC_RADIANS_TO_DEGREES(angleRadians);
        float theAngle = -1 * angleDegrees;
        sprite2.rotation = theAngle;

person skiboi38    schedule 15.07.2011    source источник


Ответы (2)


Я не знаком с cocos2d, но быстро просмотрел документацию, и этот пример может быть вам полезен:

   if keys[key.UP]:
       self.target.acceleration = (200 * rotation_x, 200 * rotation_y)

Я написал длинное объяснение, отвечая на ваш второй вопрос, но я считаю, что «self.target.acceleration» решает и это. Дополнительную информацию можно найти в документации по API cocos2d.

person sinisterstuf    schedule 15.07.2011

Что я обычно делаю, так это получаю угол, преобразовываю его в CGPoint с помощью ccpForAngle(float), а затем умножаю CGPoint на значение:

float angle = whatever;
CGPoint anglePoint = ccpForAngle(angle);
// You will need to play with the mult value
angle = ccpMult(angle, 2.5);
// This also works with box2D or probably Chipmunk.
sprite.position = angle;
person Aaron Goselin    schedule 16.07.2011