4

私は、風景の基本的なシーンを重力で設定し、シーンをエッジループに設定しようとしています。

シーンの物理ボディと mainCharacter スプライト物理ボディをセットアップしました。コードは次のとおりです。

-(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

シーンのサイズはその時点でしか分からないため、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 に答える