更改spritekit中的物理主体框架

时间:2015-07-14 09:45:38

标签: ios sprite-kit game-engine game-physics

我使用SpriteKit开发了一款iOS游戏(这是一个快速制作游戏的有用框架)。我添加纹理并为主角配置物理身体作为图像

The first state: Stand Up

绿色矩形是身体的框架。我正在使用以下代码创建它

@interface MainCharacter : SKSpriteNode

@end

@implementation MainCharacter

+ (instancetype)mainCharacterAtPosition:(CGPoint)pos {
    MainCharacter* mainChar = [[MainCharacter alloc] initWithTexture:[SKTexture textureWithImageNamed:@"stand_up"]];
    mainChar.position = pos;
    mainChar.xScale = 0.5f;
    mainChar.yScale = 0.5f;

    return mainChar;
}

- (instancetype)initWithTexture:(SKTexture *)texture {
    if (self = [super initWithTexture:texture]) {
        self.name = kCharacterName;

        self.anchorPoint = CGPointMake(0.5f, 0.0f);

        [self standup];

        CGSize spriteSize = self.size;
        CGPoint center = CGPointMake(spriteSize.width*(self.anchorPoint.x-0.5f), spriteSize.height*(0.5f-self.anchorPoint.y));

        self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:spriteSize center:center];
        self.physicsBody.dynamic = NO;
        self.physicsBody.categoryBitMask = kCharacterCategory;
        self.physicsBody.contactTestBitMask = 0x0;
        self.physicsBody.collisionBitMask = 0x0;
    }
    return self;
}

- (void)standup {
    SKAction* standupAction = [SKAction setTexture:self.standupTexture resize:YES];
    [self runAction:standupAction];
}

- (void)standdown {
    SKAction* standownAction = [SKAction setTexture:self.standdownTexture resize:YES];
    [self runAction:standownAction completion:^{

    }];

    [self performSelector:@selector(standup) withObject:nil afterDelay:1.0f];
}

MainCharacter是一个继承自SKSPriteNode的类,只是一个管理主角的方便类。站起来是角色的第一个状态。我有另一个州,暂时叫做倒立(如下图所示)

Stand down state

我添加一个向下滑动的手势,让角色站立不动。

绿色矩形也是物理身体,但对于角色来说太大了。我想将一个物理身体框架作为红色矩形。

任何人都可以帮助我如何在我的角色站立时使身体变小,并在身体站立后放大身体

2 个答案:

答案 0 :(得分:0)

您可以销毁当前物理主体self.physicsBody = nil;,然后只需创建一个具有新尺寸要求的新物理主体。

答案 1 :(得分:0)

我通过将2个节点用于2个状态(作为建议)解决了这个问题:站立状态和站立状态。我把它命名为

standupNode和standdownNode

首先,将standupNode添加到游戏场景中。如果滑动donw手势识别,我从游戏场景中删除standupNode并添加standdownNode。相反,从游戏场景中删除standdownNode然后添加standupNode(如果角色站起来)