If RectBrick.W > RectBrick.H Then
SpeedText.Text = Int(RectBrick.H / 3)
Else
SpeedText.Text = Int(RectBrick.W / 3)
End If
因為磚塊大多情況是長方形 (分 RectBrick.W 與 RectBrick.H)
而一步移動距離(SpeedText.Text)是不分長寬的
所以就取最短的一邊 (RectBrick.W與 RectBrick.H 比較) 給 SpeedText.Text
為了使移動時 不移動過頭 (到磚塊裡)
Q:上述那些600、240、720各代表啥意思呢??
A:只是個老鼠(Shape(Index) )於休息室位址的定位 (水平位址 Shape(Index).Left )
strMapFile = CommonDialog_Click(Me)
是呼叫WinAPI的 對話框 來賦予地圖檔名
這裡捨棄 VB提供的 CommonDialog控制項 元件,目的是如此就不需考慮該PC有無 comdlg32.ocx (VB的插件)
您可以在這三行設下中斷點
strMapFile = CommonDialog_Click(Me)
strMapFile = StringSplit_Str(strMapFile, "1\0$.txt", 1)
If strMapFile = "" Then strMapFile = Dir(App.Path + "\" + "MAP*.txt")
來體會
strMapFile = CommonDialog_Click(Me)
strMapFile = StringSplit_Str(strMapFile, "1\0$.txt", 1)
的作用
(
其實照理講 strMapFile = StringSplit_Str(strMapFile, "1\0$.txt", 1)
是多此一舉
但因為 CommonDialog_Click(Me)設計的關係
會傳回一個 257字元長度的字串
※ 原因在CommonDialog_Click含式的 OpenFile.lpstrFile = String(257, 0) 這一行
所以利用 strMapFile = StringSplit_Str(strMapFile, "1\0$.txt", 1)
來捨去 .txt 以後的 字串
※ chr(0) 無法用 trim 來捨棄
)
StringSplit_Str是一個自制的字串分割 函數
StringSplit_Str(欲作用的字串, 分割用參數, 傳回第幾分割字串)
其實VB 有一個 Split 保留字
只是他傳回值 是一個陣列變數 會傳回全部子分割字串
(要用第幾個就用( )來指定第幾分割字串,也可
Split(欲作用的字串, 分割用字串)(傳回第幾分割字串) 方式來直接指定 傳回第幾分割字串
但花費時間不變
)
因此效能不及個人的 StringSplit_Str (有測試過)
strMapFile, "1\0$.txt", 1 表示
用 .txt 針對 strMapFile 做對半分割 傳回 前半段+".txt" 字串
(如是 "1\0$.txt", 0 就是取後半段)
(1\0$ 後的字串是切割辨識字串)
如果 strMapFile= "c:\temp\Map100.txt %#@%@# "
就會回傳 "c:\temp\Map100.txt"
而 StringSplit_Str 還有其他用法
比如
StringSplit_Str(strMapFile, chr(13)+chr(10), 5)
會傳回第5行字串 (因為 chr(13)+chr(10) 是換行字串,也可用vbCrLf 或 vbNewLine
)
如沒有第5行即傳回 "" 空字串
|