簡體   English   中英

在Xcode Spritekit中擴展物理實體

[英]Scaling Physics Bodies in Xcode Spritekit

我最近遇到了一個問題,我會增加一個節點的大小,但物理機構的大小會保持不變。 我試圖找到解決方案但沒有成功。 如何根據節點的大小調整人體尺度?

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"];

我認為這不起作用,但看起來物理機構畢竟是縮放的。 這是可以在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)];

}

如果我沒記錯的話,這在早些時候沒有用過,但我只是試了一下它看起來很有效。 盡管如此,這還沒有經過全面測試,我不確定這是否會破壞物理模擬。 接觸檢測可能會起作用。 我只是想表明,當精靈縮放時,實際的物理實體會被縮放。 結果如下:

縮放物理體

從上面的gif可以看出,物理體與精靈一起縮放(不重新創建另一個不同大小的物理體)。 精靈周圍的藍色邊界框是精靈物理體的直觀表示(在視圖控制器中啟用skView.showsPhysics = YES );

這很奇怪你可以在將它添加到SKNode或SKScene之前添加物理體

SKTexture  *texture=[_gameTexture textureNamed:@"mysprite"];
SKSpriteNode *bubble=[SKSpriteNode spriteNodeWithTexture:texture];
bubble.anchorPoint=CGPointMake(0.5,0.5);
//_bubble.name=[@"bubble" stringByAppendingFormat:@"%d ",index];
bubble.name=newcolor;

// _bubble.userInteractionEnabled = YES; _bubble.position = CGPointMake(newPosition.x,newPosition.y);

//
bubble.physicsBody=[SKPhysicsBody bodyWithCircleOfRadius:60];
bubble.physicsBody.dynamic=NO;
bubble.physicsBody.linearDamping=0;
bubble.physicsBody.restitution=0;


bubble.physicsBody.density=1;
bubble.physicsBody.allowsRotation=NO;
bubble.physicsBody.affectedByGravity=NO;
//_bubble.physicsBody.velocity=CGVectorMake([self getRandomNumberBetween:-10 to:7], [self getRandomNumberBetween:-10 to:7]);
//  _bubble.physicsBody.usesPreciseCollisionDetection=YES;


bubble.physicsBody.categoryBitMask=ballCategory;
bubble.physicsBody.collisionBitMask=ballCategory | pathCategory ;
bubble.physicsBody.contactTestBitMask=ballCategory | pathCategory ;

[self addChild:_bubble];


bubble.xScale=_bubble.yScale=2;
bubble.alpha=0.5;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM