在 Xcode Spritekit 中缩放物理体

use*_*987 4 objective-c ios sprite-kit

我最近遇到了一个问题,我会增加节点的大小,但物理体的大小会保持不变。我试图寻找解决方案但没有成功。如何使身体与节点的大小成比例?

CGPoint location = CGPointMake(randX, -self.frame.size.height - expander.size.height);

SKAction *moveAction = [SKAction moveTo:location duration:randDuration];

SKAction *expandAction = [SKAction resizeToWidth:(expander.size.width * 1.4) height:(expander.size.width * 1.4) duration:1.0];

SKAction *collapseAction = [SKAction resizeToWidth:(expander.size.width) height: (expander.size.height) duration:1.0];

SKAction *doneAction = [SKAction runBlock:(dispatch_block_t)^() {
    expander.hidden = YES;
}];

SKAction *expandCollapseAction = [SKAction repeatActionForever:[SKAction sequence:@[expandAction, collapseAction]]];

SKAction *moveExpandAction = [SKAction group:@[moveAction, expandCollapseAction]];

SKAction *moveExpanderActionWithDone = [SKAction sequence: @[moveExpandAction, doneAction ]];
[expander runAction:moveExpanderActionWithDone withKey: @"expanderMoving"];
Run Code Online (Sandbox Code Playgroud)

Whi*_*ind 5

我认为这行不通,但看起来物理体毕竟是缩放的。这是可以在 iOS8 上重现物理身体缩放的代码:

- (void)didMoveToView:(SKView *)view {
  /* Setup your scene here */

    SKSpriteNode *s = [SKSpriteNode spriteNodeWithColor:[SKColor yellowColor] size:CGSizeMake(100,100)];
    s.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMinY(self.frame)+100);
    s.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:s.size];

    s.physicsBody.dynamic = YES;
    
    s.physicsBody.affectedByGravity = NO;

    [self addChild:s];
    
    [s runAction:[SKAction scaleTo:0.3f duration:5]];

    [s.physicsBody applyImpulse:CGVectorMake(0,30)];
  
}
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,这在之前是行不通的,但我刚刚尝试过,它看起来很有效。尽管如此,这还没有经过全面测试,我不确定这是否会扰乱物理模拟。不过,接触检测可能会起作用。我只是想表明当 sprite 被缩放时实际的物理物体会被缩放。结果如下:

缩放物理体

从上面的 gif 可以看出,物理体与精灵一起缩放(无需重新创建另一个不同大小的物理体)。精灵周围的蓝色边界框是精灵物理体的视觉表示(在视图控制器中启用skView.showsPhysics = YES);

  • 是的,我现在正在查看文档,但没有任何内容。我向 Apple 提交了一份报告,要求这样做。 (2认同)