iOS SpriteKit使精灵随机移动,并在空间中发生碰撞

iOS SpriteKit使精灵随机移动,并在空间中发生碰撞,ios,sprite-kit,Ios,Sprite Kit,我是SpriteKit的新手,我对SKPhysicsBody有一点了解 所以第一个任务是让我的所有屏幕都像一个“盒子”,在那里我的所有精灵都会随机移动。所以,我的屏幕精灵的一些侧面必须改变方向,移动到另一个位置。我需要空间碰撞之类的东西,当精灵永不停止的时候 我发现了一些与冲突相关的代码 正如我所理解的,这部分代码解决了我的第一个任务: self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];

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

所以第一个任务是让我的所有屏幕都像一个“盒子”,在那里我的所有精灵都会随机移动。所以,我的屏幕精灵的一些侧面必须改变方向,移动到另一个位置。我需要空间碰撞之类的东西,当精灵永不停止的时候

我发现了一些与冲突相关的代码

正如我所理解的,这部分代码解决了我的第一个任务:

    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];

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

您必须使用力和速度而不是
SKActions
来移动精灵。您还必须设置
恢复
线性阻尼
摩擦
等属性,以防止碰撞和移动时速度损失

sprite.physicsBody?.restitution = 1.0
sprite.physicsBody?.friction = 0.0
sprite.physicsBody?.linearDamping = 0.0
您可以对每个
精灵应用随机力

// randomX and randomY are two random numbers.
sprite.physicsBody?.applyForce(CGVectorMake(randomX, randomY))
精灵还需要
类别比特掩码
冲突比特掩码
。每个精灵可以相互碰撞或与边缘碰撞

sprite.categoryBitMask = spriteCategory
sprite.collisionBitMask = spriteCategory | edgeCategory 
恢复:此属性用于确定物理体从另一个对象反弹时损失的能量。这个 属性必须是介于0.0和1.0之间的值。默认值为 0.2. 可用性

摩擦:物理体表面的粗糙度。此属性用于在物理体上施加摩擦力 与这个物理体接触。属性的值必须介于 0.0和1.0。默认值为0.2

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


你到底在问什么?@sangony,这就像当你摇动盒子里的东西时,你可以看到所有的物体都在相互作用,就像在现实生活中一样,我的意思是,在游戏盒子里应该是我的屏幕,所有的物体都朝着不同的方向移动,并且在发生碰撞后,那么我的物体应该改变一个方向,因为physicI建议你试试:1。关闭重力。2) 使用CGVector make移动节点。3) 将恢复设置为1.0或接近该值。这应该会给你一个很好的展示。谢谢你的详细回答,但我添加了所有东西,但我的对象都在同一个地方。我把它放在哪里了。所以不是精灵的行动。我想它应该移动。但事实并非如此。这是我的代码。我想问题是我在将精灵添加到场景之前添加了applyForce方法。我还注意到速度根据精灵的大小而不同,如何忽略它?尝试将
sprite.physicsBody?.mass
设置为相同的值。仅当我调整大小时,mass对我不起作用。此外,如何使精灵在检测到碰撞时具有旋转