【问题标题】:Sprite Kit turn node by YSprite Kit 按 Y 转节点
【发布时间】: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


【解决方案1】:

以这种方式镜像 y 比例会破坏物理体属性。看起来像 SpriteKit 中的一个错误(至少在 iOS 7 上)。您可以通过将精灵包装在容器节点中来解决此问题。 This 相关问题可能会有所帮助。

【讨论】:

  • 感谢您的回答,但在这种情况下,我认为只需更改 zRotate 和 xScale 会更好,不要将节点包装在另一个中。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多