Как переместить спрайт под определенным углом с помощью джойстика
Привет, я наконец-то сделал рабочий джойстик в cocos2d. Я могу повернуть спрайт на точный угол, на который указывает "джойстик" или крышка. Однако я не могу переместить спрайт в том же направлении. Есть ли простой способ переместить спрайт так, как я настроил вращающийся код? Также есть ли способ сохранить движение, если большой палец все еще нажат, но джойстик не двигается? PS этот код все в методе TouchesMoved. PPS. крышка - это большой палец, панель - это фон джойстика, а 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;
2 ответа
Обычно я получаю угол, конвертирую его в 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;
Я не знаком с cocos2d, но я быстро просмотрел документацию, и этот пример может быть вам полезен:
if keys[key.UP]:
self.target.acceleration = (200 * rotation_x, 200 * rotation_y)
Я написал длинное объяснение, отвечая на ваш второй вопрос, но я верю, что это "self.target.acceleration" и это решает. Вы можете прочитать больше в документации по cocos2d API.