背景图像大小精灵套装游戏

Mik*_*lty 30 iphone ios sprite-kit

我刚开始一个新的Sprite Kit项目来学习如何使用它.我观看并阅读了很多教程,但没有教程可以解答我的问题/问题.

我想为我的iPhone 5S创建一个应用程序.因此屏幕尺寸为1136x640.我为我的应用程序创建了一个1136x640背景图像.但是,当我将图像添加到我的应用程序时,它可能会变大!iOS模拟器只显示图像的中间部分.

有人能告诉我我必须使用什么屏幕尺寸以及为什么?

非常感谢!

这是我从教程中复制的代码.代码位于initWithSize方法的myScene.m文件中

        SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"myBackground"];
    background.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame));

    [self addChild:background];
Run Code Online (Sandbox Code Playgroud)

编辑:

我在谷歌搜索并发现了这个:

必须使用"viewWillLayoutSubviews"更改viewDidLoad方法.

这是这个方法:

    - (void)viewWillLayoutSubviews
    {
    [super viewWillLayoutSubviews];

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

    // Create and configure the scene.
    SKScene * scene = [MyScene sceneWithSize:CGSizeMake(skView.bounds.size.width*2,skView.bounds.size.height*2)];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    // Present the scene.
    [skView presentScene:scene];
}
Run Code Online (Sandbox Code Playgroud)

起初,scene = MySceneWithSize行是:

SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
Run Code Online (Sandbox Code Playgroud)

但那时只是iPhone 5屏幕尺寸的一半(568x320).所以我不得不加倍大小.有人知道为什么吗?

Gil*_*ton 29

对您当前问题的简短回答:

background.size = self.frame.size;
Run Code Online (Sandbox Code Playgroud)

答案很长,关于其他方法的讨论......

场景在逻辑单元中工作,而不是物理像素(如其他帖子中所述).

1个逻辑单元在旧套件上通常为1个像素,在较新的套件/ iPad上为2个像素.这可能是5年时间内的4个像素.

在逻辑单元中工作可以保护您免受将来更改的大小的影响,并且应该帮助程序员 - 尽管这通常会让新手感到困惑.

获取图像以填充当前场景的最简单方法是将其大小设置为"逻辑单位",无论其原始大小如何.

这比使用SKActions更好(因为用户可能最终看到它们,并且在动作完成之前不能依赖任何基于节点维度的计算),并且它比缩放更好,因为缩放需要您知道原始图像尺寸.

您可以通过size属性执行此操作,也可以通过操作执行此操作(如果您确实要制作动画).

在场景中......

-(void)didMoveToView:(SKView *)view
{
    [super didMoveToView:view];

    SKSpriteNode* background = [SKSpriteNode spriteNodeWithImageNamed:@"myBackground"];
    background.size = self.frame.size;
    background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
    [self addChild:background];
} 
Run Code Online (Sandbox Code Playgroud)

或者,如果你的图像运行良好,就像在较高分辨率上一样,你可以将图像重命名为myBackground@2x.png,将其添加到你的项目中,你可能根本不需要调整大小,但你也需要为较低分辨率的设备缩小50%,并将其保存为myBackground.png.

我总是将导入图像的大小设置为我想要的逻辑单位(或屏幕尺寸的百分比)以保持我的理智.


Jam*_*nes 9

我发现,如果图像的大小与您要创建的节点尺寸不同,那么创建尺寸会有点滑稽(比如在非视网膜设备上使用视网膜图像或不正确的图像命名).如果从图像创建纹理并使用以下内容设置纹理和节点大小,则可以缩放图像以进行填充:

SKTexture *backgroundTexture = [SKTexture textureWithImageNamed:@"MyImage.png"];
SKSpriteNode *background = [SKSpriteNode spriteNodeWithTexture:backgroundTexture size:self.view.frame.size];
background.position = (CGPoint) {CGRectGetMidX(self.view.frame), CGRectGetMidY(self.view.frame)};
[scene addChild:background];
Run Code Online (Sandbox Code Playgroud)

如果这样可以解决您的问题,我不是100%肯定,但它可能值得一试.


Dvo*_*ole 8

此行以磅为单位返回大小,而不是像素.这是因为不同的设备具有不同的分辨率,但在点数上具有相同的大小.在非视网膜设备上,1个点是1个像素,在视网膜设备上,1个点是2个像素.这就是为什么你从这个尺寸

SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
Run Code Online (Sandbox Code Playgroud)

您不希望将场景的大小加倍,因为它只是我们屏幕的边界,看不见.


小智 7

您是否尝试在图片名称的末尾添加"@ 2x"?