2016-03-18 3 views
1

Я работаю над игрой верхнего уровня, где есть два виртуальных джойстика для управления персонажем. Для джойстиков я использовал Spritekit-Joystick. Персонаж стреляет автоматически. Правый джойстик используется для изменения направления, и я реализовал эту функцию для перемещения персонажа:Как отрегулировать вращение SKSpriteNode

-(void)update:(CFTimeInterval)currentTime { 
    /* Called before each frame is rendered */ 
    if (self.imageJoystick.velocity.x != 0 || self.imageJoystick.velocity.y != 0) 
    { 
     myCharacter.zRotation = self.imageJoystick.angularVelocity; 
    } 

} 

Для self.imageJoystick.angularVelocity, библиотека Joystick использует этот код (код доступен по ссылке выше, но только для чтобы сделать вещи проще и доступнее):

angularVelocity = -atan2(thumbNode.position.x - self.anchorPointInPoints.x, thumbNode.position.y - self.anchorPointInPoints.y); 

Проблема с вращением. Когда я нажимаю джойстик (thumbnode) вверх, поворот направляется вправо. Я использовал NSLog для получения значения, и он показывает около 0. Когда я нажимаю джойстик (thumbnode выше) влево, символ указывает вверх, и я получаю около 1,5 показаний для angularVelocity. Нажатие вниз указывает на символ слева и дает показание -3. Наконец, когда я нажимаю вправо, я указываю персонажу на Юг и получаю около 1,5.

То же самое происходит с «пулями», которые я стреляю. Пока я использую лучи, на которых я нашел ответ в этом [POST] здесь 2. Я добавил его ниже для вашего удобства (не мой ответ, но я изменил его использовать в моей игре):

[[self childNodeWithName:@"RayBeam"]removeFromParent]; 
int x = myCharacter.position.x + 1000 * cos(myCharacter.zRotation); 
int y = myCharacter.position.y + 1000 * sin(myCharacter.zRotation); 

SKShapeNode* beam1 = [SKShapeNode node]; 
CGMutablePathRef pathToDraw = CGPathCreateMutable(); 
CGPathMoveToPoint(pathToDraw, NULL, myCharacter.position.x, myCharacter.position.y); 
CGPathAddLineToPoint(pathToDraw, NULL, x, y); 
beam1.path = pathToDraw; 
[beam1 setStrokeColor:[UIColor redColor]]; 
[beam1 setName:@"RayBeam"]; 
[self addChild:beam1]; 

Точную то же самое происходит. Когда я 1) нажимаем джойстик вверх, я стреляю вправо. 2) нажмите джойстик влево, я стреляю вверх. 3) нажмите вниз, я стреляю влево, и 4) когда я нажимаю джойстик вправо, я стреляю вниз.

Мне кажется, мне нужно подкрутить математические уравнения и уравнения тригонометрии, но математика не моя сильная сторона, и я относительно новичок в этом.

Изображение ниже представляет собой изображение игры (оно не завершено вообще), и вы можете видеть, что я подталкиваю, но я указываю и стреляю вправо.

enter image description here

Примечание: мой спрайт также указывают на права по умолчанию. Я попытался вращать все мои спрайты против часовой стрелки, и это работает с спрайтами, но не с лучом.

Я очень ценю вашу помощь.

Заранее спасибо.


ответ

1

Если до 0 radians является то необходимо вычислять ваш луча x и y с:

int x = myCharacter.position.x - 1000 * sin(myCharacter.zRotation); 
int y = myCharacter.position.y + 1000 * cos(myCharacter.zRotation); 
+0

Совершенная снова Дион! Большое спасибо за ваш ответ. – Septronic

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