【问题标题】:Sprite Kit: Prevent SKSpriteNode From Gliding AroundSprite Kit:防止 SKSpriteNode 滑动
【发布时间】:2014-05-03 00:17:26
【问题描述】:

我正在使用 SpriteKit 为 OS X 开发宇宙飞船游戏。这就是我为我的飞船节点设置physicsBody 的方式。

// SKSpriteNode
ship.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:triangle];

ship.physicsBody.categoryBitMask = playerCategory;
ship.physicsBody.contactTestBitMask = enemyCategory | edgeCategory;
ship.physicsBody.collisionBitMask = enemyCategory | edgeCategory;

ship.physicsBody.allowsRotation = NO;
ship.physicsBody.dynamic = YES;
ship.physicsBody.linearDamping = 0;
ship.physicsBody.angularDamping = 0.1;
ship.physicsBody.mass = 0.1;
ship.physicsBody.restitution = 0;

这就是我在场景文件中设置physicsWorld 和physicsBody 的方式。

// SKScene
self.physicsWorld.contactDelegate = self;
self.physicsWorld.gravity = CGVectorMake(0, 0);

self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
self.physicsBody.categoryBitMask = edgeCategory;
self.physicsBody.contactTestBitMask = missileCategory | enemyCategory | playerCategory;
self.physicsBody.collisionBitMask = playerCategory;

self.physicsBody.restitution = 0;

在我场景的update 方法中,我调用[ship accelerate:@"up"];,它最终调用了这个。

[self.physicsBody applyForce:CGVectorMake(self.engineThrust * cosf(self.shipOrientation),
                                          self.engineThrust * sinf(self.shipOrientation))];

有没有办法禁用飞船的惯性?我不希望我的船沿着我的场景滑行。我希望船一松开钥匙就停止移动。我还希望船在向上箭头和向下箭头之间切换时立即改变方向。

physicsBody 中是否有一些我可以更改或必须实施的内容?

【问题讨论】:

    标签: sprite-kit osx-mavericks skspritenode skphysicsbody


    【解决方案1】:

    您可以使用ship.physicsBody.velocity = CGVectorMake(0,0); 停止任何惯性

    【讨论】:

    • 我尝试在我的加速方法中添加它作为第一行,但它确实搞砸了船的移动方式。这不是一个放置它的好地方。
    • @425nesp - 不知道你的意思。将速度设置为 0,0 会停止所有 x 和 y 轴移动。
    • 在调用[ship accelerate:@"up"] 之前,我最终在update 函数中执行了ship.physicsBody.velocity = CGVectorMake(0,0)。我还调高了engineThrust,否则船几乎不会动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    相关资源
    最近更新 更多