SpriteKit 시도 path 11개를 사용하여 Homming

3196 단어 SwiftSpriteKit

적은 구불구불 유저를 향해 이동하고, 적의 총알은 이쪽으로 오며 난이도를 높인다.
황록색의 적은 출현 시기의 유저 위치를 목표로 구불구불 이동하여 접근한다
if (enemy.enemyColor == SKColor.greenColor()) {

    // プレイヤーの位置
    let dragon: DragonUnit = childNodeWithName("dragon") as! DragonUnit
    // CGPath の宣言
    let path:CGMutablePath = CGPathCreateMutable()
    let y = Int(arc4random() % 450) + 150
    // 始点を決定
    CGPathMoveToPoint(path, nil, CGRectGetMaxX(self.frame), CGFloat(y))

    var cp1x : CGFloat = (2 * CGRectGetMaxX(self.frame) + dragon.position.x)/3
    var cp1y : CGFloat = CGRectGetMinY(self.frame)
    var cp2x : CGFloat = (CGRectGetMaxX(self.frame) + 2 * dragon.position.x)/3
    var cp2y : CGFloat = CGRectGetMaxY(self.frame)

    //最終目標はプレイヤー
    CGPathAddCurveToPoint(path, nil, cp1x, cp1y, cp2x, cp2y, dragon.position.x,     dragon.position.y)

    //プレイヤーの位置から画面の端までの動き                     
    cp1x = dragon.position.x - (CGRectGetMaxX(self.frame) - dragon.position.x)/3
    cp1y = CGRectGetMinY(self.frame)
    cp2x = dragon.position.x - (CGRectGetMaxX(self.frame) - dragon.position.x)*2/3
    cp2y = CGRectGetMaxY(self.frame)

    CGPathAddCurveToPoint(path, nil, cp1x, cp1y, cp2x, cp2y,    CGRectGetMinX(self.frame), CGRectGetMidY(self.frame))

    //作ったCGPathをSKActionにセット
    let sequenceLeft = SKAction.followPath(path, asOffset: false,orientToPath: false, duration: 3.0)
    let remove = SKAction.removeFromParent()
    let sequence = SKAction.sequence([sequenceLeft, remove])

    // 敵SKSpriteNodeのrunActionにセット 
    enemy.runAction(sequence)
}
노란 적은 플레이어를 목표로 사격을 합니다.
var enemyShot1Last:CFTimeInterval! // 敵ショットタイミング

override func update(currentTime: CFTimeInterval) {

  //敵ショット
     if(enemyShot1Last == nil){
         enemyShot1Last = currentTime
     }

     if(enemyShot1Last+1.5 <= currentTime){
         if(!self.paused){
             enemyShot1Fire()
         }
         enemyShot1Last = currentTime
     }
}
적의 총알은 노란색 적만이 화면에서 출력할 수 있다.
if (enemy.enemyColor == SKColor.yellowColor()){
    enemy.name = "yellow"
}
적의 총알은 유저를 목표로 하는 동시에 화면의 바깥쪽으로 이동해야 하기 때문에 출발점에서 유저의 x축과 y축 사이의 거리, 그리고 화면의 가장자리(x축=0)에서 끝점까지의 y축
if((childNodeWithName("yellow")) != nil){
    let action = SKAction.animateWithTextures([b1, b2, b3, b4], timePerFrame: 0.5)
    fire.runAction(SKAction.repeatActionForever(action))
    fire.size = CGSizeMake(60, 60)

    fire.position.x = enemyYellow.position.x + 5
    fire.position.y = enemyYellow.position.y

    let dragon: DragonUnit = childNodeWithName("dragon") as! DragonUnit

    let path:CGMutablePath = CGPathCreateMutable()

    // yの座標算出
    let y2 : CGFloat = fire.position.y -
     (fire.position.x * (fire.position.y -  dragon.position.y))/
     (fire.position.x - dragon.position.x)

    CGPathMoveToPoint(path, nil, fire.position.x, fire.position.y)
    CGPathAddLineToPoint(path, nil, 0, y2)

    fire.runAction(sequence)

    self.addChild(fire)
}

좋은 웹페이지 즐겨찾기