【问题标题】:iOS Sprite Kit- SKSpriteNode seems to participate in simulation without physics bodyiOS Sprite Kit - SKSpriteNode 似乎在没有物理体的情况下参与模拟
【发布时间】:2014-03-25 06:22:09
【问题描述】:

我正在使用 Sprite Kit 开发一款 iOS 游戏。

我最近在我的场景中添加了一个 SKSpriteNode,但没有为它创建物理实体。然而,当我构建和运行时,当玩家的角色(确实有一个物理体)移动到 SKSpriteNode 中时,它会旋转并移开,就像它有一个物理体一样——但我没有为 SKSpriteNode 创建一个。

即使我打字

sprite.physicsBody = nil;

它仍然表现得像是模拟的一部分。

我想知道当你制作 SKSpriteNode 时是否会自动创建物理体,但我查看了文档并在 Google 上进行了搜索,但找不到任何建议。

任何帮助或建议将不胜感激。

这是我用来创建精灵的代码(不受模拟影响的代码)

-(void)addSprite
{
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"image"];
sprite.position = CGPointMake(40, 30);
sprite.zPosition = 30;
sprite.name = @"spriteName";

[self addChild:sprite];
 }

在我的项目的另一部分

[self addSprite];

调用方法。

【问题讨论】:

  • 发布你如何创建精灵的代码。
  • @LearnCocos2D 我添加了用于在编辑中创建精灵的代码
  • 嗯,没什么异常。您可能想要获得一个“物理调试绘图”库,它可以向您显示身体形状的位置。也许您有一些尺寸不正确的其他形状,或者不是在逆时针缠绕中创建的静态形状。
  • 检查你的精灵节点是否没有添加到有实体的节点。

标签: ios sprite-kit


【解决方案1】:

是的,每个 SKSpriteNode 都带有一个物理体。最好改变物理体的属性,而不是完全摆脱它。如果您希望您的精灵出现在屏幕上并且不与任何其他精灵节点交互,请执行以下操作:

sprite.physicsBody.dynamic = NO;
sprite.physicsBody.collisionBitMask = 0x0;
sprite.physicsBody.contactTestBitMask = 0x0;

【讨论】:

  • 我很好奇,为什么禁用物理体比将其设置为 nil 更好?我可以理解,如果需要,它会更容易恢复,但它也带来了非常小的开销。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多