我尝试在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)];发布于 2015-04-15 07:35:06
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);
}
}https://stackoverflow.com/questions/29637665
复制相似问题