gpt4 book ai didi

ios - 在 xcode 中处理不同的屏幕尺寸

转载 作者:行者123 更新时间:2023-11-29 12:22:37 24 4
gpt4 key购买 nike

我有一个 iPhone 游戏,最初是为 iPhone 6 开发的,在 iPhone 5 sim 上玩时它运行良好,但在 iPhone 4 sim 上玩时,两侧被拉长了?!?我从左侧和右侧生成的节点在屏幕上生成,而不是像 iPhone 6 和 5 那样在屏幕外生成。(请不要说这是重复的,因为我一直在寻找如何处理不同 iPhone 数周的时间)

我有从左侧和右侧射入的箭头,它们在 y 轴上随机生成。它们在屏幕外生成,然后在屏幕上缓慢移动,而不是在屏幕上快速移动,但在 iPhone 4 上,箭头在屏幕上生成。这是其中一个箭头的代码

-(void) leftArrow
{
int randomY = arc4random() % (675 - 175);
int yPoint = randomY + 175;
leftArrow = [SKSpriteNode spriteNodeWithImageNamed:@"arrow"];

leftArrow.size = CGSizeMake(leftArrow.size.width/1.2, self.frame.size.height/22);
leftArrow.position = CGPointMake(CGRectGetMidX(self.frame) - 230, yPoint);
leftArrow.zPosition = 50;
leftArrow.alpha = 1;

SKAction* action1 = [SKAction moveToX:leftArrow.position.x + 30 duration:0.5];
SKAction* wait = [SKAction waitForDuration:0.75];
SKAction* action2 = [SKAction moveToX:leftArrow.position.x + 470 duration:1.5];
SKAction* sequence = [SKAction sequence:@[action1,wait,action2,destroy]];

[self addChild:leftArrow];
if (deadDown == 1 || deadUp == 1 || didIntersect == true)
{
[leftArrow runAction:destroy];
}
else
{
[leftArrow runAction:sequence completion:^{
if (ii != 1)
{
if (didIntersect != true)
{
score++;
if (score == 100)
{
backgroundScore.fontSize = 300;
backgroundScore.position = CGPointMake(backgroundScore.position.x, backgroundScore.position.y + 30);
}
strFromInt = [NSString stringWithFormat:@"%d",score];
backgroundScore.text = strFromInt;
}
}
}];
}
}

我也在我的 didmovetoview 函数中使用它

self.scaleMode = SKSceneScaleModeAspectFill;

最佳答案

主要问题是处理与图像资源和屏幕对象坐标相关的各种屏幕尺寸。

我的解决方案是像为 iPhone 6 plus 编写代码一样编写代码。将所有图像设为 @3x 尺寸,并将屏幕布局坐标设为 iPhone 6 屏幕尺寸。

只需一些代码,我就能为 iPhone 6 plus、6、5 和 4 屏幕尺寸获得统一的布局。我已经包含了每一个的屏幕截图。角色图像为 300x300。 2 个按钮图像为 100x100。

static const float kIphone6PlusScaleFactorX = 1.0;
static const float kIphone6PlusScaleFactorY = 1.0;
static const float kIphone6ScaleFactorX = 0.9;
static const float kIphone6ScaleFactorY = 0.9;
static const float kIphone5ScaleFactorX = 0.772;
static const float kIphone5ScaleFactorY = 0.772;
static const float kIphone4ScaleFactorX = 0.772;
static const float kIphone4ScaleFactorY = 0.652;

#import "GameScene.h"

@implementation GameScene {
float scaleFactorX;
float scaleFactorY;

SKSpriteNode *node0;
SKSpriteNode *node1;
SKSpriteNode *node2;
SKLabelNode *label0;
}

-(void)didMoveToView:(SKView *)view {
self.backgroundColor = [SKColor blackColor];

if(view.frame.size.height == 736) {
NSLog(@"iPhone 6 plus");
scaleFactorX = kIphone6PlusScaleFactorX;
scaleFactorY = kIphone6PlusScaleFactorY;
}
if(view.frame.size.height == 667) {
NSLog(@"iPhone 6");
scaleFactorX = kIphone6ScaleFactorX;
scaleFactorY = kIphone6ScaleFactorY;
}
if(view.frame.size.height == 568) {
NSLog(@"iPhone 5");
scaleFactorX = kIphone5ScaleFactorX;
scaleFactorY = kIphone5ScaleFactorY;
}
if(view.frame.size.height == 480) {
NSLog(@"iPhone 4");
scaleFactorX = kIphone4ScaleFactorX;
scaleFactorY = kIphone4ScaleFactorY;
}

node0 = [SKSpriteNode spriteNodeWithImageNamed:@"Pic"];
node0.position = CGPointMake(self.size.width/2, self.size.height/2);
[node0 setScale:scaleFactorX];
[self addChild:node0];

node1 = [SKSpriteNode spriteNodeWithImageNamed:@"button0"];
node1.position = CGPointMake(100*scaleFactorX, 100*scaleFactorY);
[node1 setScale:scaleFactorX];
[self addChild:node1];

node2 = [SKSpriteNode spriteNodeWithImageNamed:@"button1"];
node2.position = CGPointMake(314*scaleFactorX, 100*scaleFactorY);
[node2 setScale:scaleFactorX];
[self addChild:node2];

label0 = [SKLabelNode labelNodeWithFontNamed:@"HelveticaNeue-Bold"];
label0.text = @"Big Game Menu";
label0.fontSize = 48*scaleFactorX;
label0.fontColor = [SKColor whiteColor];
label0.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeCenter;
label0.verticalAlignmentMode = SKLabelVerticalAlignmentModeCenter;
label0.position = CGPointMake(207*scaleFactorX,690*scaleFactorY);
[self addChild:label0];
}

iPhone 4

enter image description here

iPhone 5

enter image description here

iPhone 6

enter image description here

iPhone 6 Plus

enter image description here

请注意,文本标签不仅按字体大小而且按位置正确缩小。

您还可以使用上述逻辑生成与屏幕尺寸相关的节点。

供您引用,我确实在我的 GameViewController 中使用了标准代码,因为我发现使用更简单的版本更容易。这是我用来展示我的 SKView 的代码:

- (void)viewDidLoad {
[super viewDidLoad];

SKView * skView = (SKView *)self.view;
SKScene *scene = [GameScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
[skView presentScene:scene];
}

关于ios - 在 xcode 中处理不同的屏幕尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30161987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com