首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spritekit:用SKPhysicsBody在弧线上移动SKSpritekitNode

Spritekit:用SKPhysicsBody在弧线上移动SKSpritekitNode
EN

Stack Overflow用户
提问于 2015-04-15 05:24:21
回答 1查看 326关注 0票数 1

我尝试在spritekit中使用物理在弧线中移动一个SKSpriteNode,如下所示:

但是我不确定我应该使用哪种物理疗法(applyImpulse,applyForce,applyTorque)。

当前使用applyTorque时,代码实际上并不工作,并且不会在对象上产生任何移动:

代码语言:javascript
复制
_boy.physicsBody.velocity = CGVectorMake(1, 1);
CGVector thrustVector = CGVectorMake(0,100);
[_boy.physicsBody applyTorque:(CGFloat)atan2(_boy.physicsBody.velocity.dy, _boy.physicsBody.velocity.dx)];
EN

回答 1

Stack Overflow用户

发布于 2015-04-15 07:35:06

applyTorque不是解决这个问题的正确方法。扭矩是一种使节点围绕其中心点旋转的扭转力。

对于你想要做的事情,没有一个简单的命令。您也没有提到您的节点的移动方法。施加力量、冲动等你得想出一个解决这个问题的办法。

下面的示例项目做了您正在寻找的事情,它将为您指明正确的方向。不过,您必须修改代码以适应特定项目的需要。

轻拍/单击屏幕一次开始移动节点,第二次轻拍/单击屏幕开始90度移动更改。

代码语言:javascript
复制
#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);
    } 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29637665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档