我很抱歉发布此信息,我知道它之前已经被询问过,但我已经尝试了以前的解决方案,但似乎没有任何工作。联系人丢失
我遇到的问题是我同时使用了didBeginContact和didEndContact来确定我的精灵是否触及地面。
这个精灵有一个名为的BOOL,它接地,它决定了这个状态。基本上我想知道它是否在地面上触摸平台时。我得到的结果是与平台建立联系,然后立即失去联系之间的一场持续战斗,这非常令人沮丧。这是我到目前为止有:
-(Player *)createPlayer
{
...
sprite.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:player.size];
sprite.physicsBody.mass = 0.02;
sprite.physicsBody.restitution = 0;
sprite.physicsBody.categoryBitMask = playerCategory;
sprite.physicsBody.collisionBitMask = platformCategory;
sprite.physicsBody.contactTestBitMask = platformCategory;
sprite.physicsBody.usesPreciseCollisionDetection = YES;
return sprite;
}
-(SKSpriteNode *)createPlatform
{
SKSpriteNode *platform = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(100,25)];
platform.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:player.size];
platform.dynamic = NO;
platform.physicsBody.categoryBitMask = platformCategory;
platform.physicsBody.collisionBitMask = playerCategory;
platform.physicsBody.contactTestBitMask = playerCategory;
return platform;
}
-(void)didBeginContact:(SKPhysicsContact *)contact
{
SKPhysicsBody *firstBody, *secondBody;
if(contact.bodyA.categoryBitMask < contact.B.categoryBitMask)
{
firstBody = contact.bodyA;
secondBody = contact.bodyB;
}
else
{
firstBody = contact.bodyB;
secondBody = contact.bodyA;
}
if((firstBody.categoryBitMask & playerCategory) != 0)
{
Player *player = firstBody.node;
if((secondBody.categoyBitMask & platformCategoy) != 0)
{
NSLog(@"Connection Established");
player.grounded = YES;
}
}
}
-(void)didEndContact:(SKPhysicsContact *)contact
{
SKPhysicsBody *firstBody, *secondBody;
if(contact.bodyA.categoryBitMask < contact.B.categoryBitMask)
{
firstBody = contact.bodyA;
secondBody = contact.bodyB;
}
else
{
firstBody = contact.bodyB;
secondBody = contact.bodyA;
}
if((firstBody.categoryBitMask & playerCategory) != 0)
{
Player *player = firstBody.node;
if((secondBody.categoyBitMask & platformCategoy) != 0)
{
NSLog(@"Connection Lost");
player.grounded = NO;
}
}
}
基本上这样做的最终结果是这样的,当我检查日志:
- 联系成立
- 联系迷失
- 联系方式建立
- 联系人丢失
非常感谢您提供的任何帮助,我完全难住。
也许让你的精灵重得多。另外,请尝试关闭精确的碰撞检测。 – meisenman 2014-09-24 03:34:22
非常感谢您的回复。我只是尝试调整精灵的重量,但似乎没有任何工作。即使其恢复原状设置为0,这个精灵本身也会弹跳,这就是为什么我一直失去联系,有没有人知道如何确保物体在碰到平台时不会反弹? – Ryoku 2014-09-24 09:00:37
当联系人开始将播放器的速度设置为(0,0)时,您可以尝试在didBeginContact [[player physicsBody] setVelocity:CGVectorMake(0,0.0f)]; 并更换平台顶部的播放器。全部在didBeginContact – Aaleks 2014-09-24 14:50:36