2
私は上から下に移動して繰り返す私のアプリケーションに背景画像を持っています。 x時間後に別の画像を画面に表示したい。スウィフトゲーム時間やスコアのシーンを変更しますか?
これはどうでしょうか?
あまりにも多くのレイヤーを避けるために最初のbgを削除するのが最善でしょうか?
override func didMove(to view: SKView) {
let bgTexture = SKTexture(imageNamed: "bg1.png")
let moveBGanimation = SKAction.move(by: CGVector(dx: 0, dy: -bgTexture.size().height), duration: 4)
let shiftBGAnimation = SKAction.move(by: CGVector(dx: 0, dy: bgTexture.size().height), duration: 0)
let moveBGForever = SKAction.repeatForever(SKAction.sequence([moveBGanimation, shiftBGAnimation]))
var i: CGFloat = 0
while i < 3 {
bg = SKSpriteNode(texture: bgTexture)
bg.position = CGPoint(x: self.frame.midX, y: bgTexture.size().height * i)
bg.size.width = self.frame.width
bg.zPosition = -2
bg.run(moveBGForever)
self.addChild(bg)
i += 1
}
bg2Timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(self.moveBG2), userInfo: nil, repeats: false)
}
func moveBG2() {
let bg2Texture = SKTexture(imageNamed: "bg2.png")
let moveBG2animation = SKAction.move(by: CGVector(dx: 0, dy: -bg2Texture.size().height * 2), duration: 8)
let shiftBG2Animation = SKAction.move(by: CGVector(dx: 0, dy: bg2Texture.size().height), duration: 0)
let moveBG2Forever = SKAction.repeatForever(SKAction.sequence([moveBG2animation, shiftBG2Animation]))
var j: CGFloat = 0
while j < 3 {
bg2 = SKSpriteNode(texture: bg2Texture)
bg2.position = CGPoint(x: self.frame.midX, y: bg2Texture.size().height + bg2Texture.size().height * j)
bg2.size.width = self.frame.width
bg2.zPosition = -1.5
bg2.run(moveBG2Forever)
self.addChild(bg2)
j += 1
}
}
私はちょうどそれを正しく実装する苦労している:
はあなたのコードを見た後、これは私が思い付くことができたものです。私は、コードの各ビットをどこに置くのが最も良いか分からないのですか?そして、今はどのような順序ですか。私は物事を動かし続け、私はそこに着くだろうと確信している。ありがとう! –
私はそれがほぼ正しいと思います。改訂された質問をご覧ください。私はbgTextureをどこかで宣言する必要があります。エラーが発生したと思います。 "未解決の識別子" bgTexture ""を使用します。 –
@AlexIngramパラメータの名前がローカル変数と競合していると思います。今編集されました。 – Sweeper