2017-01-11 66 views
3

我正在用SpriteKit在Swift 3中開發一個小遊戲,並且我想將敵人移動到角色的方向,但是在敵人到達時總是停下來角色的初始位置。如何在不停止的情況下向一個方向移動物體

我這樣做:

enemigo.name = "enemigo" 
enemigo.position = CGPoint(x: 280, y: 100) 
enemigo.xScale = 1/1 
enemigo.yScale = 1/15 
addChild(enemigo) 


let movement1 = CGVector(
    dx: (enemigo.position.x - personaje.position.x)*10, 
    dy: (enemigo.position.y - personaje.position.y)*10 
) 

let actionTransaction = SKAction.move(by: movement1, duration: 20) 
enemigo.run(actionTransaction) 

我應該如何移動的敵人一個特定的方向,而不在角色的初始位置停止?

+0

基本上你想讓敵人追逐玩家? – Fluidity

+0

我想在不停止的情況下將敵人移向我角色的方向@流暢度 – HessianMad

+0

好的。您需要在場景的'.update()'方法中更新敵人的動作。否則,你的壞人只會得到一個動作......他需要更多! 此外,這裏是一個偉大的文章,做它適當的數學: https://www.raywenderlich.com/90520/trigonometry-games-sprite-kit-swift-tutorial-part-1 – Fluidity

回答

2

你已經完成了所有的努力工作,找出方向的向量。

現在你可以重複此moveBy action經常只要你喜歡,敵人將保持在同一方向移動,越走越,因爲move(by: CGVector)是相對的,不是絕對的:

let actionTransaction = SKAction.move(by: movement1, duration: 20) 

因此,所有你需要的do是永遠運行這個with a key,所以你可以從任何地方找到它,並隨時停止它。

run(SKAction.repeatForever(actionTransaction), withKey: "movingEnemy") 
+0

我有'let actionTransaction = SKAction.move(by:movement1,duration:20)'在一個函數中,我在'sceneDidLoad()'中調用了這個函數,它並沒有像我想要的那樣運行。我應該如何使用'run(SKAction.repeatForever(actionTransaction),withKey:「movingEnemy」)'? @Confused – HessianMad

+0

我認爲你讀了這個問題有點太字面意思糊塗:P – Fluidity

+0

@HessianMad我不認爲我們中的任何一個人仍然很理解你正在嘗試做什麼。你能否詳細說明一下? O,我明確表示贊同你的意思:),你是一個intentar entenderlo – Fluidity

1

或者,您可以考慮將GameplayKit與SpriteKit一起使用。 GameplayKit爲遊戲提供常用算法的標準實現,並可與SpriteKit一起使用。

不幸的是我不太熟悉它,所以我不能給你代碼。我建議看看Apple的GameplayKit編程指南。有一些功能可用於設置代理人(例如敵人)的目標移動到特定位置,避開障礙物,攔截其他代理或從代理人逃跑等。

因此,當您的玩家移動時,某些敵人可以編程來試圖抓住玩家,而其他的敵人可以試圖逃離玩家。其他敵人可以隨機四處遊蕩等。

所以簡而言之,GameplayKit可以爲SpriteKit遊戲添加相當強大的功能。這可能意味着多花一點時間來思考遊戲的架構,但最終如果您還會使用GameplayKit的其他功能,那麼這可能是值得的。

相關問題