我需要在IOS应用程序中显示一些图像。我该怎么做才能让图像在所有设备上正确显示?
我是否必须根据设备手动设置图像的大小?请澄清。
答案 0 :(得分:2)
您不会仅仅使用SpriteKit来显示图像。您可以将图片加载为UIImage
,然后创建一个UIImageView
,您可以随时随地放置在屏幕上,然后只需指定UIImageView
UIImage
UIImageView
。 UIImageView
有许多属性可以设置图像的显示方式(例如,如果缩放它们以及如何缩放它们,或者它们是否未缩放,它们如何在可视区域内对齐,等等)。您可以在SpriteKit场景上绘制UIImages * img = ...;
SKTexture * tex = [SKTexture textureWithImage:img];
SKSpriteNode * sprite = [[SKSpriteNode alloc] initWithTexture:tex];
// If you don't use ARC, I'd add the following below:
// [sprite autorelease];
,这在iOS上没问题(在iOS上,一切都是由OpenGL ES或Metal绘制的)。
当然,如果您愿意,也可以将任何图像作为精灵嵌入:
SKScene * scene = ...;
SKView * sceneView = scene.view;
UIImageView * imgView = [[UIImageView alloc] init];
imgView.image = img;
// Whatever content mode you prefer
imgView.contentMode = UIViewContentModeScaleAspectFit;
// Where shall it be placed and how big shall it be.
imgView.frame = CGRectMake(posX, posY, width, height);
// If you'd use this, it will cover the whole scene:
// imgView.frame = sceneView.frame;
// Add it on top of your scene
[[sceneView parent] addSubview:imgView];
// If you don't use ARC, don't forget to release it:
// [imgView release];
现在,您可以以任何您喜欢的方式将其完美地集成到场景中,将所有其他精灵完美对齐。然而,如果您只想在场景上绘制图像:
UIImage
如果您使用[UIImage imageNamed:@"blah"]
从应用程序包中加载blah.png
,并且该图片对于视网膜设备(blah@2.png
,blah@3.png
,-convertPointFromView:
的分辨率不同),系统将自动加载它认为最适合当前设备屏幕的图像。这不是你必须处理的事情。
如果您需要在场景坐标和视图坐标之间进行转换,SKScene会针对此案例提供-convertPointToView:
和DataSet ds = new DataSet();
adapter.fill(ds)
if (ds.Tables[0].Rows.Count >= 1)
{
results = ds.Tables[0];
}
dataTblResults.DataSource = results;
。如果场景填满整个屏幕,那么这些实际上在场景和屏幕坐标之间转换。
即使设备具有不同的分辨率,您的场景也可以始终具有相同的“虚拟大小”。因此,无论真正的屏幕分辨率如何,您总是可以说场景是400x300。在这种情况下,将虚拟尺寸200x150的精灵放置在虚拟坐标(100,75)处将始终将其置于屏幕上,无论是什么设备或屏幕有多大(嗯,假设SKSceneView确实涵盖了整个屏幕)当然是screne)。 SKScene的大小只是您想要用于布局游戏的坐标系,它可以是您想要的任何一个,它可以比真实屏幕更大或更小。
场景总是被绘制到SKSceneView中。 SKSceneView的大小是屏幕坐标中场景的实际大小。因此,如果你的SKScene是480x320并且SKSceneView的大小是1440x960,那么在场景中移动精灵一个像素实际上会在屏幕上移动3个像素。然而,如果您的SKScene是1136x640,但您的SKSceneView仅为586x320,那么在场景中移动精灵两个像素只会在屏幕上移动一个像素。您的场景总是按要求放大或缩小。
就我个人而言,我要么在所有设备上坚持使用相同的尺寸,要么只制作两到三个设备类,但不要为每个设备和每个现有的屏幕分辨率采用游戏。
答案 1 :(得分:2)
在SpriteKit中处理图像时需要考虑很多事情,简短的回答是你应该在1x,2x和3x中创建图像(background.png,background @ 2x.png和background@3x.png) 。如果你这样做,你将获得最佳的图像质量。
根据通常在场景级别完成的不同设备调整图像大小。有很多好的SO问题,涵盖了你将要遇到的很多问题。
例如: Dealing with different iOS device resolutions in SpriteKit
我建议搜索“使用SpriteKit创建通用应用程序”。
希望能够回答您当前的问题并帮助您开始解决其他问题。