0

hi I have a node traveling back and forth along a path. I am trying to integrate the moving shapeNode as in the hello world example to trail my moving node. I'm using a trigger from frame update to trigger the copying of the shape node. And using the position of the travelling node.

The problem is that the trail has some sort of offset and i don't know where its coming from. I have tried to compensate but to no avail. I'm wondering if it might have anything to do with the actions. Thanks for reading.

I have tried looking at this link but i cannot translate

enter image description here

Here is my code so far
spriteKit xcode 9 swift 4 iPad Air

//  GameScene.swift


import SpriteKit

    class GameScene: SKScene, SKPhysicsContactDelegate {
    var borderBody = SKPhysicsBody()
    var myMovingNode = SKSpriteNode()
    var trailNode : SKShapeNode?

override func didMove(to view: SKView) {
    //Define Border
    borderBody = SKPhysicsBody(edgeLoopFrom: self.frame)
    borderBody.friction = 0
    self.physicsBody = borderBody
    physicsWorld.gravity = CGVector(dx: 0.0, dy: 0.0)
    physicsWorld.contactDelegate = self

    //Define myMovingNode
    myMovingNode = SKSpriteNode(imageNamed: "greenball")
    myMovingNode.size.width = 50
    myMovingNode.size.height = 50
    let myMovingNodeBody:CGSize = CGSize(width: 50, height: 50)
    myMovingNode.physicsBody = SKPhysicsBody.init(rectangleOf: myMovingNodeBody)
    myMovingNode.zPosition = 2
    addChild(myMovingNode)

    //Make Path for myMovingNode to travel
    let myPath = CGMutablePath()
    myPath.move(to: CGPoint(x: 30, y: 30))

    myPath.addLine(to: CGPoint(x: 500, y: 500))

    /*This is another path to try*/
     // myPath.addCurve(to: CGPoint(x: 800, y: 700), control1: CGPoint(x: 500, y: 30), control2: CGPoint(x: 50, y: 500))

    /*This draws a line along myPath*/
    let myLine = SKShapeNode(path: myPath)
    myLine.lineWidth = 10
    myLine.strokeColor = .green
    myLine.glowWidth = 0.5
    myLine.zPosition = 2
    addChild(myLine)

    /*This sets myMovingNode running along myPath*/
    let actionForward = SKAction.follow(myPath, asOffset: false, orientToPath: true, duration: 10)
    let actionReverse = actionForward.reversed()
    let wait = SKAction.wait(forDuration: 1)
    let actionSequence = SKAction.sequence([actionForward, wait, actionReverse, wait])
    myMovingNode.run(SKAction.repeatForever(actionSequence))

    /*This defines TrailNode and its actions*/
    trailNode = SKShapeNode.init(rectOf: CGSize.init(width: 20, height: 20), cornerRadius: 10)
    if let trailNode = trailNode {
    trailNode.lineWidth = 1
    trailNode.fillColor = .cyan
    trailNode.run(SKAction.sequence([SKAction.wait(forDuration: 5),
                  SKAction.fadeOut(withDuration: 3),
                  SKAction.removeFromParent()]))
    }//Eo if Let

}//eo overdrive


func timeFunction (){/*This is controlled by func update*/
    let n = trailNode?.copy() as! SKShapeNode?

    /*this is where i'm trying to compensate*/
    let movingNodeX = myMovingNode.position.x
    let movingNodeY = myMovingNode.position.y
    let movingNodeOffSet = CGPoint(x: movingNodeX - 0, y: movingNodeY - 0)

    n?.position = movingNodeOffSet
    myMovingNode.addChild(n!)
}


var frameCounter = 0
override func update(_ currentTime: TimeInterval) {
    // print( "Called before each frame is rendered")
    if frameCounter == 10{frameCounter = 0; timeFunction()}
    frameCounter = frameCounter + 1
}

}//class GameScene
oldman
  • 145
  • 1
  • 15

1 Answers1

0

hi in answer to my own question. It was the simplest. On the last line change from
myMovingNode.addChild(n!) to addChild(n!)

oldman
  • 145
  • 1
  • 15