私はspritekitシーンを持っていて、spriteSceneNodeの1つに何らかの一連のアクションを追加しました。 たとえば、point1に移動するnode1というspriteSceneNodeは、point2、point3などに移動します。これは、 "SKAction.moveTo"関数を使用して実装されます。私の質問があるspriteSceneNodeがios SpriteKitのポイントに到達したときに関数をトリガする方法
、
は、それが各ポイント(ポイント1またはポイント2またはPOINT3)に到達したときにカスタム関数を呼び出すことが可能ですか。?ここにコードを追加してください。
func MoveObjectToAnotherPosition(arrayOfPoints : [CGPoint],object: SKSpriteNode ) {
let from = object.position
var curPoint1 = object.position
let move = SKAction.move(to: from ,duration: 0.5)
var arrayOfMove : [SKAction] = []
arrayOfMove.append(move)
for point in (arrayOfPoints) {
let move2 = SKAction.move(to: point,duration: 2.5)
let deltaX = point.x - curPoint1.x
let deltaY = point.y - curPoint1.y
let angle = atan2(deltaY, deltaX)
// let graph = childNode(withName: "Graph1")?
print(angle)
let ang = point.angle(to: curPoint1)
print(ang)
let codeToRunWhenReachingPointX = SKAction.run {
let anglevalue = angle + 90 * self.DegreesToRadians
self.movObject.zPosition = anglevalue
print(anglevalue)
}
//print(anglevalue)
let rotate = SKAction.rotate(byAngle: -angle, duration: 0.0)
arrayOfMove.append(codeToRunWhenReachingPointX)
arrayOfMove.append(move2)
curPoint1 = point
}
let moveToSequence = SKAction.sequence(arrayOfMove)
object.run(moveToSequence)
}
助けが必要ですか?
「一連のアクションを実行するとcodeToRunWhenReachingPointXが完了するのを待つことはない」とはどういう意味ですか?あなたが別のスレッドにそれを投げない限り、ブロックは1フレームですべてを実行します。ブロックが完了していない場合、あなたのアプリケーションはロックされ遅れるでしょう – Knight0fDragon
私はこれに間違っているかもしれませんが、そのブロック(または他の関数を呼び出す関数、他のアニメーションなど)で実行する大きな関数を入れてください。 「大きな機能」が完了する前に、ノードの開始点が2番目の点に移動していることがわかります。少なくとも、これは私の単純なスプライトキットプロジェクトで見たものです。たぶん私は間違っています。より良い方法がありますか? – JohnV
私はこの問題に遭遇していたので、それを試してみる必要があります(私はこの問題に遭遇したため、次のアクションに移動するためにcustomAnimationを使用しなければなりません) – Knight0fDragon