2017-11-28 15 views
0

"BuildViewController"というクラスで関数を呼び出し、SpriteNodeを作成してGameSceneに表示するために "GameScene"の関数を実行しますが、何も表示されません。関数を実行していますが、何らかの理由で関数内のノードを宣言すると機能しません。また、SpriteNodeを作るためのコードは、それが関数でなく、GameSceneだけであると想定されるので完全に機能します。物理ボディを持つSKSpriteノードを作成する関数

// 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)  
    } 

私は多くのことを試しました。関数内でスプライトを返し、関数を使って子を追加するようにしました。ありがとうございます、必要に応じて質問してください!

各クラスの完全なコードは次のとおりですが、私はそれは大変感謝しています!

// 
// 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") 

      }}}} 
+0

が、私は位置を変更すると明らかにそれがある:代わりに、あなたはこれを行う必要があります他のすべてのことをする。私はそれが役に立つかもしれないと思った –

答えて

0

あなたはGameSceneの2つのインスタンスを作成しました。私が受けています警告は、それが後で変更されていないため、「せ」定数に「VaRのSKSpriteNode」を変更する私を求めている

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"  
    self.addChild(farm)  
} 
関連する問題