【问题标题】:Change Physical body frame in spritekit更改 spritekit 中的物理身体框架
【发布时间】:2015-07-14 09:45:37
【问题描述】:

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

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

@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(如下图所示)

我添加了一个向下滑动手势以使角色站立。

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

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

【问题讨论】:

  • 我猜你应该在这种情况下重新创建一个物理体,或者使用两个具有不同物理体的节点并在它们之间切换(一个节点应该被隐藏,它的类别、接触和碰撞位掩码将是相应更改)
  • @Whirlwind,我不知道为什么,但重新创造一个身体的想法似乎行不通。我用你的第二个想法完成了任务(使用两个节点并在它们之间切换)。总之谢谢
  • 两种方式各有利弊,但没有灵丹妙药。您不能简单地调整大小或动态缩放物理体。当你重新创建节点的物理体时,唯一的缺点是速度会丢失......更多信息:stackoverflow.com/a/19415430/3402095stackoverflow.com/a/21030752/3402095

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


【解决方案1】:

您可以破坏当前的物理体 self.physicsBody = nil;,然后简单地创建一个具有新尺寸要求的新体。

【讨论】:

  • 能不能给点代码,不过好像不行,重新创建后,实体骨架好像翻了一番。
  • @pf2707 - 您可以使用第一次创建物理实体时使用的相同代码。只需根据您的需要更改尺寸即可。
【解决方案2】:

我通过在 2 个状态下使用 2 个节点来解决这个问题(作为建议):站立状态和站立状态。我给它取名

standupNode 和standdownNode

首先,将standupNode 添加到游戏场景中。如果向下滑动手势识别,我会从游戏场景中删除 standupNode 并添加 standdownNode。相反,从游戏场景中移除standdownNode,如果角色站立,则添加standupNode

【讨论】:

  • 按照您的描述进行操作将实现您的目标,但如果您开始为角色制作动画序列,这种方法将无法正常工作。不断地删除和添加播放器节点会使不同大小的节点的定位变得非常困难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多