Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使精灵对象设置为';触摸点的移动方向是什么?_Ios_Objective C_Xcode_Swift - Fatal编程技术网

Ios 如何使精灵对象设置为';触摸点的移动方向是什么?

Ios 如何使精灵对象设置为';触摸点的移动方向是什么?,ios,objective-c,xcode,swift,Ios,Objective C,Xcode,Swift,所以我在玩,慢慢地做我的第一个iOS游戏。我试图让我的精灵对象设置一条与播放器位置成一定角度的直线路径(这是用户最后一次触摸的位置) 我使用的代码使蜜蜂朝着播放器移动,并在到达它时停止,而不是从屏幕的一侧,穿过播放器,离开屏幕的另一侧 var beeSpeed = 2.0 var moveAccross = SKAction.moveTo(CGPointMake(player.position.x,player.position.y), duration:beeSpeed)

所以我在玩,慢慢地做我的第一个iOS游戏。我试图让我的精灵对象设置一条与播放器位置成一定角度的直线路径(这是用户最后一次触摸的位置)

我使用的代码使蜜蜂朝着播放器移动,并在到达它时停止,而不是从屏幕的一侧,穿过播放器,离开屏幕的另一侧

    var beeSpeed = 2.0

    var moveAccross = SKAction.moveTo(CGPointMake(player.position.x,player.position.y), duration:beeSpeed)
    badBee.runAction(moveAccross)
我将有许多对象不断繁殖,所有这些对象都应该在繁殖时设置一次到玩家位置的路径

任何帮助都会很好

我想我找到了答案,如果有人能检查我的代码并确保它做了正确的事情,那就太好了:)


你必须计算从繁殖点到玩家的坡度,然后插值到屏幕外的某个地方

func add(location:CGPoint)
{
    let bee = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(10, 10))
    bee.name = "Bee"
    bee.position = location
    self.addChild(bee)

    let slopeToPlayer = (bee.position.y - player.position.y) / (bee.position.x - player.position.x)
    let constant = bee.position.y - slopeToPlayer * bee.position.x

    let finalX : CGFloat = bee.position.x < player.position.x ? 500.0 : -500.0 // Set it to somewhere outside screen size

    let finalY = constant +  slopeToPlayer * finalX

    let distance = (bee.position.y - finalY) * (bee.position.y - finalY) + (bee.position.x - finalX) * (bee.position.x - finalX)
    let beeSpeed : CGFloat = 100.0
    let timeToCoverDistance = sqrt(distance) / beeSpeed

    let moveAction = SKAction.moveTo(CGPointMake(finalX, finalY), duration: NSTimeInterval(timeToCoverDistance))
    let removeAction = SKAction.runBlock { () -> Void in
        bee.removeFromParent()
        println("removed")
    }
    bee.runAction(SKAction.sequence([moveAction,removeAction]))

}
func添加(位置:CGPoint)
{
let bee=SKSpriteNode(颜色:UIColor.redColor(),大小:CGSizeMake(10,10))
bee.name=“bee”
位置=位置
self.addChild(蜜蜂)
设slopeToPlayer=(bee.position.y-player.position.y)/(bee.position.x-player.position.x)
设常数=bee.position.y-slopeToPlayer*bee.position.x
让finalX:CGFloat=bee.position.x在
bee.removeFromParent()
println(“删除”)
}
运行操作(SKAction.sequence([moveAction,removeAction]))
}

因此,每个对象都将沿着从繁殖点到玩家当前位置的直线路径继续,并通过玩家,然后在离开屏幕时被移除?您的代码是否有效?玩家。位置。x玩家。位置。x应该是零?这没有道理。你必须计算从产卵点到玩家的斜率,然后插值到屏幕外的某个地方。这太神奇了,非常感谢!!!我的算法运行得很好,但由于计算不正确,效果很差,而你的算法运行得很好。
func add(location:CGPoint)
{
    let bee = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(10, 10))
    bee.name = "Bee"
    bee.position = location
    self.addChild(bee)

    let slopeToPlayer = (bee.position.y - player.position.y) / (bee.position.x - player.position.x)
    let constant = bee.position.y - slopeToPlayer * bee.position.x

    let finalX : CGFloat = bee.position.x < player.position.x ? 500.0 : -500.0 // Set it to somewhere outside screen size

    let finalY = constant +  slopeToPlayer * finalX

    let distance = (bee.position.y - finalY) * (bee.position.y - finalY) + (bee.position.x - finalX) * (bee.position.x - finalX)
    let beeSpeed : CGFloat = 100.0
    let timeToCoverDistance = sqrt(distance) / beeSpeed

    let moveAction = SKAction.moveTo(CGPointMake(finalX, finalY), duration: NSTimeInterval(timeToCoverDistance))
    let removeAction = SKAction.runBlock { () -> Void in
        bee.removeFromParent()
        println("removed")
    }
    bee.runAction(SKAction.sequence([moveAction,removeAction]))

}