【发布时间】:2015-01-08 12:14:08
【问题描述】:
我有 2 个节点:SKShapeNode coin 和 SKSpriteNode hero,带有委托和 didBeginContact 方法。联系工作正常,但在我反转我的英雄纹理后,节点不交互。 逻辑是:英雄是上线,下线和上线定位硬币。当 hero 上线时一切正常,但是当我使用 changeHeroSide 方法时, hero 反转并下线,didBeginContact 方法没有响应。
- (void)changeHeroSide
{
self.yScale = -fabs(self.yScale); // this part don't interact under line
/** BUT THIS PART WORKS WELL AND INTERACTS UNDER LINE
self.zRotation = M_PI;
self.xScale = fabs(self.xScale);
**/
self.position = CGPointMake(self.position.x, self.position.y - self.frame.size.height);
self.physicsBody.affectedByGravity = NO;
}
创建节点
- (void)create
{
self.hero = [[VZHero alloc] initAtPosition:CGPointZero withPlayer:nil];
self.hero.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.hero.frame.size];
self.hero.xScale = -fabs(self.hero.xScale);
SKShapeNode *platform = [self getCurrentPlatform];
self.hero.position = CGPointMake([self getHeroEdgeXCoordinateForPlatform:platform], platform.frame.size.height + _hero.frame.size.height/2);
self.hero.physicsBody.dynamic = YES;
self.hero.physicsBody.categoryBitMask = monsterCategory;
self.hero.physicsBody.contactTestBitMask = projectileCategory;
self.hero.physicsBody.usesPreciseCollisionDetection = YES;
[self addChild:self.hero atWorldLayer:VZWorldLayerCharacter];
SKShapeNode *coin = [SKShapeNode shapeNodeWithCircleOfRadius:radius];
coin.name = @"coin";
coin.strokeColor = [SKColor blackColor];
coin.fillColor = [SKColor yellowColor];
coin.lineWidth = 1;
coin.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:radius];
coin.physicsBody.dynamic = NO;
coin.position = pos;
coin.physicsBody.categoryBitMask = projectileCategory;
coin.physicsBody.contactTestBitMask = monsterCategory;
// coin.physicsBody.collisionBitMask = 0;
coin.physicsBody.usesPreciseCollisionDetection = YES;
[self addChild:coin atWorldLayer:VZWorldLayerCharacter];
}
【问题讨论】:
-
启用物理调试绘图,改变比例只会改变图像,不会改变物理形状
-
with
view.showsPhysics = YES;你如何创建物理体? -
谢谢,我添加了节点代码的创建,将尝试使用 showPhysics
-
有趣的是,物理矩形也是用yScale改变位置的,神秘的
标签: objective-c rotation sprite-kit sknode