Ios 如何使精灵对象设置为';触摸点的移动方向是什么?
所以我在玩,慢慢地做我的第一个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)
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]))
}