SKNodes以一致的速度跟随并阻止它们闪烁吗?

时间:2019-03-12 15:33:59

标签: swift sprite-kit game-physics

目前正在上课的SoloProject并决定自己学习SpriteKit。我决定做一个自上而下的僵尸射击游戏,我有很多问题,但到目前为止,这是我似乎无法解决或找不到解决方案的两个主要问题。

问题1

僵尸越接近目标,速度越慢,如果我提高速度,它们只是从屏幕外加速,而随着它们越来越近,速度仍会变慢(我读过某个地方,该功能在更新中很糟糕,但是我还是做到了...)

我想使其以3的速度生成,并且当玩家靠近或远离时它保持为3。(目前,我使用Youtube上的模拟摇杆代码来移动角色)< / p>

func zombieAttack() {
    let location = player.position
    for node in enemies {
        let followPlayer = SKAction.move(to: player.position, duration: 3)
        node.run(followPlayer)
        //Aim
        let dx = (location.x) - node.position.x
        let dy = (location.y) - node.position.y
        let angle = atan2(dy, dx)

        node.zRotation = angle

        //Seek
        let velocityX =  cos(angle) * 1
        let velocityY =  sin(angle) * 1

        node.position.x += velocityX
        node.position.y += velocityY
    }
}
override func update(_ currentTime: TimeInterval) {
    zombieAttack()
}

问题2

此外,当多个僵尸靠近玩家时(上面的功能),它们开始发出刺耳的光芒,因此我允许它们重叠在一起以停止发出刺眼的光芒。

我想使它们更牢固?如果那是描述它的正确方法。基本上,我希望他们和玩家挤在一起**。

如果我在碰撞中添加敌人,它会发出嘶哑的声音,试图到达相同的位置。

private func spawnZombie() {
    let xPos = randomPosition(spriteSize: gameSpace.size)
    let zombie = SKSpriteNode(imageNamed: "skeleton-idle_0")
    zombie.position = CGPoint(x: -1 * xPos.x, y: -1 * xPos.y)
    zombie.name = "Zombie\(zombieCounter)"
    zombie.zPosition = NodesZPosition.enemy.rawValue
    let presetTexture = SKTexture(imageNamed: "skeleton-idle_0.png")
    zombie.physicsBody = SKPhysicsBody(texture: presetTexture, size: presetTexture.size())
    zombie.physicsBody?.isDynamic = true
    zombie.physicsBody?.affectedByGravity = false
    zombie.physicsBody?.categoryBitMask = BodyType.enemy.rawValue
    zombie.physicsBody?.contactTestBitMask = BodyType.bullet.rawValue
    zombie.physicsBody?.collisionBitMask = BodyType.player.rawValue
    zombie.zRotation = 1.5
    zombie.setScale(0.2)
    enemies.append(zombie)
    zombieCounter += 1
    run(SKAction.playSoundFileNamed("ZombieSpawn", waitForCompletion: false))
    keepEnemiesSeperated() // ADDED FROM UPDATED EDIT*
    addChild(zombie)
}

让我知道是否需要发布更多代码或对其进行更好的解释,我在学习Swift方面花了五个月的时间,只有一个星期半的SpriteKit经验,并且第一次在StackOverFlow上发布。预先谢谢大家!

编辑:我正在使用从having a node follow at a constant speed中找到的代码,但是由于它不起作用,我认为我做的不正确。我添加了以下代码:

private func keepEnemiesSeparated() {
    // Assign constrain
    for enemy in enemies {
        enemy.constraints = []
        let distanceBetween = CGFloat(60)
        let constraint = SKConstraint.distance(SKRange(lowerLimit: distanceBetween), to: enemy)
        enemy.constraints!.append(constraint)
    }
}

0 个答案:

没有答案