【发布时间】:2014-07-12 20:11:56
【问题描述】:
我正在 Sprite Kit 中制作一个简单的太空射击游戏。我有随机添加到场景中的小行星岩石精灵。我给他们一个一定范围内的随机速度。但是,一旦添加到场景中,它们的速度就会每秒降低,最终它们会停止。当它们靠近屏幕底部时,它们的速度会以较慢的速度下降。我将物理世界的重力设置为 (0,0)。
下面是给场景添加石头的方法
- (void)addRock {
SPRockNode *rock = [SPRockNode rock];
float dy = [SPUtil randomWithMin:SPRockMinSpeed max:SPRockMaxSpeed];
rock.physicsBody.velocity = CGVectorMake(0, -dy);
float y = self.frame.size.height + rock.size.height;
float x = [SPUtil randomWithMin:10 + rock.size.width max:self.frame.size.width - 10 - rock.size.width];
rock.position = CGPointMake(x, y);
[self addChild:rock];
}
我在我的场景 initWIthSize 方法中设置了物理世界
self.physicsWorld.contactDelegate = self;
self.physicsWorld.gravity = CGVectorMake(0, 0);
下面是我的摇滚节点类的代码
+ (instancetype)rock {
SPRockNode *rock = [self spriteNodeWithImageNamed:@"rock"];
rock.name = @"Rock";
float scale = [SPUtil randomWithMin:50 max:100] / 100.0f;
rock.xScale = scale;
rock.yScale = scale;
NSInteger randomInt = [SPUtil randomWithMin:1 max:3];
if (randomInt == 1) {
SKAction *oneRevolution = [SKAction rotateByAngle:-M_PI*2 duration: 1.0];
SKAction *repeat = [SKAction repeatActionForever:oneRevolution];
[rock runAction:repeat];
} else {
SKAction *oneRevolution = [SKAction rotateByAngle:M_PI*2 duration: 1.0];
SKAction *repeat = [SKAction repeatActionForever:oneRevolution];
[rock runAction:repeat];
}
[rock setupPhysicsBody];
return rock;
}
- (void)setupPhysicsBody {
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.frame.size];
self.physicsBody.affectedByGravity = NO;
self.physicsBody.categoryBitMask = SPCollisionCategoryRock;
self.physicsBody.collisionBitMask = 0;
self.physicsBody.contactTestBitMask = SPCollisionCategoryProjectile | SPCollisionCategoryShip;
}
关于是什么导致他们减速的任何想法?除了 addRock 方法,我不会在其他任何地方修改它们的速度。默认情况下是否有空气阻力或类似的东西?我只是不明白为什么他们的速度正在下降。
【问题讨论】:
标签: ios objective-c sprite-kit velocity