代码之家  ›  专栏  ›  技术社区  ›  Vasya2014

精灵跟随一个不同的精灵并延迟

  •  1
  • Vasya2014  · 技术社区  · 7 年前

    我做了我的第一个应用程序,问题出现了,如何使一个物体以一定的速度跟随另一个物体,试图找到问题的答案,但没有找到。 这就是我所做的,但没有拖延

    创造英雄和枪支。

     func createHero() {
     
        hero = SKSpriteNode(texture: heroTexture)
        
        //Anim hero
        heroTextureArray = [SKTexture(imageNamed: "hero.png"), SKTexture(imageNamed: "Fly1.png"), SKTexture(imageNamed: "Fly2.png"), SKTexture(imageNamed: "Fly3.png"), SKTexture(imageNamed: "Fly4.png")]
        let heroFlyAnimation = SKAction.animate(with: heroTextureArray, timePerFrame: 0.1)
        let flyHero = SKAction.repeatForever(heroFlyAnimation)
        hero.run(flyHero)
        
        hero.position = position
        hero.size.height = 60
        hero.size.width = 65
        
        hero.physicsBody?.isDynamic = true
        hero.physicsBody?.allowsRotation = false
        hero.zPosition = 1
        
        heroObject.addChild(hero)
    }
    
    
     func createGuns(){
        
        gunsTexture = SKTexture(imageNamed: "guns")
        
        guns = SKSpriteNode(texture: gunsTexture)
        
        guns.zPosition = 1
        guns.position = CGPoint(x: self.frame.width/2, y: 0)
        guns.physicsBody?.isDynamic = true
        guns.size.height = 35
        guns.size.width = 40
        guns.zRotation = CGFloat(.pi/2.0)
    
        
        gunsObject.addChild(guns)
        
    }
    

    英雄运动

    var flag = false
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
         let touch = touches.first
            let location = touch?.location(in: self)
        
            if (physicsWorld.body(at: location!) != nil) {
                
               flag = true
            
        }
    }
    
     override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
         let touch = touches.first
         let touchLocation = touch!.location(in: self)
        let previousLocation = touch!.previousLocation(in: self)
        
        
        let hero = self.hero
        let guns = self.guns
        var heroX = hero.position.x + (touchLocation.x - previousLocation.x)
        
        heroX = max(heroX, hero.size.width / 2)
        heroX = min(heroX, size.width - hero.size.width / 2)
        
        var heroY = hero.position.y + (touchLocation.y - previousLocation.y)
        
        heroY = max(heroY, hero.size.height / 2 + 20)
        heroY = min(heroY, size.height - hero.size.height / 2)
        hero.position = CGPoint(x: heroX, y: heroY)
        guns.position = CGPoint(x: heroX, y: guns.position.y)
        guns.position = CGPoint(x: heroX, y: 20)
    }
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        flag = false
    }
    

    enter image description here

    1 回复  |  直到 4 年前
        1
  •  1
  •   Vasya2014    7 年前

    有必要添加SKAction

    let moveGuns = SKAction.moveTo (x: heroX, duration: 3) 
    let moveBgForever = SKAction.repeatForever (SKAction.sequence ([moveGuns]))
    guns.run (moveBgForever)