iOS spriteKit 기본 학습 노트(Swift 언어)

7009 단어
1. sprite kit 보기를 만들고 SpriteKit 모듈을 가져와 원본 파일에: import SpriteKit를 추가합니다.스토리보드에 있는view Controller를 선택하고 펼치십시오. 보기를 선택하면 class를 SKView로 바꿉니다.그리고 이 View Controller의 원본 파일에viewDidLoad 방법에 다음 코드를 추가합니다:if let spriteView = self.view as? SKView {spriteView.showsDrawCount = true spriteView.showsFPS = true spriteView.shows NodeCount = true} SKView는 기본적으로 아무런 내용이 없으며 개발자가 위에 표시할 내용을 놓아야 합니다.상기 코드에는 디버깅 정보가 추가되었습니다.draw 방법의 호출 횟수, 화면이 초당 그릴 수 있는 프레임 수, 그리고 화면의 노드 수를 표시합니다.위의 디버그 정보도 화면에 렌더링할 내용이 있을 때만 표시되며 빈 인터페이스에서는 표시되지 않습니다.
2. 장면을 만드는 SKView 위에 하나의 장면을 표시하여 게임의 모든 요정을 표현해야 한다.GameScene과 같은 SKScene을 상속하는 클래스를 만듭니다.GameScene에 다음과 같은 속성을 추가합니다. var contentCreated = false 다음으로, GameScene에 다음과 같은 방법을 추가합니다. override func didMove(view: SKView) {if self.contentCreated = false {self.createSceneContents () self.content.content.content () self.content Created = true} func createSceneContent ()View Controller 클래스에서view Will Appear 메소드를 구현하고 다음 코드를 추가합니다:let scene = GameScene () scene.size = self.view as ?SKView {spriteView.presentScene(scene)} SKScene이 하나의 SKView에 추가될 때didMove: 메서드가 호출됩니다.우리는 이 방법으로 그것이 보여줄 내용을 준비할 수 있다.
3. 게임 요정이 게임 요정을 표시하려면 SKSpriteNode 대상을 만들고 그 크기와 위치를 설정한 다음에 SKScene에 추가해야 한다.let sprite = SKSpriteNode(color: UIColor.black,size: CGSize(width: 64, height: 64)) sprite.position = CGPoint(x:100,y:100) myScene.addChile(sprite) 텍스트 요정.sprite kit 장면에서 텍스트를 표시하려면 SKLabelNode를 사용합니다.let textNode = SKLabelNode(fontNamed: "Zapfino") textNode.text = "Hello world"textNode.fontSize = 42 textNode.position = CGPoint(x: myScene.frame.midX, y:myScene.frame.midY) textNode.name = "helloNode"myScene.addChild(textNode)
4, fontFamilyName in UIFont.familyNames() as! [string] {for fontName in UIFont. fontNames For Family Name(fontFamily Name) as! [string] {print("Available font: (fontName)")} 위 코드는 UIFont의 family Names 방법을 통해 모든 유효한 글꼴을 두루 가져옵니다.또한 글꼴 파일을 미리 추가해야 한다는 전제하에 사용자 정의 글꼴을 사용하여 특수 문자 효과를 표시할 수도 있습니다.여기에는 표시하지 않는다.
5. 장면 전환 SKView의presentScene: 방법은 어떤 장면이 표시될지 지정할 수 있다.self.view?presentScene(newScene). 이렇게 하면 즉시 목표 장면으로 전환할 수 있다.또한 변환 효과를 추가할 수 있습니다. SKTransition을 만들고 presentScene (,transition:):let crossFade = SKTransition을 호출하면 됩니다.crossFade(withDuration: 1.0) self.view?presentScene(newScene,transition:crossFade) . SKScene이 나타날 때 교체된 장면의 윌 Move From View: 방법은 즉시 호출되며, 그 중의 정령을 제거하여 메모리를 절약할 수 있습니다.그리고 곧 나타날 SKScene의 didMove: 방법은 호출되고 이 방법에서 장면의 내용을 준비할 수 있습니다.
6. 요정과 라벨의 동작은 SKAction 대상을 통해 장면의 노드가 어떤 동작을 수행하도록 할 수 있다.이른바 동작이란 장면의 노드를 위치를 이동시키고 색깔, 투명도 또는 크기를 바꾸는 것을 포함한다.다음 코드와 같이 노드가 오른쪽 상단으로 이동하는 동안 페이드아웃을 하고 일부 코드를 실행한 다음 장면에서 제거합니다:let moveUp = SKAction.move(by:CGVector(dx: 100, dy: 100),duration:1.0) let fadeOut = SKAction.fadeOut(withDuration: 0.5) let runBlock = SKAction.runBlock{ () -> Void in print("Hello!") } let remove = SKAction.removeFromParent() let moveAndFade = SKAction.group([moveUp, fadeOut]) let sequence = SKAction.sequence([moveAndFade,runBlock,remove]) node.runaction(sequence) SKAction은 노드가 수행할 수 있는 동작을 나타내는 대상입니다.일반적으로 동작은 노드 속성을 수정하거나, 일정 시간만 기다리거나, 코드를 실행하는 데 사용됩니다.작업을 수행하려면 먼저 공장 방법을 통해 SKAction 객체를 작성해야 합니다.그런 다음 해당 노드의runaction:메서드를 호출합니다.또한 하나의 동작을 여러 노드에 가하여 모든 노드가 같은 동작을 수행하도록 할 수 있다. 단지 하나의 SKAction을 만들고 모든 SKNode에서runaction: 방법을 실행하기만 하면 된다.한 동작은 단독으로 실행할 수도 있고 다른 동작과 함께 실행할 수도 있다.시퀀스(sequence)와 그룹(group)입니다.블렌드 가능.어떤 동작을 이름과 연결하면 actionForKey 방법으로 이 동작을 다시 찾을 수 있습니다:let the Action = node.actionForKey("My Action")도 하나의 이름으로 동작 node를 삭제할 수 있습니다.removeActionForKey("My Action"). 또한removeAllActions 방법으로 모든 동작을 노드에서 한꺼번에 삭제합니다:node.removeAllActions(). 일단 우리가 동작을 삭제하면, 이 동작은 현재 무엇을 실행하고 있든지 간에 즉시 종료됩니다.하지만 이 동작이 바뀐 상태는 그대로 남아 있다.
7. 무늬 스티커 요정은 비트맵으로 요정을 실현한다.let imageSprite = SKSpriteNode(imageNamed: "Spaceship"). 상기 SKSpriteNode(imageNamed:) 방법으로 요정을 만들 때 이 요정의 크기는 그림의 크기입니다.엘프를 만들면 다른 노드처럼 사용할 수 있습니다. 위치를 설정하고 장면에 추가하고 동작을 수행하도록 할 수 있습니다.또한 텍스쳐 갤러리를 통해 메모리를 절약하여 렌더링 효율을 제공할 수 있습니다. Textures를 만듭니다.altas의 폴더입니다. 모든 무늬 그림을 그 안에 넣은 다음 폴더를 프로젝트에 끌어다 놓고build Settings의 'Sprite kit' 항목의 'Enable Texture Altas Generation' 값을 YES로 설정합니다.
8. 형상 노드는 형상 노드를 사용하여 벡터 도형을 그릴 수 있으며 SKShapeNode를 통해 실현할 수 있다.let path = UIBezierPath(roundedRect: CGRect(x: -100, y: -100, width: 100, height: 100), cornerRadius: 20) let shape = SKShapeNode(path: path.CGPath) shape.strokeColor = SKColor.greenColor() shape.fillColor = SKColor.redColor() shape.glowWidth = 4 shape.position = CGPoint(x:myScene.freme.midX,y:myScene.frame.midY) myScene.addChile(shape)
9. 혼합 모델은 서로 다른 시각 효과를 실현한다.blendMode 속성을 통해 노드와 장면의 다른 부분의 혼합 모델:shape.blendMode = SKBlendMode.Add 노드가 장면에 그려진 경우 장면의 최종 결과는 노드의 블렌드 모드에 따라 달라집니다.장면에 노드가 중첩되면 Sprite Kit 렌더링 엔진은 노드의 각 픽셀에 대한 색상 값과 픽셀 아래 점의 색상 값을 가져와 지정된 방식으로 색상 값을 계산하고 새 색상 값을 가져옵니다.기본적으로 모든 SKNode는 SKBlendMode를 사용합니다.알파는 기본 블렌드 모드로 사용됩니다.이런 모델은 대부분의 상황에서 필요한 효과를 발생시킨다. 비트맵의 알파 채널에 정령의 알파 속성을 곱하여 최종적으로 이 노드의 색깔이 장면에 얼마나 추가되는지 결정한다.다른 블렌드 모드는 SKBlendMode입니다.Add,SKBlendMode.Subtract,SKBlendMode.Multiply,SKBlendMode.MultiplyX2,SKBlendMode.Screen,SKBlendMode.Replace.
10. 필터는 CIFliter와 SKEffectNode를 결합하여 노드에 특수한 시각화 효과를 적용할 수 있다. let effect = SKEffectNode()let Filter = CIFilter(name: "CIGaussian Blur") Filter.setValue(20.0,forKey:"inputRadius") effect.filter = filter myScene.addChild(effect) effect.addChild(imageSprite) CIFilter는 비트맵에 필터 효과를 적용할 수 있습니다.sprite kit에 CIFilter를 적용하려면 SKEffectNode 대상을 만들고 필터를 사용할 노드를 하위 노드로 이 SKEffectNode에 추가해야 합니다.마지막으로 이 SKEffectNode를 장면에 추가합니다.그런 다음 CIFilter를 생성하여 속성을 설정하고 SKEffectNode의 Filter 속성에 지정합니다.CIFilter를 만들려면 CIFilter 클래스의 FilterWithName 메서드를 사용합니다.이 방법은 사용할 필터 이름을 지정하기 위해 문자열 인자가 필요합니다.필터마다 다른 속성을 사용하고 CIFilter의 setValue (, forKey:) 방법을 사용하도록 설정합니다.
11. 스모그, 화염과 입자 특수효과는 입자 효과로 각종 관련 특수효과를 시뮬레이션한다.입자 효과를 만드는 단계: 1. File 메뉴는 Resource--Sprite Kit Particle File을 선택하고 필요한 템플릿을 선택합니다.2. 위에서 새로 만든 파일을 열면 입자 편집기가 있습니다.이 편집기에서는 분사된 입자의 수량, 시간에 따라 변화하는 색 등 입자 시스템의 최종 효과를 정의할 수 있는 다양한 속성을 편집할 수 있습니다.또한 입자 시스템이 이동할 때의 동적 디스플레이 효과를 드래그해서 볼 수 있습니다.상소 입자 시스템을 설정한 후 다음 코드로 장면에 효과를 추가할 수 있습니다:let fireNode = SKEmitterNode(fileNamed: "**.sks") myScene.addChild(fireNode)
12. 애니메이션 요정은 일련의 비트맵으로 Sprite Kit 애니메이션을 구성하려고 한다.먼저 분리된 모든 애니메이션 프레임을 만든 다음 Animation에 배치합니다.atlas 폴더에 프로젝트에 폴더를 추가합니다.뒤에 SKAction의 animate With Textures(, time PerFrame:) 방법으로 엘프 집합 애니메이션을 재생할 수 있습니다. let atlas = SKTexture Atlas(named: "Animation") let text Names = (atlas. texture Names as! [string]).sorted { (first, second) -> Bool in return first < second } var allTextures: [SKTexture] = textureNames.map { (textureName) -> SKTexture in return altas.textureNamed(textureName) } let animatedSprite = SKSpriteNode(texture: allTextures[0]) animatedSprite.position = CGPoint(x: self.frame.midX, y:self.frame.midY) self.addChild(animatedSprite)
let animationAction = SKAction.animatedWithTextures(allTextures,timePerFrame:(1.0/30.0))
animatedSprite.runAction(SKAction.repeatActionForever(animationAction))

좋은 웹페이지 즐겨찾기