標籤:

Godot101(二) scripting(1)

可以對任何node添加script,例如可以通過scrip切入和改變node的inspector。

默認代碼里,extend是繼承父類Sprite的意思,正是當初選擇的node類型,這樣能繼承Sprite的屬性;函數_ready類似於初始化,只要將node加入到scene中就會運行

get_position() 獲得對象位置

點擊「Classes」可以獲得一些幫助

找到Sprite,能看到很多屬性的設定。但這裡沒有看到get_position函數。觀察到Inspector欄目里,Position設定在「Node2D」標籤下。Node2D也是一個類。

原來postion屬性是從類Node2D中繼承而來的,點擊「Node2D」,

就能看到此類下的屬性和方法,可以找到關於position的。

舉例:現在我們想在每一幀(frame)都改變sprite的位置

```````````````````````````

extends Sprite

var vel = Vector2(1,1) # 向 x和y方向一幀各移動1個pixdel(像素)

func _ready():

set_process(true) #讓sprite在每個frame都做些事情

func _process(delta):

set_position(get_position()+vel)

``````````````````````````

每一個遊戲都在1秒內循環運行很多frame(幀),通常1秒運行60幀,即一幀0.016666秒。這裡想在每一秒的第60幀的時刻讓sprite移動一點,見set_process說明。

使用delta通常是為了frame rate independence。例如我們想一秒鐘移動100個像素、物體轉一圈,使用delta可以保證1秒鐘移動100個像素、物體轉一圈,無論frame rate是偏高還是偏低。可以這樣用:

```````````````````````````

extends Sprite

var vel = Vector2(100,0)

func _ready():

set_process(true) #讓sprite在每個frame都做些事情,而想做的事情,就是函數_process的功能

func _process(delta):

set_rotation(get_rotation()+PI*delta)

set_position(get_position()+vel*delta)

``````````````````````````

這樣將delta寫到位移中,可以規避有frame rate變化的擾動。


推薦閱讀:

讓角色半透明:從 Ordered Dithering 說起(一)
怎樣系統學習遊戲編程?
3D遊戲中Model、View矩陣的分析
C++對象模型(1) 關於對象
第一次寫簡單遊戲引擎的經驗教訓總結

TAG:遊戲編程 |