iPhone 5s SpriteKit绘制奇特

时间:2015-06-08 15:53:01

标签: ios sprite-kit skscene skview

据我所知,iPhone 5s的像素分辨率为640 x 1136,点分辨率为320 x 568(与非Retina设备向后兼容)。

当我使用SpriteKit时,问题/混乱/奇怪似乎就出现了。 例如:

我正在从左下角(0,0)到右上角(宽度,高度)画一条线。结果是这条线几乎被画了一半。事实上,当我打印出屏幕尺寸时,它应该是320 x 568.所以我决定从(0,0)到(宽度* 2,高度* 2)。当然,这打印出640 x 1136。

所以奇怪的是: 即使我从对角线到角落的角落绘制,但实际上是,从一个角落到另一个角落。

注意:

 - I'm getting the width & height values from self.value.frame.size.
 - The diagonal line seems to draw just fine using any of the iPad simulators.

有什么想法在这里发生了什么? enter image description here

1 个答案:

答案 0 :(得分:1)

无论如何,这是我取得好成绩的方式:

打开一个新项目并尝试:

在GameViewContrller中,而不是使用 viewDidLoad ,使用 viewWillLayoutSubviews

编辑: 以下是Rob Mayoff关于good explanationviewDidLoad等方法的viewWillLayoutSubviews

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;
    /* Sprite Kit applies additional optimizations to improve rendering performance */
    skView.ignoresSiblingOrder = YES;

    // Create and configure the scene.

    if(!skView.scene){
        GameScene *scene = [GameScene sceneWithSize:skView.bounds.size];
        scene.scaleMode = SKSceneScaleModeAspectFill;

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

现在在场景类的didMoveToView方法中,只需绘制一条线:

    SKShapeNode *yourline = [SKShapeNode node];
    CGMutablePathRef pathToDraw = CGPathCreateMutable();
    CGPathMoveToPoint(pathToDraw, NULL, 0.0, 0.0);
    CGPathAddLineToPoint(pathToDraw, NULL, self.frame.size.width,self.frame.size.height);
    yourline.path = pathToDraw;
    [yourline setStrokeColor:[UIColor redColor]];
    [self addChild:yourline];
    CGPathRelease(pathToDraw);

阅读关于init vs didMoveToView的this(阅读LearnCocos2D发布的评论)。

所以这就是它,我希望它有所帮助。