模拟器与设备联系点转换差异?

时间:2016-02-26 01:06:13

标签: debugging sprite-kit ios-simulator skscene skphysicscontact

我一直在努力解决这个问题,但似乎无法找到问题。

我有一个SKScene,我将其称为selfSKNode被称为chapterScene,会被添加到self。我有一个包含可移动角色的边界设置。以下是我设置的方法

ViewController.m (呈现SKScene子类OLevel的控制器

- (void)viewDidLoad {
    [super viewDidLoad];

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

    // Create and configure the scene.
    scene = [OLevel sceneWithSize:self.view.frame.size];
    scene.scaleMode = SKSceneScaleModeAspectFit;

    // Present the scene.
    [skView presentScene:scene];

    // Do things after here pertaining to initial loading of view.
}

这是我的 OLevel.m

- (id)initWithSize:(CGSize)size {

    if (self = [super initWithSize:size]) {
        NSLog(@"Creating scene");

        [self setUpScene];
    }

    return self;
}

- (void)setUpScene {

    NSLog(@"Setting up scene");
    //self.speed = 0.9f;

#pragma 1 Set up scene

    // Set up main chapter scene
    self.anchorPoint = CGPointMake(0.5, 0.5); //0,0 to 1,1
    chapterScene = [SKNode node];
    chapterScene.position = CGPointZero;
    chapterScene.name = @"chapterScene";
    [self addChild:chapterScene];


    // Set up physics boundary
    self.physicsWorld.gravity = CGVectorMake(0.0, 0.0);
    self.physicsWorld.contactDelegate = self;
    .
    .
    .
}

这里的要点是,最终我已经正确设置了我的场景及其子节点(正如我预期的那样,直到最后)。当我在模拟器( iPhone 6 )上运行时,我使用- (void)didBeginContact:(SKPhysicsContact *)contact方法来监控和碰撞。每当联系人开始时,我都会记录以下内容

CGPoint contactPoint = contact.contactPoint;
NSLog(@"non conv: %f, %f", contactPoint.x, contactPoint.y);
CGPoint sceneContactPoint = [self convertPoint:contactPoint toNode:chapterScene];
NSLog(@"1 conv pt: %f, %f", sceneContactPoint.x, sceneContactPoint.y);

我也记录了人物的位置,以确保这个转换点是正确的。

当我在模拟器上运行它,并且移动的节点角色撞到墙上时,我明白了:

2016-02-25 20:02:31.102 testGame[43851:14374676] non converted point: 0.143219, 29.747963
2016-02-25 20:02:31.102 testGame[43851:14374676] 1 conv pt: -140.206223, 615.699341
2016-02-25 20:02:31.102 testGame[43851:14374676] Player hit the wall
2016-02-25 20:02:31.103 testGame[43851:14374676] player pos: -140.206238, 590.749268

这是非常正确的。

HOWEVER ,无论出于何种原因我似乎无法找到,这就是在我的 iPhone 5C上运行的完全相同的代码 ......

2016-02-25 20:04:50.062 testGame[2907:1259447] non converted point: 160.337631, 310.808350
2016-02-25 20:04:50.063 testGame[2907:1259447] 1 conv pt: 70.996162, 900.004272
2016-02-25 20:04:50.064 testGame[2907:1259447] Player hit the wall
2016-02-25 20:04:50.065 testGame[2907:1259447] player pos: -89.003845, 593.984009

我真的希望这是一个我想念的简单修复。如果有人可以帮助我,我将非常感激。感谢

更新 似乎所有发生的事情都是当我在模拟器上运行它时,从屏幕中心(0,0)引用该点,而在设备上,参考点是真正的原点,左上角在 iPhone 5c 的情况下,以(0,0)为中心,(160,284)。仍然不确定如何纠正这个...或者为什么会发生这种情况。

到目前为止,这是我能想到的唯一解决方案......

if (!TARGET_OS_SIMULATOR) {
    contactPoint = CGPointMake(sceneContactPoint.x - screenBounds.size.width/2.0f, sceneContactPoint.y - screenBounds.size.height/2.0);
}
else {
    contactPoint = CGPointMake(sceneContactPoint.x, sceneContactPoint.y);
}

但这很令人尴尬。这是Xcode或Apple的一个错误,或者有理由发生这种情况并采用不同的解决方案。

0 个答案:

没有答案