我只是尝试在景观中设置一个基本场景,重力,并使场景处于边缘循环中。
我设置了场景的物理体和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() 我无法正常工作。
任何建议都将非常感谢!!!
答案 0 :(得分:0)
好的,这是一个超级的Janky修复......
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(0, 200, 320, 200)];
我不确定为什么会这样......而且显然在较小的屏幕尺寸上会有一些问题...更好的修复和解释会非常感激!! 谢谢:D
答案 1 :(得分: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];
}
}
答案 2 :(得分:0)
您需要将mainCharacter的collisionBitMask设置为等于sceneCategory(需要创建)。只有在告诉他们的情况下,您的节点才会受到影响。