2015-01-19 3 views
0

한 번에 두 개의 동일한 스프라이트를 사용할 수 있는지 궁금합니다. 내 문제는 구름과 관련이 있습니다. 두 개의 구름 스프라이트가 화면을 가로 질러 움직입니다. Cloud1 및 Cloud2. 첫 클라우드 1이 화면 중간에있을 때 다른 Cloud1이 스폰되기를 원합니다. 또한 첫 번째 Cloud1이 화면 끝에 도달하면 제거해야합니다. 스프라이트를 사용하는 것이 가능합니까 아니면 텍스처를 사용해야합니까?스프라이트 추가 및 제거

override func update(currentTime: CFTimeInterval) { 

    var moveCloud1 = SKAction.moveByX(-CGRectGetMidX(self.frame)*3, y:0, duration: 45) 
    var moveCloud2 = SKAction.moveByX(-CGRectGetMidX(self.frame)*3, y:0, duration: 60) 

    if(cloudSprite1.frame.origin.x < self.frame.size.width/2){ 
    let cloudSprite1a = SKSpriteNode(texture: cloudTexture1) 
    self.addChild(cloudSprite1a) 
    cloudSprite1a.position = CGPoint(x:CGRectGetMidX(self.frame)*2.4, y:CGRectGetMidY(self.frame)*1.8); 
    cloudSprite1a.size = CGSize(width: 75, height: 60) 

    cloudSprite1a.runAction(moveCloud1) 

    } 
    } 

.

self.addCloudSprite1(CGPointMake(100, 500)) 
    self.addCloudSprite2(CGPointMake(100, 300)) 




} 





func addCloudSprite1(position : CGPoint) 
{ 

    cloudSprite1a.position = CGPoint(x:CGRectGetMidX(self.frame)*2.4, y:CGRectGetMidY(self.frame)*1.8); 
    self.addChild(cloudSprite1a) 

    var moveCloud1 = SKAction.moveByX(-CGRectGetMidX(self.frame)*2.8, y:0, duration: 40) 
    cloudSprite1a.runAction(moveCloud1, completion: {() -> Void in 
     cloudSprite1a.removeFromParent() 
     self.addCloudSprite1(position) 
    }) 
} 

func addCloudSprite2(position : CGPoint) 
{ 

    cloudSprite2a.position = CGPoint(x:CGRectGetMidX(self.frame)*2.4, y:CGRectGetMidY(self.frame)*1.5); 
    cloudSprite2a.size = CGSize(width: 75, height: 60) 
    self.addChild(cloudSprite2a) 

    var moveCloud2 = SKAction.moveByX(-CGRectGetMidX(self.frame)*2.6, y:0, duration: 60) 
    cloudSprite2a.runAction(moveCloud2, completion: {() -> Void in 
     cloudSprite2a.removeFromParent() 
     self.addCloudSprite2(position) 
    }) 
} 
+0

스프라이트에 텍스처가 표시되는 경우 질문은 스프라이트와 텍스처가 혼동 스럽다는 것을 나타냅니다. 첫 번째와 같은 방법으로 다른 클라우드 스프라이트를 만드십시오. – LearnCocos2D

답변

0

당신은 texturescloud1 및 cloud2을로드하고 SpriteNodes로 설정하고 많은 당신이 필요로하는 것과 같은 질감을 다시 사용할 수 있습니다.

override func didMoveToView(view: SKView) { 
    let cloudTexture1 = SKTexture(imageNamed: "cloud1.png") 
    let cloudSprite1 = SKSpriteNode(texture: cloudTexture1) 
    cloudSprite1 // positioned in middle. 
    let cloudSprite2 = SKSpriteNode(texture: cloudTexture1) 
    cloudSprite1 // positioned in at starting. 
} 

업데이트 기능 내에서 범위 검사를 수행하여 새로운 클라우드 스프라이트를 추가 할 수 있습니다.

override func update(currentTime: CFTimeInterval) { 

    if (self.cloudSprite1.position.x < - self.cloudSprite1.size.width) 
    { 
     cloudSprite1.position = //The other end. 
    } 
    if (self.cloudSprite2.position.x < -self.cloudSprite2.size.width) 
    { 
     cloudSprite2.position = /The other end. 
    } 
} 

또는 노드의 SKAction 완료 핸들러를 사용할 수도 있습니다.

func addCloudSprite(position : CGPoint, delay: NSTimeInterval) 
{ 
    let cloudSprite = SKSpriteNode(color: UIColor.greenColor(), size: CGSizeMake(100, 100)) 
    cloudSprite.position = position 
    self.addChild(cloudSprite) 

    var action = SKAction.moveTo(CGPointMake(-cloudSprite.size.width, cloudSprite.position.y), duration: 6) 
    var sequence = SKAction.sequence([SKAction.waitForDuration(delay),action]) 
    cloudSprite.runAction(sequence, completion: {() -> Void in 
     cloudSprite.removeFromParent() 
     self.addCloudSprite(position,delay:0) 
    }) 
} 

override func didMoveToView(view: SKView) { 
    self.addCloudSprite(CGPointMake(self.frame.size.width+50, 200),delay: 0) 
    self.addCloudSprite(CGPointMake(self.frame.size.width+50 , 500),delay: 3) 
} 
0

레코드의 경우 스프라이트를 제거하려면이 방법으로 수행 할 수 있습니다.

self.removeChildrenInArray([cloudSprite1a]) 

필자가 아는 한 [] 기호가 필요하므로 Array에서만 수행 할 수 있습니다.