无法对 SKSpriteNode 物理体施加脉冲

Posted

技术标签:

【中文标题】无法对 SKSpriteNode 物理体施加脉冲【英文标题】:Not able to apply impulse to SKSpriteNode physics body 【发布时间】:2014-01-16 13:50:55 【问题描述】:

我是 xcode 的 sprite kit 的新手,我正在尝试对 SKSpriteNode's 物理体施加冲动。 以下是我创建场景的方式:

self.backgroundColor = [SKColor colorWithRed:0 green:0 blue:0 alpha:1.0];
        self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
        self.physicsBody.friction = 0.0f;
        self.physicsWorld.gravity = CGVectorMake(0.0f, 0.0f);
        ballCategory = 1;
        wallCategory = 2;
        self.physicsBody.categoryBitMask = wallCategory;

以下是我创建播放器并赋予其冲动的方式:

player = [SKSpriteNode spriteNodeWithImageNamed:filePath];
    player.size = CGSizeMake(100, 100);
    player.position = CGPointMake(150, 250);
    player.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:player.frame];
    player.physicsBody.categoryBitMask = ballCategory;
    player.physicsBody.collisionBitMask = wallCategory;
    player.physicsBody.friction = 0.0f;
    player.physicsBody.restitution = 1.0f;
    player.physicsBody.linearDamping = 0.0f;
    player.physicsBody.allowsRotation = NO;
    [self addChild:player];
        CGVector impulse = CGVectorMake(100,100);
        [player.physicsBody applyImpulse:impulse];

由于我一直在完美地遵循 iOS 开发人员库 Sprite Kit 编程指南,我有什么明显的遗漏吗?提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

您正在将玩家的 PhysicsBody 创建为边缘体 - 这些始终是静态的(不会因力/脉冲而移动)。您应该将该行更改为:

player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:player.frame.size];

这个例子使它成为一个基于矩形的动态体积,它会受到物理力的影响。您可以阅读物理体的类型here。

【讨论】:

以上是关于无法对 SKSpriteNode 物理体施加脉冲的主要内容,如果未能解决你的问题,请参考以下文章

SKSpriteNode 失去了它的物理体属性

在 SpriteKit 中禁用 SKNode 的旋转

使用物理 SKSpriteNode 子级暂停 SpriteKit 游戏

快速测试节点是不是附加到物理体

在 SKScene 中间保留一个物理体?

如何加入两个碰撞的 SKSpriteNode