我正在尝试使用spritekit中的物理学在一个弧形中移动一个SKSpriteNode,如下所示:
但我不确定应该应用哪种物理(applyImpulse,applyForce,applyTorque)。
目前使用applyTorque,代码实际上不起作用,并且不会在对象上产生任何移动:
_boy.physicsBody.velocity = CGVectorMake(1, 1);
CGVector thrustVector = CGVectorMake(0,100);
[_boy.physicsBody applyTorque:(CGFloat)atan2(_boy.physicsBody.velocity.dy, _boy.physicsBody.velocity.dx)];
答案 0 :(得分:0)
applyTorque
不是正确的方法。扭矩是一种扭转力,使您的节点围绕其中心点旋转。
对于您要做的事情,没有一个简单的命令。您也没有提到您的节点的移动方法。施加力量,冲动等等......你将不得不为这个做出一个黑客攻击。
下面的示例项目可以满足您的需求,它将为您指明正确的方向。您将不得不修改代码以满足您特定项目的需求。
点击/单击屏幕一次以开始移动节点,再次点击/单击屏幕以开始90度移动更改。
#import "GameScene.h"
@implementation GameScene {
int touchCounter;
BOOL changeDirection;
SKSpriteNode *node0;
}
-(void)didMoveToView:(SKView *)view {
self.backgroundColor = [SKColor whiteColor];
node0 = [SKSpriteNode spriteNodeWithColor:[SKColor grayColor] size:CGSizeMake(50, 50)];
node0.position = CGPointMake(150, 200);
node0.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:node0.size];
node0.physicsBody.affectedByGravity = NO;
[self addChild:node0];
touchCounter = 0;
changeDirection = NO;
}
-(void)update:(CFTimeInterval)currentTime {
if(changeDirection)
[self changeMovement];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
touchCounter++;
for (UITouch *touch in touches) {
if(touchCounter == 1)
[node0.physicsBody applyImpulse:CGVectorMake(25, 0)];
if(touchCounter == 2)
changeDirection = YES;
}
}
-(void)changeMovement {
if(node0.physicsBody.velocity.dy<200) {
[node0.physicsBody applyImpulse:CGVectorMake(-0.1, 0.1)];
} else {
changeDirection = NO;
node0.physicsBody.velocity = CGVectorMake(0, node0.physicsBody.velocity.dy);
}
}