[英]Swift - Increase speed of a moving Node using SpriteKit
我正在從事類似於乒乓球的游戲,在開始游戲時,我會以隨機方向向球施加脈沖,該方向位於屏幕的中心,例如
func impulse(){
let randomNum:UInt32 = arc4random_uniform(200)
let someInt:Int = Int(randomNum)
//Ball Impulse
if someInt<49{
ball.physicsBody?.applyImpulse(CGVector(dx: ballSpeed+3, dy: ballSpeed-5))
}else if someInt<99{
ball.physicsBody?.applyImpulse(CGVector(dx: ballSpeed+5, dy: -ballSpeed+5))
}else if someInt<149{
ball.physicsBody?.applyImpulse(CGVector(dx: -ballSpeed-5, dy: -ballSpeed+5))
}else if someInt<200{
ball.physicsBody?.applyImpulse(CGVector(dx: -ballSpeed-3, dy: ballSpeed-5))
}
}
其中ballSpeed是球的預設速度。 那么,有什么方法可以使球在運動過程中隨着持續時間逐漸增加其速度嗎? 由於球會在屏幕周圍不斷跳動,因此很難通過dx和dy向其施加力。
編輯-
我使用以上方法只是為了在游戲開始時為球分配一個隨機的象限/方向。
開始,當實施脈沖方法時,例如游戲開始圖像
我想在玩游戲的過程中隨着時間的推移以預定單位增加球的速度
好,你去! 無論如何,球會不斷變快!!! 調整amount
以確定每幀球獲得的速度。
class GameScene: SKScene, SKPhysicsContactDelegate {
let ball = SKShapeNode(circleOfRadius: 20)
var initialDY = CGFloat(0)
var initialDX = CGFloat(0)
override func didMove(to view: SKView) {
self.physicsBody = SKPhysicsBody(edgeLoopFrom: frame)
self.physicsWorld.gravity = CGVector.zero
// Configure ball pb:
let pb = SKPhysicsBody(circleOfRadius: 20)
ball.physicsBody = pb
addChild(ball)
pb.applyImpulse(CGVector(dx: 10, dy: 10))
}
override func update(_ currentTime: TimeInterval) {
initialDX = abs(ball.physicsBody!.velocity.dx)
initialDY = abs(ball.physicsBody!.velocity.dy)
}
override func didSimulatePhysics() {
guard let pb = ball.physicsBody else { fatalError() }
// decrease this to adjust the amount of speed gained each frame :)
let amount = CGFloat(5)
// When bouncing off a wall, speed decreases... this corrects that to _increase speed_ off bounces.
if abs(pb.velocity.dx) < abs(initialDX) {
if pb.velocity.dx < 0 { pb.velocity.dx = -initialDX - amount }
else if pb.velocity.dx > 0 { pb.velocity.dx = initialDX + amount }
}
if abs(pb.velocity.dy) < abs(initialDY) {
if pb.velocity.dy < 0 { pb.velocity.dy = -initialDY - amount }
else if pb.velocity.dy > 0 { pb.velocity.dy = initialDY + amount }
}
}
}
您可以將其修改為僅使用SKAction.repeatForever(.sequence([.wait(forDuration: TimeInterval, .run( { code } )))
每5秒提高一次速度SKAction.repeatForever(.sequence([.wait(forDuration: TimeInterval, .run( { code } )))
但是IMO不斷提高速度會更加出色,並且易於實施。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.