Несколько подвижных объектов в Swift - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь создать игру, в которой есть пять простых объектов, к которым пользователь может прикоснуться, и передвинуть их, на них есть физика, но при затруднении заставить их двигаться отдельно, любая помощь будет принята.

Это то, чтоУ меня пока что:

import SpriteKit

class GameScene: SKScene {
    let starSprite = SKSpriteNode(imageNamed: "starSprite")
    let circleSprite = SKSpriteNode(imageNamed: "circleSprite")
    let squareSprite = SKSpriteNode(imageNamed: "squareSprite")
    let triangleSprite = SKSpriteNode(imageNamed: "triangleSprite")
    let moonSprite = SKSpriteNode(imageNamed: "moonSprite")

    var touchLocation = CGPoint()

    override func didMove(to view: SKView) {
        layoutScene()
    }

    func layoutScene() {
        backgroundColor = UIColor(red: 44/255, green: 62/255, blue: 
        80/255, alpha: 1.0)

        starSprite.size = CGSize(width: 350, height: 350)
        starSprite.position = CGPoint(x: frame.midX, y: frame.midY)
        starSprite.physicsBody = SKPhysicsBody(texture: 
        starSprite.texture!, size: starSprite.size)

         addChild(starSprite)

        circleSprite.size = CGSize(width: 350, height: 350)
        circleSprite.position = CGPoint(x: 0, y: 100)
        circleSprite.physicsBody = SKPhysicsBody(texture: 
        circleSprite.texture!, size: circleSprite.size)
        addChild(circleSprite)

        squareSprite.size = CGSize(width: 350, height: 350)
        squareSprite.position = CGPoint(x: 0, y: 200)
        squareSprite.physicsBody = SKPhysicsBody(texture: 
        squareSprite.texture!, size: squareSprite.size)
        addChild(squareSprite)

        triangleSprite.size = CGSize(width: 350, height: 350)
        triangleSprite.position = CGPoint(x: 0, y: 300)
        triangleSprite.physicsBody = SKPhysicsBody(texture: 
        triangleSprite.texture!, size: triangleSprite.size)
        addChild(triangleSprite)

        moonSprite.size = CGSize(width: 350, height: 350)
        moonSprite.position = CGPoint(x: 0, y: 400)
        moonSprite.physicsBody = SKPhysicsBody(texture: 
        moonSprite.texture!, size: moonSprite.size)
        addChild(moonSprite)
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches{
            touchLocation = touch.location(in: self)
            moonSprite.position.x = (touchLocation.x)
            moonSprite.position.y = (touchLocation.y)
            starSprite.position.x = (touchLocation.x)
            starSprite.position.y = (touchLocation.y)
        }
    }
}

1 Ответ

0 голосов
/ 30 января 2019

Вы должны сначала определить, какой объект был выбран в touchDown, затем изменить положение в touchSMoved и отпустить объект в TouchUp!

определите значение как темп и используйте его!

Кроме того, и вам не нужно использовать это

moonSprite.position.x = (touchLocation.x)
moonSprite.position.y = (touchLocation.y)

лучше

 moonSprite.position = touchLocation

Отредактированный код

    //
//  GameScene.swift
//  aa
//
//  Created by ehsan on 1/30/19.
//  Copyright © 2019 ehsan. All rights reserved.
//

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    private var spinnyNode1 = SKSpriteNode(imageNamed: "1")
    private var spinnyNode2 = SKSpriteNode(imageNamed: "2")
    private var movingSprite:SKSpriteNode?



    override func didMove(to view: SKView) {

        addChild(spinnyNode1)
        addChild(spinnyNode2)

    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

        for t in touches {

            let location = t.location(in: self)
            let node = self.atPoint(location)
            if node is SKSpriteNode
            {
                movingSprite = node as? SKSpriteNode
            }


        }

    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

            if movingSprite != nil

            {

                movingSprite!.position = touchLocation
            }

    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        movingSprite = nil
    }

    override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
        for t in touches {



        }
    }


    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered
    }
}
...