我有一个有趣的问题。我创建了一个带有相关物理主体的SKSpriteNode。
SKTexture *shipTexture = [SKTexture textureWithImageNamed:@"Spaceship"];
self.heroSpriteNode = [HeroSpriteNode spriteNodeWithTexture:shipTexture size:CGSizeMake(40, 35.2)];
self.heroSpriteNode.physicsBody = [SKPhysicsBody bodyWithTexture:shipTexture size:CGSizeMake(40, 35.2)];
self.heroSpriteNode.physicsBody.dynamic = YES;
self.heroSpriteNode.physicsBody.mass = 1000.0;
self.heroSpriteNode.physicsBody.affectedByGravity = NO;
self.heroSpriteNode.physicsBody.allowsRotation = YES;
self.heroSpriteNode.physicsBody.angularDamping = 0.5;
self.heroSpriteNode.anchorPoint = CGPointMake(0.5,0.5);
self.heroSpriteNode.physicsBody.categoryBitMask = heroCategory;
self.heroSpriteNode.physicsBody.contactTestBitMask = groundCategory;
self.heroSpriteNode.physicsBody.collisionBitMask = groundCategory | edgeCategory;
场景本身没有引力。
在更新例程中,我将applyTorque:
称为物理主体。
-(void) updateWithDeltaTime:(NSTimeInterval)seconds
{
CGFloat rotateTorque = self.rotateRate;
switch (self.rotateForceApplied)
{
case leftForceApplied:
break;
case rightForceApplied:
rotateTorque = -1.0 * rotateTorque;
break;
case zeroForceApplied: // separate from default in case behavior should change
rotateTorque = 0.0;
break;
default:
rotateTorque = 0.0;
break;
}
NSLog(@"before physics position: x %f, y %f", self.heroSpriteNode.position.x, self.heroSpriteNode.position.y);
[self.heroSpriteNode.physicsBody applyTorque:rotateTorque];
NSLog(@"after physics position: x %f, y %f", self.heroSpriteNode.position.x, self.heroSpriteNode.position.y);
}
精灵旋转并看起来在原位旋转。它实际上做的是绕中心点旋转(所以没有净横向移动)。通过在施加扭矩之前和之后记录精灵位置可以看出这一点。没有其他动作被应用于物理机构。位置移动最多每个方向约9个点。
因为相机受到了对英雄"的限制。精灵,世界随着相机移动(centerOnNode:示例代码),这会导致整个世界在精灵旋转时以圆形模式移动。世界本身不会旋转,而是以旋转的圆形模式以相同的速度移动。
sprite anchorPoint为0.5,0.5我会认为它应围绕一个中心点旋转,这不应该改变精灵的位置。
我会怎么做错?
如果重要的话,这是在iOS9,Xcode7上,在不在模拟器中的设备上运行。 (iOS9 SpriteKit文档在Apple的网站上公开发布,iOS9本身的公开测试版也是如此,所以这不应该破坏任何NDA,而且我认为这里任何东西都不是iOS9特定的)
答案 0 :(得分:2)
Sprite Kit是一个物理引擎,试图模仿现实世界中物体的特征,因此你应该期望在模拟中具有物理体的物体的行为与它们在自然界中的行为一样。在这种情况下,您正在旋转非均匀物理主体,该主体可能会非均匀地旋转,并且可能会随着时间的推移而移动(除非主体围绕其质心旋转)。如果将物理主体更改为圆形,则精灵应该均匀旋转并保持在固定位置。