我正在寻找在我的spriteKit游戏中为我的英雄收集物品的最好方法,并且在尝试了几种方法之后,我的结论是最好的方法是有物理身体的物品可以检测到碰撞,但不会与我的英雄发生碰撞.有可能吗?停用物理机构的碰撞而不停用其检测碰撞的能力?听起来有点矛盾我知道......因为,另一种方法是只创建一个没有物理体的SKSpriteNode,然后就不会发生碰撞,但是"检测"碰撞的方式将是手工制作的,而且要困难得多,因为我需要在我的英雄中设置坐标系检测,当他将在那些细节坐标(在项目上)时,我将使项目消失.如何更轻松地了解如何做到这两种方式中的任何一种?
Cor*_*rey 21
退房collisionBitMask,categoryBitMask和contactTestBitMask的SKPhysicsBody类.
从本质上讲,具有相同collisionBitMask价值的物理机构将相互"传递".
然后,设置categoryBitMask和contactTestBitMask值以SKPhysicsContact在联系人上创建对象.最后,您的班级应该采用该SKPhysicsContactDelegate协议.使用该- didBeginContact:方法检测和处理SKPhysicsContact对象.
static const uint8_t heroCategory = 1;
static const uint8_t foodCategory = 2;
--
food.physicsBody.categoryBitMask = foodCategory;
food.physicsBody.contactTestBitMask = heroCategory;
food.physicsBody.collisionBitMask = 0;
--
hero.physicsBody.categoryBitMask = heroCategory;
hero.physicsBody.contactTestBitMask = foodCategory;
hero.physicsBody.collisionBitMask = 0;
--
-(void)didBeginContact:(SKPhysicsContact *)contact {
SKPhysicsBody *firstBody = contact.bodyA;
SKPhysicsBody *secondBody = contact.bodyB;
}
Run Code Online (Sandbox Code Playgroud)
简短回答:
yourHero.physicsBody.collisionBitMask = 0;
Run Code Online (Sandbox Code Playgroud)
默认值为collisionBitMask0xFFFFFFFF(所有位都设置),这就是节点与其他节点冲突的原因
| 归档时间: |
|
| 查看次数: |
11932 次 |
| 最近记录: |