我正在编写一个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];
据我所知,传递的值应与最初为[UIScreen mainScreen] .bounds.size发送的值完全相同,但初始化的场景太大了。
我可以做些什么可能影响[UIScreen mainScreen] .bounds.size?或者我误解了init和.bounds实际上做了什么?
就我自己尝试解决这个问题所做的事情而言,我已经看过场景通常如何初始化的例子。我看到通常使用值来代替.bounds,例如:
initWithSize: CGSizeMake(1024,768)
然而,这并不意味着在不同的设备上,场景不会被正确/完全显示?
答案 0 :(得分:1)
如果您使用的是iOS 6或iOS 7, [UIScreen mainScreen] .bounds.size.width和[UIScreen mainScreen] .bounds.size.height在所有方向都相同.. 但在iOS 8中,它在横向上给出一个值,并在纵向模式下给出另一个值
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方法返回一个新初始化的场景对象。和参数&#39; size&#39;是以点为单位的场景大小。