2014-09-02 4 views
5

을 사용하는 경우 SKView 레터 색상을 변경하는 방법 I 상용구 코드 (새로운 게임의 iOS 프로젝트)에서 표준 전체 화면 SpriteKit보기를 사용하고, 나는 그 확인크기 조절 .AspectFit가

scene.scaleMode = .AspectFit 

를 사용할 때 장면이 맞으면 나머지 (레터 박스가있는) 영역이 검은 색으로 표시됩니다.

let skView = self.view as SKView 

// was hoping this one would work 
skView.backgroundColor = UIColor.redColor() 

// didn't expect this would work, since scene is scaled anyways 
scene.backgroundColor = SKColor.redColor() 

는 또한 다른 색상으로 스토리 보드 편집기에서 SKView 배경 색상을 변경하려고했으나 운 :

나는 색상을 변경하려면 다음과 같은 옵션을 시도했습니다.

레터 박스 영역의 색상을 변경하는 데 필요한 정보를 알려주십시오.

+0

aspectfit이 최후의 수단으로 사용하기 때문에 가능하다고는 생각하지 않습니다. 개발자가 모든 해상도를 올바르게 지원하기로되어있는 경우 필요한 경우 대응하는 경계 노드/스프라이트를 추가하여 "수동으로"레터 박스로 만들 수 있습니다. – LearnCocos2D

답변

2

나는 레터 헤드의 귀에 색상을 지정하거나 스프라이트를 놓는 방법이되어야한다고 생각하지만 ... 그렇지 않은 것 같습니다. 또한 LearnCocos2D에 동의하지 않습니다. AspectFit에는 아무 문제가 없습니다. 그것의 사용이있다.

내가 한 것은 AspectFit을 사용하는 것뿐 아니라 화면 크기에 따라 장면 크기를 계산하는 것입니다. 이것은 OSX 게임에 도움이되지는 않지만 iOS에서는 잘 작동합니다.

func createScene() -> GameScene { 
    let screenSize = UIScreen.mainScreen().bounds.size 
    var size:CGSize = CGSizeZero 

    size.height = Constants.sceneHeight 
    size.width = screenSize.width * (size.height/screenSize.height); 


    return GameScene(size: size) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let scene = self.createScene() 

    // Configure the view. 
    let skView = self.view as SKView 
    skView.showsFPS = false 
    skView.showsNodeCount = false 

    /* Sprite Kit applies additional optimizations to improve rendering performance */ 
    skView.ignoresSiblingOrder = true 

    /* Set the scale mode to scale to fit the window */ 
    scene.scaleMode = .AspectFit 

    skView.presentScene(scene) 
} 
+0

아하, 나는 당신의 createScene() 메소드에서 매번 "height"와 "width"를 바꿈으로써 작동하게 만들었는데, 이는 gameScene 너비를 나의 경우 너비 인 제한 요소로 고정시킨다. (나는 왼쪽과 오른쪽 대신에 위와 아래에 레터 박스를 가지고있었습니다.) – avance

1

장면이 렌더링 된 후 해당 내용이 제시보기로 복사됩니다. 보기와 장면의 크기가 같으면 내용을보기에 직접 복사 할 수 있습니다. 두 가지가 다른 경우 장면이보기에 맞게 조정됩니다. scaleMode 속성은 내용의 크기가 조정되는 방식을 결정합니다.

레터 박스 작성은보기에서 생성되므로 주위를 둘러 볼 방법이 없습니다. 특정 장면 크기 및 유니버설 좌표계를 사용하려는 경우 .aspectFit 설정이 필요한 경우가 많습니다. 이것이 사실이라면 다음이 도움이됩니다.

표준 .aspectFit이 현재 장치에서 문자 복싱을 제거하고이를 장면에 추가하기 위해 패딩에 필요한 정도를 알아야합니다. 원래 크기보다 조금 더 밝거나 약간 넓은 장면으로 끝나지 만 원본 장면 크기와 적어도 같은 크기의 장면이 있습니다. 그런 다음 게임에 사용할 좌표계에 따라 anchorPoint를 원래 (0, 0) 좌표 또는 (0.5, 0.5) 좌표로 이동할 수 있습니다.

이 코드는 복잡한 코드이며 시간이 지나면 바뀔 수 있습니다. 빠른 수정을 원한다면 그 목적을 위해 프레임 워크를 만들었습니다. 그것은 :) 작지만 휴대용입니다 그냥

https://github.com/Tokuriku/tokuriku-framework-stash

:

  1. 리포지토리
  2. 를 열고 "SceneSizer"하위 폴더
  3. 드래그 SceneSizer의 ZIP 파일을 다운로드합니다.프로젝트의 프레임 워크 "레고 블록"
  4. 이 작업이 완료 임베디드 그냥 코드 import SceneSizer

어딘가에

  • 가져 오기 프레임 워크를 링크하지 그리고있는 프레임 워크, 당신은 지금을 호출 할 수 있는지 확인 sizer 클래스 포함 : SceneSizer.calculateSceneSize(#initialSize: CGSize, desiredWidth: CGFloat, desiredHeight: CGFloat) -> CGSize

    설명서는 표준 장면에서 깨끗하고 완전한 사용을위한 폴더에 있습니다. 희망이 도움이!

  • +0

    왜 이것을 프레임 워크로 만들 었는지 묻습니다. – avance

    +0

    물론, 프레임 워크를 만들고 그 버전을 유지하기 만하면됩니다. 따라서 버전을 올리면 사람들이 새로운 버전을 Framework으로 플러그인하는 것이 더 쉽습니다. – Tokuriku