2013-09-29 5 views
0

У меня есть tilemap (KKTilemapNode Kobald Kit) и персонаж посередине, теперь я использую джойстик, чтобы переместить tilemap вверх и вниз и вычислить скорость, проблема у меня в том, что если я поверню символ влево, он все еще остается вверх и вниз, поскольку я не знаю, как вычислить новую позицию под углом. Я попытался перенести несколько примеров флэш, но те, которые я нашел не плитка карты :(Вождение вычислений с использованием SpriteKit

Edit (добавление источника):

rotationStep = (_velocity.x/20); // Rotate the car by 

if (fabs(_speed) > 0.3) { 
    _carRotation -= (rotationStep * (_speed/maxSpeed)); // Rotation angle if speed is at least 0.3 
} 

CGFloat speedX = ((_carRotation * (M_PI/180)) * _speed); // Calculation stolen from the flash game and probably changed over tooo much 
CGFloat speedY = ((_carRotation * (M_PI/180)) * _speed); 

CGFloat rotationValue = (degreesToRadians(_carRotation)); // Getting radians for the rotation 

if (_velocity.x != 0 || _velocity.y != 0) { 
    _car.zRotation = rotationValue; // Setting correct rotation 
} 

NSLog(@"Speed X: %f - Y: %f", speedX, speedY); // Getting probably very incorrect values 

[_track setPosition:CGPointMake(5, (_track.position.y - _speed))]; // And moving the tile map just up and down in the end based on a speed I have calculated earlier 
+1

Пожалуйста, разместите код для нас, чтобы посмотреть. – WolfLink

+0

Надеюсь, ты увидишь, как я отчужден от кода ... там, и мои математические навыки ужасны :( – Ondrej

ответ

1

Один из способов вычислить угол:

float angle = atan2f (touchY - joystickY, touchX - joystickX); 

, где touchY и touchX - координаты того, где игрок касался джойстика , а джойстик и джойстик X - координаты джойстика. Чтобы переместить узел под этим углом с помощью SKAction (вы можете не использовать действия, но можете все еще используют математику для вычисления поздние координаты места назначения):

SKAction *moveWhatever = [SKAction moveByX: yourDistance*cosf(angle) y:yourDistance*sinf(angle) duration:yourDuration]; 
[node runAction: moveWhatever]; 

где вы установили yourDistance и yourDuration.

Смежные вопросы