我有一个使用Sprite Kit的iOS应用程序,现在可以添加艺术作品了。艺术品是像素艺术品,并且本质上很小。我试图找到最好的方式来显示此,其中:
所有技术都具有相同的大小,这意味着一个图像像素与所有其他图像一样,恰好占据了现实世界像素的数量。
没有试图使纹理看起来更平滑的模糊处理,这通常在放大图像时发生。
我已经尝试解决第二个问题,如下所示:
self = [super init];
if(self){
self.size=size;
self.texture = [SKTexture textureWithImageNamed:@"ForestTree1.png"];
self.texture.filteringMode = SKTextureFilteringNearest;
[self.texture size];
}
return self;
上面的代码在具有纹理的SKSpriteNode的初始化中。
这是我的原始图片(放大以方便参考):
问题是我的结果总是像这样:
(后备箱的底部偏移不是这个问题的一部分。)我没有使用任何运动模糊或类似的东西。我不确定为什么无法正确显示。
编辑1:上面我没有提到拍摄截图时树木在不断地动画。当它们仍然静止时,它们看起来像这样:
上面的图像是两棵树重叠在一起,一棵树由于稍后要修复的错误而翻转。我的问题是现在如何防止动画发生时图像模糊?
编辑2:
我要添加树的多个实例,每个实例都加载相同的纹理。我知道这与动画无关,因为我更改了代码以仅添加一棵树并对其进行动画处理,并且完美地将其像素化。
我已经解决了这个问题...但是它确实是一个hack。我有一个SKScene
,它是所有“树”(SKSpriteNodes
)的父节点。该场景将为其自身添加多棵树。起初,我认为这是某种问题,因为如果我仅添加一棵树,它将正确显示图像。这个问题的答案使我相信,我需要以编程方式在中创建SKTextureAtlas
单例(纹理位于中SKTextureAtlas
),并将其传递给树类,以从init方法中获取纹理。我在中创建了一个属性SKScene
来保存纹理图集,以便每次创建新纹理时都可以将其传递给树类。我尝试使用textureNamed从纹理图集(在树类中)加载纹理:方法。这仍然没有用。我转回使用SKTexture的textureWithImageNamed:方法加载纹理,并且该方法有效。另外,我更改了代码,以使树子类根本不会被发送给SKTextureAtlas
单例,并且仍然可以工作。
在中,SKScene
我使用以下方法获取纹理图集:
[SKTextureAtlas atlasNamed:@"Textures"]; //Textures is the atlas name.
并将返回值设置为上述SKTextureAtlas
属性。我认为也许地图集只需要在代码中的某个时刻进行初始化,所以我尝试了一下:
SKTextureAtlas *myAtlas = [SKTextureAtlas atlasNamed:@"Textures"];
一行中仅包含以下内容:
[SKTextureAtlas atlasNamed:@"Textures"]
但都没有奏效。显然,我需要在树的父类中有一个属性,该属性SKTextureAtlas
可以保存树使用的纹理,而无需任何引用SKTextureAtlas
……这是小故障还是什么?它现在正在工作,但是感觉像是在被黑客入侵。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句