我正在编写一个GUI,具有主菜单,第二个屏幕和主菜单的后退按钮。在初始主菜单中,我使用以下代码行:
midScreenX = [UIScreen mainScreen].bounds.size.width/2;
midScreenY = [UIScreen mainScreen].bounds.size.height/2;
WarScene *battle = [[WarScene alloc] initWithSize: CGSizeMake(midScreenX*2, midScreenY*2)];
SKTransition *reveal = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:1.0];
SKView * skView = (SKView *)self.view;
UIView *viewToRemove = [self.view viewWithTag:101];
[viewToRemove removeFromSuperview];
[skView presentScene:battle transition:reveal];
这工作…我认为。我打开一个新的场景,我的第二个场景是正确的大小,至少填满了屏幕。场景中有一个节点对屏幕来说太大了,我正在努力改变它,但我不认为这会影响UIScreen的边界。
当我使用以下代码返回主菜单时,问题出现了:
midScreenX = [UIScreen mainScreen].bounds.size.width/2;
midScreenY = [UIScreen mainScreen].bounds.size.height/2;
GameScene *map = [[GameScene alloc] initWithSize: CGSizeMake(midScreenX*2 ,midScreenY*2)];
SKTransition *reveal = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:1.0];
SKView * skView = (SKView *)self.view;
UIView *viewToRemove = [self.view viewWithTag:3];
[viewToRemove removeFromSuperview];
[skView presentScene:map transition:reveal];
据我所知,传递的值应该与最初发送给[uisscreen mainScreen].bounds的值完全相同。大小,但是初始化的场景太大了。
是否有什么我可以做,这可能会影响[uisscreen mainScreen].bounds.size?还是我误解了init和。bounds的作用?
就我自己已经做过的尝试和解决这个问题而言,我已经看了场景通常如何初始化的例子。我经常看到值被用来代替。bounds,例如:
initWithSize: CGSizeMake(1024,768)
然而,这是否意味着在不同的设备上,场景将无法正确/完整地显示?
如果你使用的是iOS 6或iOS 7both [uisscreen mainScreen].bounds.size。[UIScreen mainScreen].bounds.size。所有方向的高度都是一样的。但在ios8中,横向模式下给出一个值纵向模式下给出另一个值
NSLog(@"width %f",[[UIScreen mainScreen] bounds].size.width); //portrait ios7 or 6 = 320 , landscape ios7 or 6 = 320
NSLog(@"height %f",[[UIScreen mainScreen] bounds].size.height); //portrait ios7 or 6 = 568 , landscape ios7 or 6 = 568
NSLog(@"width %f",[[UIScreen mainScreen] bounds].size.width); //portrait ios8 = 320 , landscape ios8 = 568
NSLog(@"height %f",[[UIScreen mainScreen] bounds].size.height); //portrait ios8 = 568 , landscape ios8 = 320
我们可以检查这样的条件,
CGFloat midScreenX,midScreenY;
if (UIDeviceOrientationIsLandscape((UIDeviceOrientation)[[UIApplication sharedApplication] statusBarOrientation]))
{
//landscape mode
midScreenX = ([[UIScreen mainScreen]bounds].size.width>[[UIScreen mainScreen]bounds].size.height?[[UIScreen mainScreen]bounds].size.width:[[UIScreen mainScreen]bounds].size.height)/2;
midScreenY = ([[UIScreen mainScreen]bounds].size.width<[[UIScreen mainScreen]bounds].size.height?[[UIScreen mainScreen]bounds].size.width:[[UIScreen mainScreen]bounds].size.height)/2;
}
else
{
//portrait mode
midScreenX = [[UIScreen mainScreen]bounds].size.width/2;
midScreenY = [[UIScreen mainScreen]bounds].size.height/2;
}
我希望你的warScene和gameScene是SKScene的子类。方法initWithSize返回,一个新初始化的场景对象。参数"size"是场景的大小,以点为单位。更多信息请参考https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKScene_Ref/index.html#//apple_ref/occ/instm/SKScene/initWithSize: