了解CGPoint方法

时间:2013-09-24 03:22:13

标签: objective-c geometry cgpoint sprite-kit

我无法理解以下教程中的一些数学知识:

Sprite Kit Tutorial

我不确定如何理解偏移量。在本教程的大约一半时,Ray使用以下代码:

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

这不会以正确的方向形成矢量..但它仍然有效吗? 有人能够解释偏移的工作原理吗?

2 个答案:

答案 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);

画一些图片,它会帮助你理解。

答案 1 :(得分:1)

在这种情况下,偏移仅表示与角色相关的触摸位置,并允许您知道射弹的目标位置。

在本教程中,您可以在下一行看到:

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

在这个示例中,offset.x < 0表示射弹的目标是x轴上忍者背后的东西,其中0是角色的x坐标。

这里的想法是在角色自己的参考中翻译射弹的目标坐标,以更好地理解彼此的位置。