초기 Swift에서 Cocos2D 초기화 코드 재구성
우리는 초기의 Swift에서 하위 클래스에서 슈퍼클래스 디자인 초기화기만 호출할 수 있다는 것을 알고 있다. 이것은 Swift 초기 버전의 제한이기 때문에 예를 들어 CCSprite 하위 클래스의 init 작업을 완성하려면 코드를 많이 써야 한다.
init(type:FallingObjectType){
self.type = type
var imageName:String? = nil
if type == .Good{
let rndIndex = randomInteger(FallingObject.imageNames.good.count)
imageName = prefixAssetsPath(FallingObject.imageNames.good[rndIndex])
}else if type == .Bad{
let rndIndex = randomInteger(FallingObject.imageNames.bad.count)
imageName = prefixAssetsPath(FallingObject.imageNames.bad[rndIndex])
}
let spriteFrame = CCSpriteFrame(imageNamed: imageName)
super.init(texture: spriteFrame.texture, rect: spriteFrame.rect, rotated: false)
anchorPoint = ccp(0, 0)
}
CCSprite에는 이미지 Named: 이미지 Name 초기화 방법이 있지만 이 초기화기는 convenience initializers입니다. So는 알다시피 하위 클래스는 초클래스의 비convenience 초기화기만 호출할 수 있기 때문에 CCSprite Frame을 만들고 슈퍼의 init(texture: sprite Frame.texture,rect: sprite Frame.rect,rotated:false) 초기화기를 호출해야 합니다!
하지만 최신 Xcode 7 에서는3에서 2.2 버전의 Swift는 더 이상 이렇게 할 필요가 없습니다. 우리는 바로 이렇게 쓸 수 있습니다.
init(type:FallingObjectType){
self.type = type
var imageName:String? = nil
if type == .Good{
let rndIndex = randomInteger(FallingObject.imageNames.good.count)
imageName = prefixAssetsPath(FallingObject.imageNames.good[rndIndex])
}else if type == .Bad{
let rndIndex = randomInteger(FallingObject.imageNames.bad.count)
imageName = prefixAssetsPath(FallingObject.imageNames.bad[rndIndex])
super.init(imageNamed: imageName)
anchorPoint = ccp(0, 0)
}
직접 슈퍼.init(imageNamed: imageName) 완료!
하지만 아쉬운 건 스위프트 2.2에서는 Type의class 속성 키워드를 지원하지 않습니다. static만 사용할 수 있습니다. Swift3의 개선을 기대합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
초기 Swift에서 Cocos2D 초기화 코드 재구성판다 돼지·후페가 창작하거나 번역한 작품.전재를 환영합니다. 전재는 출처를 밝혀 주십시오.잘 못 썼다고 생각되면 의견을 많이 내주시고 괜찮다고 생각되면 좋아요를 많이 눌러주세요.감사합니다!hopy ;) 우리는 초기의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.