2014-10-14 2 views
4

Я разрабатываю игру с использованием Sprite-Kit (Objective-C). Это игра, в которой вы управляете птицей в полете, а стрелки и другие плохие снаряды стреляют в вас с правой/верхней/нижней сторон экрана. Я использую физику вместо SKAction, чтобы выполнить это, поскольку я хочу, чтобы она казалась как можно более жизнеспособной. Поэтому я знаю, как использовать Impulse на снаряде, чтобы стрелять в него по птице, но мне интересно, как можно гарантировать, что снаряд будет расстрелян прямо у птицы, независимо от положения y-птицы и y-позиционирования снаряда до применения Impulse?Sprite Kit - Применить Импульс, чтобы стрелять снарядом на персонажа

У меня очень расстраивающее время для этого, поэтому любая помощь по этому вопросу будет принята с благодарностью. Благодарю.

ответ

8

Основных шаги

  1. Вычислить компоненты вектора от снаряда ракеты-носителя к птице
  2. Нормализации компоненты (опция)
  3. Создать вектор масштабирования (нормированные) компонент
  4. Применить импульс к снаряду с использованием вектора

Вот пример того, как это сделать

Obj-C

// Calculate vector components x and y 
CGFloat dx = bird.position.x - launcher.position.x; 
CGFloat dy = bird.position.y - launcher.position.y; 

// Normalize the components 
CGFloat magnitude = sqrt(dx*dx+dy*dy); 
dx /= magnitude; 
dy /= magnitude; 

// Create a vector in the direction of the bird 
CGVector vector = CGVectorMake(strength*dx, strength*dy); 

// Apply impulse 
[projectile.physicsBody applyImpulse:vector]; 

Свифта

// Calculate vector components x and y 
var dx = bird.position.x - launcher.position.x 
var dy = bird.position.y - launcher.position.y 

// Normalize the components 
let magnitude = sqrt(dx*dx+dy*dy) 
dx /= magnitude 
dy /= magnitude 

// Create a vector in the direction of the bird 
let vector = CGVector(dx:strength*dx, dy:strength*dy) 

// Apply impulse 
projectile.physicsBody?.applyImpulse(vector) 
+0

как я могу gaurentee скорость снаряда всегда то же самое, а? –

+1

Если сила такая же, скорость должна быть одинаковой. Вот почему я нормализовал компоненты вектора. – 0x141E

+0

@ 0x141E Вы имели ввиду sqrt вместо сортировки? Это, вероятно, опечатка ... – Whirlwind

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