为什么SKSpriteNode不响应applyForce或applyImpulse?

时间:2014-10-26 05:54:51

标签: ios objective-c sprite-kit skphysicsbody

我有一个精灵节点出现和下降,以响应其附加的physicsBody上的重力。

现在,我想使用applyForce将它向某个方向移动一点,同时它会下降。

不幸的是,无论我physicsBody.massphysicsWorld.gravity有多小,或applyForce向量有多大,applyForce向量似乎都会被忽略。< / p>

当我注释掉 self.physicsWorld.gravity 行时,我看到 applyForce 按预期工作

我如何实现&#34;推动&#34;应用重力时使用applyForce的物理体?


这是我的.h

// GameScene.h


#import <SpriteKit/SpriteKit.h>

@interface GameScene : SKScene

@end

而.m

// GameScene.m

#import "GameScene.h"

@interface GameScene ()
@property NSMutableArray *bubblesToPop;

@end

@implementation GameScene

-(void)didMoveToView:(SKView *)view {
    /* Setup your scene here */

    self.size = view.bounds.size;
    self.physicsWorld.gravity = CGVectorMake(0, 1.0);

    SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"bubble"];

    sprite.yScale = 0.5;
    sprite.xScale = 0.5;
    sprite.name = @"bubble";
    sprite.position = CGPointMake(self.frame.size.width / 2.0, self.frame.size.height / 2.0);

    SKPhysicsBody *physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:sprite.frame.size.width];
    physicsBody.mass = 0.02;
    [physicsBody applyForce:CGVectorMake(900, 900)];
    sprite.physicsBody = physicsBody;

    [self addChild:sprite];

}

@end

1 个答案:

答案 0 :(得分:5)

在Sprite Kit确定力如何影响它之前,身体需要在场景中。在applyForce到场景后,需要对物理机构进行addChild调用。

来自Apple的文档:

  

Sprite Kit中的物理模拟是通过向场景添加物理实体来执行的。物理主体是模拟的物理对象   连接到场景节点树中的节点。它使用节点的节点   位置和方向将自己置于模拟......每一次   场景计算新的动画帧,它模拟效果   连接到节点的物理主体上的力和碰撞   树。它计算最终位置,方向和速度   每个物理机构。然后,场景更新位置和旋转   每个相应节点[强调添加]。

此外,外部因素有助于物理机构受力的影响。例如,在计算应用于物理主体的净力时,必须考虑重力,碰撞和力场(iOS 8)。因此,在Sprite Kit可以确定力如何影响它之前,身体需要在场景中。