2013-09-24 5 views
1

У меня возникли трудности в понимании некоторых математике в следующем учебнике:Понимание метода CGPoint

Sprite Kit Tutorial

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

UITouch * touch = [touches anyObject]; 
CGPoint location = [touch locationInNode:self]; 

// 2 - Set up initial location of projectile 
SKSpriteNode * projectile = [SKSpriteNode spriteNodeWithImageNamed:@"projectile"]; 
projectile.position = self.player.position; 

// 3- Determine offset of location to projectile 
CGPoint offset = rwSub(location, projectile.position); 

где rwSub является

static inline CGPoint rwSub(CGPoint a, CGPoint b) { 
    return CGPointMake(a.x - b.x, a.y - b.y); 
} 

Я знаю, что этот код работает, но я не понимаю. Я попытался NSLogging точки касания и смещение точки, и они не образуют треугольник, как это показано на рисунке:

img

Это то, что я получил от моего выхода:

Touch Location 
X: 549.000000 Y: 154.000000 
Offset 
X: 535.500000 Y: -6.000000 

Это не создает вектор в правильном направлении ... но он все еще работает? Может ли кто-нибудь объяснить, как работает смещение?

+0

Оригинальное руководство включает ссылку на страницу по векторной математике. Вы читали это? – CodaFi

+0

Да, у меня есть. Я также сделал свои собственные расчеты. Я просто не понимаю выход по отношению к экрану. – EvilAegis

ответ

1

Смещение в этом случае просто представляет местоположение касания, связанного с персонажем, и позволяет вам узнать, куда будет направлен прицел.

В учебнике, на следующих строках вы можете увидеть:

// 4 - Bail out if you are shooting down or backwards 
    if (offset.x <= 0) return; 

В этом примере offset.x < 0 означает, что снаряд предназначается что-то за ниндзя на оси х, где 0 является й-координата персонаж.

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

2

Смещение - это разница от ниндзя, и точка, которую вы коснулись. Таким образом, вы вошли в систему, 535 очков вправо и 6 очков вниз (-6).

Таким образом, он идет в правильном направлении относительно игрока.

В учебнике также заставляет ниндзя звезды путешествовать закадровый, через

// 6 - Get the direction of where to shoot 
CGPoint direction = rwNormalize(offset); 

// 7 - Make it shoot far enough to be guaranteed off screen 
CGPoint shootAmount = rwMult(direction, 1000); 

// 8 - Add the shoot amount to the current position  
CGPoint realDest = rwAdd(shootAmount, projectile.position); 

Draw некоторые фотографии, это поможет вам понять.

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