物理世界和物理體
1.設(shè)置碰撞代理和物理世界
2.設(shè)置精靈的物理體
一结笨、物理世界
第一步要先添加協(xié)議
@interface GameScene ()<SKPhysicsContactDelegate>
@end
設(shè)置物理世界
-(void)didMoveToView:(SKView *)view {
//物理世界(physicsWorld)碰撞代理設(shè)置為self
self.physicsWorld.contactDelegate = self;
//物理世界(physicsWorld)重力設(shè)置為0
self.physicsWorld.gravity = CGVectorMake(0, 0); //這里也可以不用設(shè)置重力為0啦租,而設(shè)置精靈比如plane的plane.physicsBody.affectedByGravity = NO 就可以讓精靈不受重力影響
//后面接上以前寫(xiě)的代碼
}
二、精靈
plane(其他代碼就不寫(xiě)了)
//plane的物理體設(shè)置
plane.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:plane.size];
//下面這行代碼是設(shè)置plane不受旋力影響,就是不會(huì)被撞歪的意思
//plane.physicsBody.allowsRotation = NO;
//plane物理體的碰撞標(biāo)志符為1
plane.physicsBody.categoryBitMask = 1;
//plane可以和標(biāo)志符為2的精靈碰撞
plane.physicsBody.contactTestBitMask = 2;
bullet
//同樣設(shè)置enemy的物理體
bullet.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:bullet.size];
//enemy同樣不受旋力影響
//bullet.physicsBody.allowsRotation = NO;
//enemy物理體的碰撞標(biāo)志符為3
bullet.physicsBody.categoryBitMask = 3;
//enemy可以和標(biāo)志符為2的精靈碰撞
bullet.physicsBody.contactTestBitMask = 2;
enemy(這里的 1|3 意思可以理解為 1或者3)
//同樣設(shè)置enemy的物理體
enemy.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:enemy.size];
//enemy同樣不受旋力影響
//enemy.physicsBody.allowsRotation = NO;
//enemy物理體的碰撞標(biāo)志符為1
enemy.physicsBody.categoryBitMask = 2;
//enemy可以和標(biāo)志符為1和3的精靈碰撞
enemy.physicsBody.contactTestBitMask = 1|3;
三、碰撞方法
-(void)didBeginContact:(SKPhysicsContact *)contact {
//contact.bodyA.categoryBitMask == 2或者contact.bodyA.categoryBitMask == 3 2、3對(duì)應(yīng)著enemy和bullet
if (contact.bodyA.categoryBitMask == 2|contact.bodyA.categoryBitMask == 3 && contact.bodyB.categoryBitMask == 3|contact.bodyB.categoryBitMask == 2) {
//移除碰撞的物理體
[contact.bodyA.node removeFromParent];
[contact.bodyB.node removeFromParent];
}
}
注意事項(xiàng)
1.添加協(xié)議
2.物理世界碰撞代理設(shè)置為self
3.精靈的物理體
4.categoryBitMask和categoryBitMask
5.2|3 意思可以理解為 2或3
6.文章沒(méi)有提到dynamic這個(gè)屬性因?yàn)榕鲎仓缶`沒(méi)有其它動(dòng)作了直接移除震捣,如果像是酷跑那樣的落到一個(gè)平臺(tái)上面就必須要設(shè)置dynamic為YES,否則兩個(gè)不受力的精靈移到一起會(huì)直接穿過(guò)去
7.因?yàn)檫@里的碰撞之后移除精靈所以allowsRotation可以不用設(shè)置闹炉,下面這兩張圖是沒(méi)有設(shè)置allowsRotation和allowsRotation = NO