如何在Sprite Kit,Objective C中用手指移动物体

Eki*_*ing 2 objective-c sprite ios ios7 sprite-kit

我正在尝试制作一个游戏,其中我有一些SKSpriteNodes,用户可以用手指移动它们,我正在使用苹果的新Sprite Kit.

为此,我尝试了一个技巧 - 放置一个Sprite - 手指所在的"X"(SKSpriteNode),当用户移动手指时 - 改变这个X精灵的位置,

问题是,只有当它没有运动时它才能击中其他精灵,我希望其他精灵响应移动手指的当前速度 - 手指运动越快 - 碰撞应该越强.

你能帮帮我吗?

  • 虽然我觉得诀窍不是正确的方法,但我也在发布代码.

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        if([touches count]==1)
        {
            self.X= [[SKSpriteNode alloc]initWithImageNamed:@"X"];
            self.X.name= @"X";
            UITouch *t= touches.allObjects[0];          
    
            self.X.position= [t locationInNode:self.GameNode];
            self.X.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:20];
            self.X.physicsBody.dynamic=YES; // Tried NO too...
            self.X.zPosition=1;
    
            [self.GameNode addChild:self.X];
        }
    }
    -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UITouch *t = touches.allObjects[0];
        self.X.position = [t locationInNode:self.GameNode];
    }
    -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    {
        [self.X removeFromParent];
    }
    
    Run Code Online (Sandbox Code Playgroud)

Eki*_*ing 8

经过搜索和大量实验,我终于得到了答案!

该解决方案的第一步由AyatollahAndy提供- 找到影响点:

SKNode *node = [self nodeAtPoint:location];
Run Code Online (Sandbox Code Playgroud)

此行获取我们在指定位置点击的节点,如果它返回nil,则我们没有点击任何内容.

其次 - 我们想要"击中"对象,因此我们需要ApplyImpulse:

[node.physicsBody applyImpulse:CGVectorMake(thrustV.x, thrustV.y) atPoint:location];
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到我用一些我在碰撞点创造的矢量来应用冲动,就是这样 - 非常直接,我希望这会有助于其他人.

分享是关怀,感谢您花时间阅读我的帖子.