私のSwift Gameには、ミサイルの撮影を制御する3つの機能があります。これらの2つにパラメータがあります。しかし、didMoveのパラメータを適切に呼び出すのに問題があります。たとえば、 "func direction()"を追加すると、swiftは "to target"と "from"のCGPointを追加する必要があります。私はそこに何を入力すると思いますか?私は実際には以前にパラメータに取り組んでいませんでした。ゲームはうまく動作しますが、didMoveで呼び出すことはできません。たとえば、「再試行」を押すと、didMoveで呼び出されていないので、ミサイルは射撃されません。それはCGPointsある2つのパラメータをとり、それがCGFloatを返す手段didMoveのパラメータを呼び出す関数
func direction(to target : CGPoint, from: CGPoint) -> CGFloat
:
func fireMissile() {
let missile = SKSpriteNode(color: .yellow, size: CGSize(width: 20,
height: 5))
missile.name = "Missile"
missile.position = CGPoint(x: player.position.x + 28, y:
player.position.y + 10)
missile.zPosition = 2
missile.physicsBody = SKPhysicsBody(rectangleOf: missile.size)
missile.physicsBody?.isDynamic = false
missile.physicsBody?.categoryBitMask = ColliderType.Bullet
missile.physicsBody?.collisionBitMask = ColliderType.Enemy |
ColliderType.Boat
missile.physicsBody?.contactTestBitMask = ColliderType.Enemy |
ColliderType.Boat
let missileFlightTime = travelTime(to: missileDestination, from:
player.position, atSpeed: missileSpeed)
missile.zRotation = direction(to: missileDestination, from:
missile.position)
self.addChild(missile)
let missileMove = SKAction.move(to: missileDestination,
duration:
TimeInterval(missileFlightTime))
let missileRemove = SKAction.removeFromParent()
missile.run(SKAction.sequence([missileMove, missileRemove]))
}
func travelTime(to target : CGPoint, from : CGPoint, atSpeed speed :
CGFloat) -> TimeInterval {
let distance = sqrt(pow(abs(target.x - from.x),2) +
pow(abs(target.y - from.y),2))
return TimeInterval(distance/speed)
}
func direction(to target : CGPoint, from: CGPoint) -> CGFloat {
let x = target.x - from.x
let y = target.y - from.y
var angle = atan(y/x)
if x < 0 {
angle = angle + CGFloat.pi
}
return angle
}
これはおなじみのようですね:-) –
ハハ、私はそれをしています..:D – Flinigan