首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建具有物理体的SKSprite节点的函数

创建具有物理体的SKSprite节点的函数
EN

Stack Overflow用户
提问于 2017-11-29 02:11:31
回答 0查看 39关注 0票数 0

我在一个名为"BuildViewController“的类中调用了一个函数,然后它运行我的" GameScene”中的一个函数来创建一个SpriteNode并将其显示在我的GameScene上,但是什么也没有出现。它在函数中运行,但由于某种原因,当我在函数中声明节点时,它不起作用。此外,当SpriteNode不在函数中而只是在GameScene中时,使其完美工作的代码就像它应该的那样工作。

代码语言:javascript
运行
复制
// 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,谢谢!

代码语言:javascript
运行
复制
//
//  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.
    }
    */

}

..。

代码语言:javascript
运行
复制
//
//  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")

            }}}}
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47538271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档