Я работаю над игрой верхнего уровня, где есть два виртуальных джойстика для управления персонажем. Для джойстиков я использовал 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) когда я нажимаю джойстик вправо, я стреляю вниз.
Мне кажется, мне нужно подкрутить математические уравнения и уравнения тригонометрии, но математика не моя сильная сторона, и я относительно новичок в этом.
Изображение ниже представляет собой изображение игры (оно не завершено вообще), и вы можете видеть, что я подталкиваю, но я указываю и стреляю вправо.
Примечание: мой спрайт также указывают на права по умолчанию. Я попытался вращать все мои спрайты против часовой стрелки, и это работает с спрайтами, но не с лучом.
Я очень ценю вашу помощь.
Заранее спасибо.
Совершенная снова Дион! Большое спасибо за ваш ответ. – Septronic