首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >背景图像大小雪碧套件游戏

背景图像大小雪碧套件游戏
EN

Stack Overflow用户
提问于 2013-10-19 22:15:34
回答 9查看 34.7K关注 0票数 33

我刚刚开始了一个新的雪碧套件项目来学习如何使用它。我看并阅读了很多教程,但是没有一个教程能回答我的问题/问题。

我只想为我的iPhone 5S创建一个应用程序。所以屏幕大小是1136x640。我为我的应用程序创建了一个1136x640背景图像。但是当我把图像添加到我的应用程序中时,它就会变得很大!iOS模拟器只显示图像的中间。

有人能告诉我我必须使用的屏幕大小吗?为什么?

非常感谢!

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

代码语言:javascript
运行
复制
        SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"myBackground"];
    background.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame));

    [self addChild:background];

编辑

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

viewDidLoad方法必须更改为"viewWillLayoutSubviews“。

以下是一种方法:

代码语言:javascript
运行
复制
    - (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];
}

首先,场景= MySceneWithSize行是:

代码语言:javascript
运行
复制
SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];

但是它仅仅是iPhone 5屏幕大小的一半(568x320)。所以我得把尺寸加倍。有人知道为什么吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2014-10-05 09:35:35

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

代码语言:javascript
运行
复制
background.size = self.frame.size;

冗长的答案,以及其他方法的讨论.

场景工作在逻辑单位,而不是物理像素(在其他帖子中提到)。

一个逻辑单元在较旧的工具包上通常是一个像素,在较新的工具包/iPad上通常是两个像素。这可能是5年时间内的4个像素。

在逻辑单元中工作可以保护您不受将来尺寸的变化,并且应该帮助程序员--尽管这常常会使新手感到困惑。

获取图像以填充当前场景的最简单方法是将其大小设置为“逻辑单元”,而不管最初的大小是什么。

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

如果您真的想要制作动画,您可以通过size属性,或者通过操作来实现这一点。

在现场很简单..。

代码语言:javascript
运行
复制
-(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];
} 

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

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

票数 30
EN

Stack Overflow用户

发布于 2013-11-30 21:19:07

我已经发现,如果一个图像与你想要创建的节点大小不一样,那么调整大小会有点滑稽(比如在一个非视网膜设备上使用视网膜图像,或者使用不正确的图像命名)。如果从图像创建纹理,并使用以下内容设置纹理和节点大小,则可以缩放图像以填充:

代码语言:javascript
运行
复制
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];

我不是百分之百肯定,如果这将解决你的问题,但它可能值得一试。

票数 9
EN

Stack Overflow用户

发布于 2013-11-02 19:38:46

这条线以点为单位返回大小,而不是像素。这是因为不同的设备有不同的分辨率,但在点上会有相同的大小。在非视网膜设备上,1点是1像素,而在视网膜设备上1点是2像素。这就是为什么你从

代码语言:javascript
运行
复制
SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];

你不想翻倍的场景,因为它将只是我们的界限,你的屏幕,看不见。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19471761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档