我在一个名为"BuildViewController“的类中调用了一个函数,然后它运行我的" GameScene”中的一个函数来创建一个SpriteNode并将其显示在我的GameScene上,但是什么也没有出现。它在函数中运行,但由于某种原因,当我在函数中声明节点时,它不起作用。此外,当SpriteNode不在函数中而只是在GameScene中时,使其完美工作的代码就像它应该的那样工作。
// I call the function in BuildViewController 
GameScene().buildfarm()
// here is the function, it is in the class "GameScene"
func buildfarm()  {
        var farm = SKSpriteNode(imageNamed: "farm.png")     
        farm.position = CGPoint(x: 100, y: 100)     
        farm.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 100, height: 100))     
        farm.physicsBody?.isDynamic = true     
        farm.physicsBody?.affectedByGravity = false     
        farm.name = "farm"     
        GameScene().addChild(farm)     
    }我试过很多方法..。比如在函数中返回sprite,并使用函数添加子对象。谢谢,有需要的时候可以提问题!
每个类的完整代码如下,但我不相信它是NECASSARY,谢谢!
//
//  BuildViewController.swift
//  MSB Game
//
//  Created by Matthew Jacobsen on 10/18/17.
//  Copyright © 2017 Matthew Jacobsen. All rights reserved.
//
import SpriteKit
import UIKit
class BuildViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    // Build the farm cuddi
    @IBAction func BuildFarm(_ sender: Any) {
        if gold >= 25 {
        print("Build The Farm")
            gold = gold - farmprice
           GameScene().buildfarm()
            foodpersecond = foodpersecond + 0.1
            print (foodpersecond)
        }
        else if gold < 25 {
            print("not enough gold")
        }
    }
    //Build the House cuddi
    @IBAction func BuildHouse(_ sender: Any) {
        if gold >= 100 {
            print("Build The House")
            gold = gold - houseprice
//
//
        }
        else if gold < 100 {
            print("not enough gold")
        }
    }
    /*
    // MARK: - Navigation
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */
}..。
//
//  GameScene.swift
//  MSB Game
//
//  Created by Matthew Jacobsen on 10/3/17.
//  Copyright © 2017 Matthew Jacobsen. All rights reserved.
//
import SpriteKit
import GameplayKit
import Foundation
import UIKit
// declare array of spritenodes
var buildings:[SKSpriteNode] = []
var gold = 150.0
var wood = 0.0
var stone = 0.0
var food = 100.0
let lgold = UILabel(frame: CGRect(x: 80, y: 0, width: 1000, height: 1000))
let lwood = UILabel(frame: CGRect(x: 80, y: 0, width: 200, height: 200))
let lstone = UILabel(frame: CGRect(x: 80, y: 0, width: 200, height: 200))
let lfood = UILabel(frame: CGRect(x: 80, y: 0, width: 200, height: 200))
var upgradel = SKShapeNode()
var cancell = SKShapeNode()
var upgradelabel = UILabel(frame: CGRect(x: 80, y: 0, width: 1000, height: 1000))
var cancellabel = UILabel(frame: CGRect(x: 80, y: 0, width: 200, height: 200))
var time = Timer()
var foodpersecond = 0.0
var woodpersecond = 0.0
var stonepersecond = 0.0
var goldpersecond = 0.0
var sellrate = 1.0
var foodstring = food.description
var goldstring = gold.description
let houseprice = 100.0
let farmprice = 25.0
let trainfarmer = 50.0
let trainsupervisor = 100.0
func sellfood() {
    if food >= 10 {
        food = food - (sellrate * 10)
        foodstring = food.description
        lfood.text = foodstring
        gold = gold + sellrate
        goldstring = gold.description
        lgold.text = goldstring
    }
}
class GameScene: SKScene {
    func buildfarm()  {
        var farm = SKSpriteNode(imageNamed: "farm.png")
        farm.position = CGPoint(x: 100, y: 100)
        farm.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 100, height: 100))
        farm.physicsBody?.isDynamic = true
        farm.physicsBody?.affectedByGravity = false
        farm.name = "farm"
        GameScene().addChild(farm)
    }
    var topbar = SKShapeNode()
    //buildings.append(farm)
    override func didMove(to view: SKView) {
        //label for all the food and stuff
        lgold.font = UIFont.preferredFont(forTextStyle: .title1)
        lgold.textColor = .yellow
        lgold.center = CGPoint(x: 70, y: 50)
        lgold.textAlignment = .center
        var goldstring = gold.description
        lgold.text = goldstring
        lwood.font = UIFont.preferredFont(forTextStyle: .title1)
        lwood.textColor = .brown
        lwood.center = CGPoint(x: 160, y: 50)
        lwood.textAlignment = .center
        var woodstring = wood.description
        lwood.text = woodstring
        lstone.font = UIFont.preferredFont(forTextStyle: .title1)
        lstone.textColor = .gray
        lstone.center = CGPoint(x: 250, y: 50)
        lstone.textAlignment = .center
        var stonestring = stone.description
        lstone.text = stonestring
        lfood.font = UIFont.preferredFont(forTextStyle: .title1)
        lfood.textColor = .red
        lfood.center = CGPoint(x: 340, y: 50)
        lfood.textAlignment = .center
        var foodstring = food.description
        lfood.text = foodstring
        backgroundColor = UIColor.brown
        self.view?.addSubview(lgold)
        self.view?.addSubview(lwood)
        self.view?.addSubview(lstone)
        self.view?.addSubview(lfood)
        //label for all the food and stuff
        topbar = SKShapeNode(rectOf: CGSize(width:800, height: 150))
        topbar.position = CGPoint(x: 00, y:600)
        topbar.fillColor = .black
        self.addChild(topbar)
        //Build - Train -
        time = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(GameScene.countertimer), userInfo: nil, repeats: true)
        //        var farm = SKSpriteNode(imageNamed: "farm.png")
        //        farm.position = CGPoint(x: 100, y: 100)
        //        farm.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 100, height: 100))
        //        farm.physicsBody?.isDynamic = true
        //        farm.physicsBody?.affectedByGravity = false
        //        farm.name = "farm"
        //        self.addChild(farm)
        func update(_ currentTime: TimeInterval) {
            // Called before each frame is rendered
        }
    }
    @objc func countertimer() {
        food = food + foodpersecond
        foodstring = food.description
        lfood.text = foodstring
    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch: AnyObject in touches {
            let pointOfTouch = touch.location(in: self)
            let nodeITapped = atPoint(pointOfTouch)
            let nameOfTappedNode = nodeITapped.name
            if nameOfTappedNode == "upgradewhite" {
                upgradel.removeFromParent()
                cancell.removeFromParent()
                cancellabel.removeFromSuperview()
                upgradelabel.removeFromSuperview()
                if gold >= 5 {
                    foodpersecond = foodpersecond + 0.5
                    gold = gold - 5.0
                    goldstring = gold.description
                    lgold.text = goldstring
                }}
            if nameOfTappedNode == "cancelwhite" {
                upgradel.removeFromParent()
                cancell.removeFromParent()
                cancellabel.removeFromSuperview()
                upgradelabel.removeFromSuperview()
            }
            if nameOfTappedNode == "farm" {
                upgradelabel.font = UIFont.preferredFont(forTextStyle: .title1)
                upgradelabel.textColor = .red
                upgradelabel.center = CGPoint(x: 100, y: 500)
                upgradelabel.textAlignment = .center
                upgradelabel.text = "UPGRADE"
                cancellabel.font = UIFont.preferredFont(forTextStyle: .title1)
                cancellabel.textColor = .red
                cancellabel.center = CGPoint(x: 300, y: 500)
                cancellabel.textAlignment = .center
                cancellabel.text = "CANCEL"
                upgradel = SKShapeNode(rectOf: CGSize(width:250, height: 150))
                upgradel.fillColor = .white
                upgradel.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 100, height: 100))
                upgradel.physicsBody?.isDynamic = true
                upgradel.position = CGPoint(x: -200, y:-250)
                upgradel.physicsBody?.affectedByGravity = false
                upgradel.name = "upgradewhite"
                cancell = SKShapeNode(rectOf: CGSize(width:250, height: 150))
                cancell.fillColor = .white
                cancell.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 100, height: 100))
                cancell.physicsBody?.isDynamic = true
                cancell.position = CGPoint(x: 150, y:-250)
                cancell.physicsBody?.affectedByGravity = false
                cancell.name = "cancelwhite"
                self.addChild(upgradel)
                self.addChild(cancell)
                self.view?.addSubview(cancellabel)
                self.view?.addSubview(upgradelabel)
                print("farm tapped")
            }}}}https://stackoverflow.com/questions/47538271
复制相似问题