2014-11-21 215 views
3

我有點想用SO來指出一些事情。Screeps幾個錯誤/問題

首先,在這個遊戲中'腳本'有點奇怪,因爲與'普通'腳本不同,事情執行的方式是不同的。我們都知道,在腳本中,第一件事,首先被執行。所以如果我有:

Game.spawns.Spawn1.createCreep([Game.WORK, Game.WORK, Game.CARRY, Game.MOVE], 'worker1'); 
Game.spawns.Spawn1.createCreep([ Game.TOUGH, Game.TOUGH, Game.MOVE, Game.HEAL], 'healer1'); 

你會假設工人1會被創建。那是不正確的。 Healer1被創建。啓發人們關於腳本執行的方式將是有用的。現在上面的例子主要是簡單的,但在我的情況下,我有一堆聲明,並花了一段時間才弄清楚。

接下來是蠕變名稱。如果發生蠕變死亡,名稱應該「消失」。我確實檢查過這個名字,'這個名字'可用'再次使用,因爲某些原因,這個名字只有在一些滴答聲後纔可用。不是即時的!所以客戶和'服務器'之間有區別。現在,通過迭代許多時間,而不是重用名稱,這顯然是可以解決的。說實話,我更喜歡重用名字。爲什麼?也許你的腳本會運行多年,這會導致像'worker1209128102981209128'這樣的名字,這在我的OCD意見中不是'好'。在我的情況下,我等待,直到錯誤'名稱已被使用'消失'幾個滴答,然後創建它。你有點'失去'的時間。

Console.log(); (空),會導致你的控制檯精神。風格會變得'迷路'。

接下來的事情:內存狀態並不總是在新遊戲中清除。導致一些奇怪的事情:你已經有自己的記憶中的東西,或者敵人的蠕動波已經在波1以外的波上。

另一件我沒有在API中找到的東西; Creeps首先在他們的第一個模塊上獲得命中。因此,自從它是一個「無用的」模塊以來,你很聰明地首先推出了TOUGH。其次是其他不太有用的模塊。

現在對於遊戲模式,敵人AI可能會被竊聽。例如,如果你不移動你的小怪,那麼敵人將不會受到攻擊。當你從一個波浪中留下一個敵人的蠕變時,AI也可能會被「竊聽」。 不知道它是否正常,但稍後我有以下幾點;我不能'相信'對抗如此之多並且如此強大的敵方小兵來對抗這種速度是正常的(看起來身體模塊已經是example

因爲最後我可能會要求開發人員做一些事情,以便我們可以與開發人員溝通即使壽計算器是好的,IMO更要用於誰想要在正確的方向輕輕一推人。

謝謝,我真的很享受比賽,我希望它會得到很大的!:)

+0

你的第一點不太對。它確實創建了兩個,它只是按照您調用createCreep()的順序將它們添加到堆棧。 LiFo的東西(後進先出),所以你創建的最後一個項目是第一個產生的。另外,題目中提到的問題,我是否想念他們? – dlkulp 2014-11-21 18:17:28

+0

我說過,你期望..第一個先出來。多數民衆贊成在一般工作。即使是一般的腳本。製作2個警報或console.log,它會在腳本中輸出'first'。相反,在這裏,典型的「函數調用」或者任何你應該命名它的工作都是'LiFo'。不是說這是不正確的,但應該提到:) – 2014-11-21 18:21:51

+0

你說你會假設工人被創造出來,但是治療師卻被創造出來了,如果那不是你的意思,你應該改變它成爲你的意思! – dlkulp 2014-11-21 20:03:55

回答

2

如果createCreep在勾號中多次調用,則只會創建最後一次調用中的蠕變。每次調用都會覆蓋creep來創建。但是這有一些問題:

  1. 你不能得到createCreep是否已經在這個tick中被調用 - 產卵屬性將只在下一個tick上設置。所以你必須自己跟蹤這個。
  2. 如果您將內存數據傳遞給createCreep,它將立即在內存中設置,即使實際上不會創建蠕變,因爲另一次調用createCreep會覆蓋它。這會使內存被未使用的數據弄髒,除非自己跟蹤(1),並且不要每次打勾多次在同一個spawn上調用createCreep。