gpt4 book ai didi

ios - 使用物理体创建 SKSprite 节点的函数

转载 作者:行者123 更新时间:2023-11-30 11:58:22 27 4
gpt4 key购买 nike

我在名为“BuildViewController”的类中调用一个函数,然后它从我的“GameScene”运行一个函数来创建一个 SpriteNode 并将其显示在我的 GameScene 上,但什么也没有出现。它正在通过函数运行,但由于某种原因,当我在函数中声明节点时,它不起作用。此外,当 SpriteNode 不在函数中而仅在 GameScene 中时,使 SpriteNode 正常工作的代码也能正常工作。

// 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 ,并使用该函数添加一个 child 。谢谢,如有需要请提问!

每个类的完整代码如下,但我不认为这是必要的,谢谢!

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

}}}}

最佳答案

您创建了两个 GameScene 实例。相反,您应该这样做:

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

关于ios - 使用物理体创建 SKSprite 节点的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47538271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com