首页 文章

iOS - SpriteKit:ApplyImpulse 不适用于 SKSpriteNode

提问于
浏览
1

我对 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 这样的空方法之外什么都没有。我错过了什么吗?我尝试了很多东西,我开始失去它哈哈

非常感谢您的帮助!

3 回答

  • 1

    这有点晚了,但答案就在这里:无法对 SKSpriteNode 物理体施加冲动

    问题是你用 bodyWithEdgeLoopFromRect 创建了一个物理体;这会创建一个静态物理主体,它不会响应 applyImpulse。您需要使用 bodyWithRectangleOfSize:添加物理主体。

  • 0
    pointOfView.physicsBody.dynamic = YES;
    

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

  • -1

    你写了错误的代码你的 pointOfView 不受重力影响你只是在它上面施加一个小的 impusle。

    将此行 self.physicsWorld.gravity = CGVectorMake(0.0,0.0)更改为 self.physicsWorld.gravity = CGVectorMake(0.0,-9.8);如果你正朝向上方寻找负重力并且 CGVectorMake(0.0,9.8)如果你寻找向下的正重力。并尝试在间隔后施加冲动[5];

相关问题