2015-01-19 5 views
0

Я пытаюсь переместить спрайт с узла «съемки» на сцену до динамической, но известной точки на сцене, используя дугу.Переместить спрайт вдоль дуги, используя UIBezierPath

Для контекста это игра обороны башни, и это «ступка» башни.

Я использую SpriteKit и Objective-C. Я относительно новичок в кодировании, но я довольно далеко позади, поэтому я хорошо разбираюсь в вещах, это было очень давно, поскольку я использовал тригонометрию, и я страдаю UIBezierPath.

Вот отрывок из моего кода:

CGPoint cannonPointOnScene = [self.scene convertPoint:self.position fromNode:self.parent]; 
CGPoint originPoint = CGPointMake(realDest.x - cannonPointOnScene.x, realDest.y - cannonPointOnScene.y); 
float angle = atan2f(originPoint.y, originPoint.x); 

UIBezierPath *testPath = [[UIBezierPath alloc] init]; 
[testPath addArcWithCenter:CGPointMake(self.position.x , self.position.y) radius:10.0 startAngle:0.0 endAngle:angle clockwise:YES]; 

SKAction *actionMove = [SKAction followPath:[testPath CGPath] speed:self.projectileSpeed]; 
     SKAction * actionMoveDone = [SKAction removeFromParent]; 
SKAction* fire = [SKAction sequence:@[actionMove, actionMoveDone]]; 

Используя этот код, я просто получить мой снаряд появляясь в одном месте, достаточно далеко от узла башни, а затем удаляется со сцены.

Заранее благодарен!

+0

Что вы имеете в виду, вращаясь вокруг в одном месте? Спрайт просто вращается на месте? он делает любую дугу? – hamobi

+0

Нулевой движения дуги. Снаряд добавлен в сцену довольно далеко от съемочного узла и вообще не движется. Редактирование оригинала, поскольку слово spinning вводит в заблуждение. – Revick

+0

Я видел что-то подобное в видео WWDC, 'CGPathRef p = [SKShapeNode shapeNodeWithSplinePoints: количество очков: len]; [node runAction: [SKAction followpath: p]; –

ответ

1

Я не могу комментировать, поэтому я не могу попросить дополнительную информацию, прежде чем пытаться дать ответ, но я все же думаю, что могу помочь.

Я не могу сказать по вашим переменным, как именно вы строите путь по отношению к вашим спрайтам, но первое, что я предлагаю, - увеличить радиус до 100.0 или 200.0, чтобы увидеть, что происходит. 10.0 - довольно маленький радиус. Шаблонная играScene имеет ширину 1024 точки, 10,0 балла составляет менее 1%.

Путь, который вы создаете, представляет собой часть круга, сосредоточенную вокруг «self.position» с радиусом 10 баллов.

  • self.position - «одно место, довольно далеко от узла башни». Это может также зависеть от вашего пространства координат, но похоже, что вы учли это с точкой конвертации.
  • Радиус 10,0 и пусковой угол 0.0 означают, что ваш снаряд начинается 10 очков справа от self.position
  • Я не знаю, что ваш угол конца, но по часовой стрелке, чтобы установить YES вы рисуя нижнюю половину круга. 3 часа до конца.

Учитывая ваше описание и предполагая, что мы просто использовать сцены координатного пространства, я думаю:

  • центр должен быть точкой точно между цементным раствором и его цели.
  • радиус должен быть на половину расстояния между раствором и его цель.
  • startAngle должен быть M_PI, если вы стреляете слева направо и 0.0, если вы стреляете справа налево.
  • endAngle должно быть между 0.0 и M_PI.
  • по часовой стрелке должно быть ДА, если вы стреляете влево и вправо, а если вы стреляете справа налево.

Вышеупомянутые рекомендации предполагают много о том, как функционирует ваша игра, и очень маловероятно, что все это работает, но, надеюсь, это дает вам хорошее представление о том, с чего начать.