bodyWithEdgeLoopFromRect在横屏模式下不起作用

4

我只是想在横向场景中设置一个基本的场景,带有重力,并将场景设置为边缘循环。

我设置了场景的物理体和主角精灵的物理体,这是我的代码:

-(id)initWithSize:(CGSize)size
{
    if (self = [super initWithSize:size])
    {
        self.backgroundColor = [SKColor redColor];
        [self setPhysicsBody:[SKPhysicsBody bodyWithEdgeLoopFromRect:[self frame]]];
    }
    return self;
}


-(void)setupMain
{
    if (!self.mainCharacter)
    {
        self.mainCharacter = [[SKSpriteNode alloc] initWithImageNamed:@"spriteDefault"];

       [self.mainCharacter setPosition:CGPointMake(CGRectGetMidX([self frame]), CGRectGetMidY([self frame]))];

       [self addChild:self.mainCharacter];

       self.mainCharacter.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.mainCharacter.frame.size];
       self.mainCharacter.physicsBody.dynamic = YES;
       self.mainCharacter.physicsBody.affectedByGravity = YES;
       self.mainCharacter.physicsBody.mass = 0.02;
    }
 }

因此,在纵向模式下,一切都完美运作,但在横向模式下情况就变得非常混乱。

我想这与某些相关联,

  [self setPhysicsBody:[SKPhysicsBody bodyWithEdgeLoopFromRect:[self frame]]];

奇怪的是,横屏模式下x轴的边界循环(竖屏模式下的y轴)工作正常,但我只是穿过了y轴(竖屏模式下的x轴)。

我猜测框架在某个地方返回了y轴上不在屏幕范围内的位置,这意味着它在屏幕上方或下方...可能是这样...但我不太确定。

然而,我尝试过几种不同的选择,包括手动使用CGRectMake()自己设置矩形,但我无法让任何东西正常工作。

任何建议都将不胜感激!!!


1
请查看此链接:https://dev59.com/SnfZa4cB1Zd3GeqPX_BA#19354725 - DogCoffee
3个回答

0

好的,这是一个超级丑陋的修复...

 self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(0, 200, 320, 200)];

我不确定为什么这个能够工作...而且在较小的屏幕尺寸上显然会有一些问题...更好的修复方法和解释将不胜感激!谢谢 :D


请参见Smick的评论,获取实际解决方案。 - CodeSmile

0

由于场景大小仅在viewWillLayoutSubviews中知道,因此您需要在其中设置边缘循环:

-(void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];

// Configure the view.
SKView * skView = (SKView *)self.view;
if (!skView.scene) {
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    [skView presentScene:scene];
}

}


0

你需要将主角的collisionBitMask设置为场景类别(需要创建)。只有在告诉节点时,它们才会受到影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接