ios xcode에서 다양한 화면 크기 다루기



objective-c iphone (2)

나는 iPhone 6 용으로 처음 개발 된 iPhone 게임을 가지고 있으며, iPhone 5 sim에서 재생할 때는 잘 동작하지만 iPhone 4 sim에서 재생하면 측면이 늘어납니다. 그리고 아이폰 6과 5처럼 스크린 대신 화면의 왼쪽과 오른쪽에서 스폰되는 노드가 표시됩니다. (몇 주 동안이 코드를 찾고 있었습니까? 다른 아이폰을 다루기 위해)

나는 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;

https://ffff65535.com


iPhone 5 또는 6에서 4로 이동하면 화면 종횡비가 16 : 9 (5 및 6)에서 4 : 3 (iPhone 4)로 변경됩니다. 이미지 왜곡이없는 옵션은 SKSceneScaleModeAspectFill (현재) 또는 SKSceneScaleModeAspectFit을 사용해야합니다. Apple doc에서 :

SKSceneScaleModeAspectFill ".... 이렇게하면 뷰의 전체 영역이 채워지지만 장면의 일부가 잘릴 수 있습니다."

SKSceneScaleModeAspectFit "..... 이렇게하면 전체 장면을 볼 수 있지만보기에서 레터 박스가 필요할 수 있습니다."

위의 두 가지 옵션 중 어느 것도 내가 원하는 것을 제공하지 않았기 때문에 비슷한 문제가 발생하여 4 : 3 장치 (iPhone 4 / iPad)에 대해 별도의 이미지를 재생성했습니다.


실제 크기 대신 비율을 사용해보십시오. 모든 iOS 기기는 너비와 높이가 다릅니다.

이것을 바꿔 라.

leftArrow.position = CGPointMake(CGRectGetMidX(self.frame) - 230, yPoint);

이런 식으로

leftArrow.position = CGPointMake(CGRectGetMidX(self.frame) - self.frame.size.width / 2, yPoint);

나는 단지 그것이해야 할 일을 짐작할 수 있지만 이것을 바꾸어 보라.

int randomY = arc4random() % (675 - 175);
int yPoint = randomY + 175;

이에:

int randomY = arc4random() % (self.frame.size.height - self.frame.size.height / 4);
int yPoint = randomY + self.frame.size.height / 4;

또한 나는 당신이 이것을 바꿀 것을 권할 것이다 :

그것들을 "30"과 "470"

SKAction* action1 = [SKAction moveToX:leftArrow.position.x + 30 duration:0.5];

SKAction* action2 = [SKAction moveToX:leftArrow.position.x + 470 duration:1.5];




sprite-kit