2017-11-14 30 views
0

당신은 엑스 코드에서 새로운 게임 템플릿 프로젝트, 게임 장면의 인스턴스를 다음 초기화를 사용하는 기본 GameViewController 한 경우 :만들기 SKScene, 초기화 (fileNamed : 초기화 대 (크기 :

let scene = SKScene(fileNamed: "GameScene") 

을 템플릿 파일에서 이니셜 라이저를 사용하면 Apple에서 권장하는 방법 인 SKScene을 만드는 것이 좋습니다. 그러나 나는 init(size:) 이니셜 라이저 또는 단순히 SKScene()을 사용하는 스택 오버플로에 대한 많은 예제를 보았습니다.

SKScene의 인스턴스를 만드는 가장 좋은 방법은 무엇이며 각 방법의 장단점은 무엇인지, 그리고 한 접근법과 다른 접근법을 사용할 때주의해야 할 함정이 무엇인지 궁금합니다.

내가 묻는 이유는 내 게임의 장면을 만들고 수준 1을 만들기 위해 init(fileNamed:)을 사용했다는 것입니다. 나중에 레벨 2에 대한 장면의 다른 인스턴스를 만들려고하면 init(size:)을 사용하여 문제가 발생했습니다. 즉, 을 사용하는 일부 위치 계산과 init(fileNamed:) 대신 init(size:)을 사용하여 장면을 만들면 장면의 프레임이 다른 결과를 생성하는 것처럼 보입니다.

좀 더 일반적인 의미에서 iOS와 SpriteKit을 사용하여 새로운 접근 방식을 사용하여 새로운 SKScene 및 장점 &을 초기화하는 것에 대해 익숙한 사람의 의견을 듣고 싶습니다.

+1

완전한 대답이 없지만 fileNamed 오버로드를 사용 했으므로 괜찮 았지만 쉽게 탐색 할 수 있도록 장면을 캐시했습니다. – Yitzchak

+1

문제의 일부는 init (size :)가 다른 기본값으로 초기화하는 것일 수 있습니다. init (fileNamed :)을 사용하여 파일에서로드하는 장면에 비해 기대할 수 있습니다. 예를 들어, 장면 크기는 전달한 내용에 따라 달라집니다. 장면의 이름은 달라집니다. 그것은 SKScene의 다른 하위 클래스 일 수 있습니다. anchorPoint가 같은 위치에 있지 않을 수도 있습니다. 등. –

답변

1

게임의 일부로 사용하는 장면을 만들 때는 init(size:)을 사용하지 말 것을 강력히 권장합니다. 디자인을 구조와 분리시켜야합니다. 이렇게하면 코드를 변경하지 않고 게임의 레이아웃을 변경하여 버그 가능성을 줄일 수 있습니다.

이와 같이 매우 일반적인 튜토리얼 사용 사례는 init(size:view.size)과 같습니다. 이 문제는 게임 디자이너에게 여러 가지 문제를 일으키고 SpriteKit에서 제공하는 여러 장치를 간단하게 처리 할 수 ​​없게 만듭니다. 사람들은 0..1 좌표계로 끝나는 경향이 있습니다. 노드를 배치 할 때마다 나누기가 이루어지기 때문에 사람들은 어딘가에서 나누기를 잊어 버리거나 높이를 의미 할 때 너비를 사용하기 때문에 버그가 발생합니다.

SKScenes에는 모든 장치에서 장면을 표시하는 방법을 처리하는 4 가지 눈금 모드가 있으며이 도구로 게임을 개발할 때는 항상 고려해야합니다. 그것은 사람들이 그것의 힘을 이해할 수 있도록 논의되는 첫 번째 것이어야합니다.

init(size:)을 사용하는 것이 좋습니다. 스프라이트 키트 빌더를 통해 구현할 수없는 동적 장면을 만들거나 이미 정적 크기의 창을 설정해야하는 경우입니다.

+1

아주 좋은 지적. 내 질문에, init (fileNamed :) 대신에'init (size :)'를 사용하면 sprites 중 하나의 좌표가 엉망이되는 결과를 낳았습니다 ... 이유는 상충의 위험이 있기 때문일 수 있습니다 당신이 언급 한 좌표들. 감사! – peacetype

+1

네가 열거 한 문제는 여러 가지 일 수있다.항상 장면 파일 (sks)을 사용하고 장면 크기를 정사각형 크기로 설정하는 것이 좋습니다. 이렇게하면 모든 종횡비를 위해 개발하고 시스템에서 자르기 작업을 수행 할 수 있습니다. 오버레이를 처리하려면 수학을해야하지만이 수학은 한 번만하면 시간을 절약 할 수 있습니다. – Knight0fDragon