類別使用
單一實體類別
SDL簡單功能介紹
除了實體可以有方法
也可以定義類別方法
類別也有自己的實體變數和類別變數
一樣是使用關鍵字def
但是方法名稱要加上self.
def self.singleton_method
end
使用時對該類別呼叫該方法
在文件中可以看到兩種方法的表示
以Symbol類別為例
::all_symbols的"::"代表為類別方法
#to_s的"#"代表是實體方法
類別方法也有可能寫成"."開頭
再次複習一下
類別變數是"@@"開頭
所有實體或是在類別內都可以操作類別變數
有些類別只產生一個物件
真的有需要產生物件嗎?
英文為Singleton
在Ruby中可以直接把類別當實體用
所以就不需要實體化了
類別也是物件所以也有實體變數
但是類別的實體變數不是物件的實體變數
class C
@class_inst_var = "No instance"
def output
p @class_inst_var
end
def self.output
p @class_inst_var
end
end
利用類別的實體變數就可以把類別當實體用
只要另外初始化就可以不用建構子
模組類似於類別但是沒有實體
用來將相關的函式包裝起來
可以呼叫模組函式來使用者各種功能
呼叫方法和類別方法很像
對模組呼叫指定名稱的函式即可
在模組中可能會有一些預定義的變數
使用"::"來取得該變數
Simple DirectMedia Layer
提供繪圖音訊輸出入等各項基本功能
Ruby中的套件經過額外包裝
SDL image:增加圖檔支援種類
SDL ttf:提供字體繪圖支援
SDL mixer:提供音訊效果支援
SDL gfx:各種額外功能(我沒用過...)
初始化
視窗
繪圖
事件
鍵盤、滑鼠
SDL.Init(flag)
flag是一個常數
SDL::INIT_VIDEO初始化繪圖
SDL::INIT_EVERYTHING初始化所有功能
SDL.SetVideoMode(w,h,bpp,flag)
bpp為色彩深度通常使用32
flag一般為SDL::SWSURFACE
flag可以額外加入全螢幕、無邊框或可縮放之類功能
要記得把得到的視窗物件賦值給變數
SDL.WM_SetCaption(title,icon)
title為標題用字串
icon直接用空字串就好
其實功能還可以再區分
圖檔載入
圖檔繪製
畫矩形
圖檔預設支援只有BMP
需要其他檔案要使用SDL::Image的功能
SDL.LoadBMP(path)
給予檔名載入後會給予一個圖片物件
SDL.SetColorKey(pic,flag,color)
一般flag都用SDL::SRCCOLORKEY
而color則為整數(小心RGB或BGR!!)
這樣在把圖片貼到另一張圖片上color就會被忽略
螢幕和圖片其實可以視為一樣的東西
只是要畫在螢幕才能顯示
SDL.BlitSurface(src,sRect,dst,dRect)
需要用SDL::Rect給予[x,y,w,h]指定繪圖範圍
除了把圖片畫上螢幕之外
還要把螢幕翻轉才能把螢幕顯示出來
畫好圖要記得SDL.Flip(screen)給大家看
SDL.FillRect(pic,rect,color)
一樣記得要用SDL::Rect指定[x,y,w,h]
顏色color還是一樣是整數
這次還有當成畫直線來用...
SDL.PollEvent可以取得一個發生的事件
事件包含鍵盤滑鼠關閉視窗各式動作
要對各種狀況進行比對
列出一些常用的事件
SDL::MouseMotionEvent:滑鼠移動
SDL::MouseButtonEvent:滑鼠按鍵起落
SDL::KeyboardEvent:鍵盤按鍵起落
SDL::QuitEvent:關閉視窗
#state可以取得狀態
#x,#y取得座標
#button可以取得按鍵
和滑鼠事件類似但是沒有按鍵
額外有移動距離的差值
#xrel,#yrel取得相對移動距離
#type可以得到SDL::KEYDOWN或SDL::KEYUP
#keysym可以取得鍵盤按鍵
鍵盤按鍵需要另外參考按鍵編碼
關閉視窗會觸發此事件
一定要攔截才能正常關閉視窗