0
我想創建背景,有幾個雲從右到左移動,但是當我跑這個時,我只能看到在背景上創建的雲,但他們沒有移動。Spritkit在場景中添加了節點但未移動?
我有下面的類來創建雲,然後將它們添加到場景中。最後一個函數moveBGcloud()將從右向左移動雲。
import Foundation
import SpriteKit
import SpriteKit
class BGCloud :SKSpriteNode{
private func shuffle(cloudsArray: [SKSpriteNode]) -> [SKSpriteNode] {
var shuffledArray = cloudsArray;
for i in 0..<shuffledArray.count {
let j = Int(arc4random_uniform(UInt32(shuffledArray.count - i))) + i;
if i == j {continue}
swap(&shuffledArray[i], &shuffledArray[j]);
}
return shuffledArray;
}
private func randomBetweenNumbers(firstNum: CGFloat, secondNum: CGFloat) -> CGFloat {
return CGFloat(arc4random())/CGFloat(UINT32_MAX) * abs(firstNum - secondNum) + min(firstNum, secondNum);
}
func createClouds() -> [SKSpriteNode] {
var clouds = [SKSpriteNode]();
let cloud1 = SKSpriteNode(imageNamed: "Cloud 1");
cloud1.name = "BGCloud1";
let cloud2 = SKSpriteNode(imageNamed: "Cloud 2");
cloud2.name = "BGCloud2";
let cloud3 = SKSpriteNode(imageNamed: "Cloud 3");
cloud3.name = "BGCloud3"
let darkCloud = SKSpriteNode(imageNamed: "Dark Cloud");
darkCloud.name = "BGDarkCloud";
cloud1.xScale = 0.3;
cloud1.yScale = 0.3;
cloud2.xScale = 0.4;
cloud2.yScale = 0.4;
cloud3.xScale = 0.5;
cloud3.yScale = 0.5;
darkCloud.xScale = 0.2;
darkCloud.yScale = 0.2;
clouds.append(cloud1);
clouds.append(cloud2);
clouds.append(cloud3);
clouds.append(darkCloud);
clouds = shuffle(cloudsArray: clouds);
return clouds;
}
func arrangeBGCloudsInScene(scene: SKScene, minX: CGFloat, maxX: CGFloat,minY: CGFloat, maxY: CGFloat,speed:CGFloat) {
var clouds = createClouds();
for i in 0..<clouds.count {
var randomX = CGFloat();
var randomY = CGFloat();
randomX = randomBetweenNumbers(firstNum: minX, secondNum: maxX);
randomY = randomBetweenNumbers(firstNum: minY, secondNum: maxY);
clouds[i].position = CGPoint(x: randomX, y: randomY);
clouds[i].zPosition = 2;
scene.addChild(clouds[i]);
}
}
func moveBGcloud(speed:CGFloat){
let cloudSpeed = speed
self.position.x -= cloudSpeed
print("postion",self.position.x)
if self.position.x < -324 {
self.position.x = 332
}
}
}
在GameplayScene類
然後:(回到地面場景類)
我添加BGCloud類的實例
private var cloud1: BGCloud?
private var cloud2: BGCloud?
private var cloud3: BGCloud?
private var darkCloud:BGCloud?
private let BGCloud1Speed = 0.5
private let BGCloud2Speed = 0.7
private let BGCloud3Speed = 0.8
然後加入功能BGCloudController.arrangeBGCloudsInScene初始化背景
private func initializeGame() {
BGCloudController.arrangeBGCloudsInScene(scene: self.scene!, minX: minX, maxX: maxX, minY: minY, maxY: maxY, speed: CGFloat(BGCloud1Speed))
getBackgrounds();
}
從現場得到雲彩:
private func getBackgrounds() {
cloud1 = self.childNode(withName: "BGCloud1") as? BGCloud!
cloud2 = self.childNode(withName: "BGCloud2") as? BGCloud!
cloud3 = self.childNode(withName: "BGCloud3") as? BGCloud!
}
增加的CreateBGClouds功能移動從右背景雲更新功能左
override func update(_ currentTime: TimeInterval) {
createBGClouds()
}
private func createBGClouds(){
cloud1?.moveBGcloud(speed: CGFloat(BGCloud1Speed)) //only add cloud1 for testing
print("function called")
}
,當我跑的遊戲,我可以看到四個背景的雲彩,隨機在現場,但他們都沒有移動。好像是
BGCloud類中的moveBGcloud()函數未被調用。 Cloud1,2,3無法獲得價值。爲什麼?另外我沒有使用場景編輯器。
你能幫我檢查是什麼問題或我錯過了什麼。先謝謝你。
它看起來像在moveBGcloud方法,你是改變,而不是雲計算的x位置self.position.x,我想你會想要將您的雲作爲參數傳遞給該方法,以便它可以更改雲的x位置。那有意義嗎? –
你是否正在'update(_:currentTime)'中調用你的'moveBGCloud'方法?我認爲這絕對是你想第一步 – Pierce
@MSU_Bulldog不是真的。 'moveBGcloud'是'BGCloud'類的實例方法!!! –