【问题标题】:iOS - SpriteKit : ApplyImpulse not working on SKSpriteNodeiOS - SpriteKit:ApplyImpulse 在 SKSpriteNode 上不起作用
【发布时间】:2014-10-16 23:13:35
【问题描述】:

我是 SpriteKit 的新手,我在物理方面遇到了一些问题,我尝试了很多方法来使 SKSpriteNode 用力或冲动移动,但它从不移动,只有当我移动时重力会影响它设置它。

-(id)initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {

        self.anchorPoint = CGPointMake(0.5, 0.5);
        myWorld = [SKNode node];
        [self addChild:myWorld];

        SKSpriteNode* map = [SKSpriteNode spriteNodeWithImageNamed:@"grass"];
        [myWorld addChild:map];

        self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:map.frame];
        self.physicsBody.friction = 0.0f;
        self.physicsBody.categoryBitMask = 2;
        self.physicsWorld.gravity = CGVectorMake(0.0, 0.0);
        self.physicsWorld.contactDelegate = self;

        pointOfView = [SKSpriteNode spriteNodeWithColor:[UIColor colorWithWhite:1 alpha:0.2] size:CGSizeMake(300, 548)];
        [myWorld addChild:pointOfView];

        pointOfView.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:pointOfView.frame.size];
        pointOfView.physicsBody.friction = 0.0f;
        pointOfView.physicsBody.restitution = 1.0f;
        pointOfView.physicsBody.linearDamping = 0.0f;
        pointOfView.physicsBody.allowsRotation = NO;
        pointOfView.physicsBody.collisionBitMask = 2;
        pointOfView.physicsBody.categoryBitMask = 3;
        [pointOfView.physicsBody applyImpulse:CGVectorMake(10.0f, -10.0f)];
    }
    return self;
}

这是我的主要场景中的大部分代码,除了一些空方法,如 update 或 touchesBegan 之外,没有别的了。我错过了什么吗?我尝试了很多东西,我开始失去它了哈哈

非常感谢您的帮助!

【问题讨论】:

  • 您编写了错误的代码您的 pointOfView 不受重力影响您只是在其上施加了一个小推动力。

标签: ios objective-c sprite-kit skspritenode skphysicsbody


【解决方案1】:

有点晚了,答案就在这里:Not able to apply impulse to SKSpriteNode physics body

问题是你用 bodyWithEdgeLoopF​​romRect 创建了一个物理体;这将创建一个不会响应 applyImpulse 的静态物理体。您需要使用 bodyWithRectangleOfSize: 添加物理体。

【讨论】:

    【解决方案2】:
    pointOfView.physicsBody.dynamic = YES;
    

    动态属性决定了精灵是否应该受到物理力的影响。

    【讨论】:

    • 我已经尝试过了,但它不起作用.. :( 另外根据官方文档,此属性默认设置为是,因为我没有将其设置为否,我不需要指定它..
    【解决方案3】:

    您编写了错误的代码,您的 pointOfView 不受重力影响,您只是在其上施加了一个小推动力。

    将此行 self.physicsWorld.gravity = CGVectorMake(0.0, 0.0) 更改为 self.physicsWorld.gravity = CGVectorMake(0.0, -9.8);如果您正在寻找向上的负重力,如果您正在寻找向下的正重力,则为 CGVectorMake(0.0, 9.8)。并尝试在间隔后应用脉冲 [pointOfView.physicsBody applyImpulse:CGVectorMake(10.0f, -10.0f)];

    【讨论】:

    • 不幸的是,我不想将重力应用到我的节点上,相反我已经尝试过它并且它正在工作,什么不工作是你正在谈论的这个小推动力,节点根本不动..
    猜你喜欢
    • 1970-01-01
    • 2018-07-05
    • 2016-07-03
    • 2012-05-29
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多