iOS SpriteKit随机移动精灵和类似空间碰撞的东西

时间:2015-03-03 12:01:04

标签: ios sprite-kit

我是SpriteKit的新手,我对SKPhysicsBody了解一点。

所以首要任务是让我的所有屏幕都像一个"框"我所有的精灵都会随意移动。因此,获取我的屏幕精灵的某些方面必须改变方向并移动到另一个位置。当精灵从未停止时,我需要像空间碰撞这样的东西。

我找到了一些与碰撞相关的代码here

据我所知,这部分代码解决了我的第一个任务:

    self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
    self.physicsBody.categoryBitMask = edgeCategory;
    self.physicsBody.collisionBitMask = 0;
    self.physicsBody.contactTestBitMask = 0;
    self.physicsWorld.gravity = CGVectorMake(0,0);
    self.physicsWorld.contactDelegate = self;

另一个任务方向,我想对我所有的精灵使用这个:

 SKAction *moveAction = [SKAction moveByX:randomX y:randomY duration:.1];   
 SKAction *repeatingAction = [SKAction repeatActionForever:moveAction];

但我认为它会在尝试检测colision时卡住,所以我需要再次更改moveBy值,但我想我可以初始化运动然后可以将这项艰苦的工作留给碰撞检测,所以问题是如何在这种情况下启动运动?

1 个答案:

答案 0 :(得分:2)

你必须使用力和速度而不是SKActions来移动精灵。您还必须设置restitutionlinearDampingfriction等属性,以防止碰撞和移动速度的丢失。

sprite.physicsBody?.restitution = 1.0
sprite.physicsBody?.friction = 0.0
sprite.physicsBody?.linearDamping = 0.0

您可以对每个sprite应用随机力量。

// randomX and randomY are two random numbers.
sprite.physicsBody?.applyForce(CGVectorMake(randomX, randomY))

精灵还需要categoryBitMaskcollisionBitMask。每个精灵可以相互碰撞或碰撞。

sprite.categoryBitMask = spriteCategory
sprite.collisionBitMask = spriteCategory | edgeCategory 
  

恢复原状:此属性用于确定物理体在从另一个物体反弹时失去多少能量。该   property必须是介于0.0和1.0之间的值。默认值为   0.2。可用性

     

摩擦:物理体表面的粗糙度。该属性用于向物理实体施加摩擦力   联系这个物理机构。该属性必须是介于两者之间的值   0.0和1.0。默认值为0.2。

     

linearDamping :降低身体线速度的属性。该属性用于模拟流体或空气摩擦   对身体的力量。该属性必须是介于0.0和1.0之间的值。   默认值为0.1。如果值为0.0,则没有线性阻尼   应用于对象。