4

我只是想在风景中设置一个基本场景,有重力,并让场景处于边缘循环中。

我设置了场景的物理体和 mainCharacter sprite 物理体,这是我的代码:

-(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() 自己手动设置矩形,但我无法让任何东西正常工作。

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

4

3 回答 3

0

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

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

我不确定为什么会这样......而且它显然会在较小的屏幕尺寸上出现一些问题......非常感谢更好的修复和解释!感谢:D

于 2013-10-25T03:59:11.177 回答
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];
}

}

于 2014-04-01T08:05:53.220 回答
0

您需要将 mainCharacter 的 collisionBitMask 设置为 sceneCategory (需要创建)。只有告诉他们,您的节点才会受到影响。

于 2015-01-27T19:19:51.007 回答