首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKTexture与UIImage的标度性质

SKTexture与UIImage的标度性质
EN

Stack Overflow用户
提问于 2014-01-07 10:35:49
回答 3查看 3.2K关注 0票数 10

在通过SKTexture构造图像时,有什么原因使.scale看起来忽略了图像的.scale

我有一个可用的图像资源,"retina_image@2x.png“

当我在创建UIImage时尝试创建一个纹理时:

代码语言:javascript
复制
UIImage* image = [UIImage imageNamed:@"retina_image"];
SKTexture* texture_image = [SKTexture textureWithImage:image];
NSLog(@"image size %@, scale %f", NSStringFromCGSize(image.size), image.scale);
NSLog(@"texture from image, size %@", NSStringFromCGSize(texture_image.size));

我得到以下结果:

代码语言:javascript
复制
image size {50, 50}, scale 2.000000
texture from image, size {100, 100}

而我却希望

代码语言:javascript
复制
image size {50, 50}, scale 2.000000
texture from image, size {50, 50}

因为图像的大小(以点为单位)为50x50。

这也是直接使用资源构造纹理时得到的结果:

代码语言:javascript
复制
SKTexture* texture_named = [SKTexture textureWithImageNamed:@"retina_image"];
NSLog(@"texture named, size %@", NSStringFromCGSize(texture_named.size));

提供以下输出(如预期的那样):

代码语言:javascript
复制
texture named, size {50, 50}

这表明,SKTexture在构造图像时,在确定自己的大小时,忽略了刻度属性,而在从imagename构造标度时则适当地尊重该比例。

这是预期的行为吗?

(显然,在我的实际代码中,我创建了我希望以编程方式而不是通过UIImage在纹理中使用的imageNamed)。

编辑:这是SpriteKit中的一个(已确认的)错误,在iOS8中修复

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-18 11:15:12

我也发现了这个,我相信这是个虫子。不确定苹果将如何纠正这一点,因为它可能会破坏现有的代码。

我的解决方法是读取UIImage的刻度,然后将SKSpriteNode的比例设置为1.0 / scale。对于SKSpriteNode的x和y尺度,您都需要这样做。

票数 9
EN

Stack Overflow用户

发布于 2014-01-07 10:46:49

来自UIImage的苹果

在运行iOS 4或更高版本的的设备上,如果设备的屏幕标度为1.0,则行为是相同的。如果屏幕的比例尺为2.0,则该方法首先在中搜索具有的图像文件,该文件名与后缀为@2x。例如,如果文件名为按钮,它首先搜索按钮@2x。如果找到2x,则加载该映像,并将返回的UIImage对象的scale属性设置为2.0。否则,它将加载未修改的文件名,并将scale属性设置为1.0。有关支持具有不同比例因素的图像的更多信息,请参见iOS应用程序编程指南。

但根据textureWithImageNamed:的说法。

新的纹理对象是初始化的和图像文件的名称,然后控件立即返回到您的游戏。雪碧套件加载和准备纹理数据时,它是需要你的游戏。 当加载纹理数据时,Sprite Kit 应用程序包中搜索具有指定文件名的图像文件。如果找不到匹配的图像文件,Sprite Kit将在应用程序包中存储的任何纹理地图集中搜索纹理。如果指定的图像在包中的任何地方都不存在,Sprite Kit将创建占位符纹理图像。

根据以上所述,textureWithImageNamed:SKTexture并不关心设备的缩放。(视网膜图像)

票数 0
EN

Stack Overflow用户

发布于 2015-07-22 08:19:16

我也有同样的行为,纹理从地图集创建的字典。关于iOS 8.3

How to force SKTextureAtlas created from a dictionary to not modify textures size?

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

https://stackoverflow.com/questions/20969392

复制
相关文章

相似问题

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