2016-08-09 1 views
0

그래서 사용자 지정 클래스를 만들고 해당 기능을 사용하여 실험하고 있지만 가장 단순한 작업도 수행 할 수 없습니다.사용자 지정 클래스 기능이 작동하지 않습니다.

이 내 사용자 정의 클래스입니다 :

import SpriteKit 

class BlockScene: SKScene { 

    func createBlock(){ 
     print("Block Created") 
    } 
} 

이 주요 장면 내 기능 createBlock을 실행하지 않습니다로드되면 내 MainScene

import SpriteKit 

class GameScene: SKScene { 

    let variable = BlockScene(fileNamed: "Block") 

    override func didMoveToView(view: SKView) { 
     variable?.createBlock() 
    } 

    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
    } 
} 

의 코드()입니다. 여기서 내가 뭘 잘못하고 있니? 당신이 "블록"에서이 지역의로드라는 이름의 파일이없는 것처럼

+0

는 당신에게 didMoveToView 기능이 있는지 확인 있습니까 부름 받았어? – Carter

+0

예 didMoveToView 함수에서 print()를 시도했기 때문에 @Carter 콘솔에 인쇄했습니다. – Charles

+0

@Charles 문제는 잘못된 방식으로 진행되고 있다는 것입니다. 스프라이트를 만들려면 현재 장면에서 인스턴스 메서드를 만들거나 새로운 스프라이트를 만들고 반환하는 GameScene의 정적 메서드 만 만들어야합니다. 변수 *라는 변수는 특정 스프라이트를 생성하는 메소드를 제공하는 유일한 목적이라면 필요하지 않습니다. – Whirlwind

답변

1

문제

자신이 실행, 그것은 보인다. SKScenefileNamed 메서드를 사용하여 초기화 할 때 파일이없는 경우 선택적 요소를 반환합니다. 이 경우 '차단'이 존재하지 않으므로 변수가 null이므로 didMoveToView() 메소드에서 createBlock()을 호출하지 않습니다.

솔루션

할 수 있습니다 중 하나를 당신이 필요로하는 "블록"파일을 만들거나 바로 아래, BlockScene의 기본 초기화를 호출

import SpriteKit 

class BlockScene: SKScene { 

    func createBlock(){ 
     print("Block Created") 
    } 
} 

class GameScene: SKScene { 

    let variable: BlockScene = BlockScene() 

    override func didMoveToView(view: SKView) { 
     self.variable.createBlock() 
    } 

    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
    } 
} 
+1

OP는 그가하고있는 일에 대한 단서가 없기 때문에 블록 파일은 Block.sks라고하는 Sprite Kit Scene 파일이어야한다고 지적합니다. – Knight0fDragon

관련 문제