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:遊戲編程 |