我正在尝试制作一个游戏,其中我有一些 SKSpriteNode,并且用户可以通过手指移动来击中它们,我正在使用苹果的新 Sprite 套件。
为此,我尝试了一个技巧 - 将 Sprite - “X”(SKSpriteNode)放置在手指所在的位置,当用户移动手指时 - 更改此 X sprite 的位置,
问题是它只有在不运动时才会撞击其他精灵,我希望其他精灵能够响应移动手指的当前速度 - 手指移动越快 - 碰撞应该越强烈。
你能帮我一下吗?
-
虽然我觉得这个技巧不是正确的方法,但我也发布了代码。
-(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];
}
经过一番查找和实验,终于有了答案!
解决方案的第一步是由阿亚图拉安迪- 寻找撞击点:
SKNode *node = [self nodeAtPoint:location];
这一行获取我们在指定位置命中的节点,如果它返回 nil 则说明我们没有命中任何内容。
其次-我们想要“击中”物体,因此我们需要ApplyImpulse:
[node.physicsBody applyImpulse:CGVectorMake(thrustV.x, thrustV.y) atPoint:location];
在这里你可以看到我用在撞击点创建的一些矢量应用了脉冲,
就是这样 - 非常简单,我希望这对其他人有帮助。
分享就是关怀,
感谢您花时间阅读我的帖子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)