Posted by: kevinlin on: 四月 29, 2006
原來我學的是陳太老架24式,本來是有64式,但是初學就先學24式之後再把剩下的40式補足,現在大概是學了18式,其實打完一遍18式還蠻累的,所以整個學完64式,然後還要一天打30次,那真的的確會很累。
這次是接著上次的青龍出水,接著六封四閉、單鞭,這兩招前面就有了,所以很快的學完,再來接著教兩招,運手跟高探馬。
運手(我覺得是以前大陸的腔調的關係,所以很多種說法,也有人說雲手吧??!!),右運手上下交換畫圓三次,接下一招,接著高探馬,是類似演手紘拳的起手,雙掌交錯,但右足是往後,而且是出掌,不是出拳,出掌是類似斜形的右掌。
我發現我越打越覺得有趣,裡面有太多奧妙的了,學拳絕對不像武俠小說裡高妙的招式一學就超強,沒有幾年的練習是不太能體會的,而且很多人以為太極拳就是慢吞吞的,其實不是,有快有慢,而且慢時也不算是慢是緩,這一切都是很奇妙的。
無聊時來一下,懶札衣或單鞭,都是利用腰轉帶動手轉、掌轉,就像是把力量一層層的往上往末梢去,還是不太能體會,再打個幾萬遍應該可以比較容易體會吧!!有句話說:「拳打萬遍拳理自明。」大概就是這道理。
最近研究了一下陳式太極的傳承,其實我學的陳太還算蠻正統的,不是旁支楊吳孫武,也不是新架,教我的老師的師父是學自17世的陳發科,目前陳式太極掌門是19世的陳小旺,算幾來跟教我的老師同輩吧。
Posted by: kevinlin on: 四月 28, 2006
SetTimer是一個計數器
原型是這樣 UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc ) ;
在程式裡我們可以 設定多少時間要做什麼事情 他會觸發WM_TIMER
#define TIMER_SEC 1
#define TIMER_MIN 2
然後使用兩個SetTimer來設定兩個計時器:
SetTimer (hwnd, TIMER_SEC, 1000, NULL) ;
SetTimer (hwnd, TIMER_MIN, 60000, NULL) ;
WM_TIMER的處理如下所示:
case WM_TIMER:
switch (wParam)
{
case TIMER_SEC:
//每秒一次的處理
break ;
case TIMER_MIN:
//每分鐘一次的處理
break ;
}
return 0 ;
我發現了一個問題
如果TIMER_SEC(每秒1次)做了2分鐘 那TIMER_MIN(每分1次)該怎麼辦
事實上WM_TIMER的訊息在整個OS上的優先權很低的跟WM_PAINT一樣都很低
就是說 當我們正在處理WM_TIMER時 又有WM_TIMER想進來訊息佇列 他會自己當作沒看到 就像是 你只付一人份的錢 以為雙胞胎想輪流著吃飯我會不知道嗎
訊息佇列總會只有一份WM_TIMER存在 所以如果TIMER_SEC處理了2分鐘 那就等到處理完 再看哪個計數器幸運 牌比較前面
Posted by: kevinlin on: 四月 28, 2006
星期天晚上 沒睡著
星期一晚上 沒睡著
星期二晚上 沒睡著
星期三晚上 沒睡著
星期四晚上 終於有睡著一下子了 精神有比較好一點
4天沒睡覺 但又不是沒睡 是睡不著
看來應該是要去看神經內科 聽說自律神經失調 還是容易緊張的人都會這樣
然後我突然想起來我好像忘記拿畢業紀念冊了 我一定要去拿回來 錢都繳了
Posted by: kevinlin on: 四月 23, 2006
整個東西分成三大部分
1.大廳 2.紙娃娃 3.遊戲
大概把大廳完成了 用MFC實現大部分功能
而紙娃娃大概完成度有80% 需要在多點圖來做近一步的測試 還有設置要很好的規劃
而遊戲部分完成度比較低一點 應該可以很快的完成
最近把海賊王260集看完 不過他還沒做完 還持續在連載
以前在看的時候覺得還好 不過現在看越看越好看 雖然有些地方有拖到戲
不過整個是很感人又好笑的卡通
Posted by: kevinlin on: 四月 23, 2006
這週的兩招都又複雜又簡單
撇身捶 青龍出水
兩個需要發勁的招式
撇身捶的右手順逆纏 還有青龍出水的虛招跟擠發 看似簡單其實蠻困難的
Posted by: kevinlin on: 四月 20, 2006
原來MFC的主要架構是繼承自CWinApp
他的上層是CWinThread 在上去是CCmdTarget在上去是 CObject
而且它裡面實作了 createwindow跟 訊息回圈(放在Run中 而且可以覆寫)
MFC比較重要的六個要注意的東西
MFC 程式的初始化過程
RTTI(Runtime Type Information)
Dynamic Creation 動態生成
Persistence 永續留存
Message Mapping 訊息映射
Message Routing 訊息繞行
還蠻特別的是MFC的訊息映射
訊息的視窗有很多種實作的方法,下面就列出常見的三種。
沒有哪一種是最好的,但或許你可以找到一種適合你的。接下去,我們來結合一個基於對話框的應用程式來講解。
第一種方法:使用訊息映射。這是一種最直接、最簡單的方法。
a) 依賴主視窗
最簡單的方法,我們可以在主視窗中定義訊息映射。但有時候我們的主視窗的類別中已經寫了很多程式碼了,這樣會顯的很雜亂,看起來會很不想看因為太亂了;我們希望把這個特定訊息的反應獨立出來。這時,我們需要另外建立一個視窗。我們從CWnd類別中衍生了自己的一個類CMsgWnd。
接著定義訊息映射(假設WM_USER_MSG就是那個特定的消息):
在CMsgWnd.cpp中,加入
BEGIN_MESSAGE_MAP(CMsgWnd, CWnd)
//{{AFX_MSG_MAP(CMsgWnd)
// NOTE – the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
ON_MESSAGE(WM_USER_MSG, OnUserMsg)
END_MESSAGE_MAP()
以及定義訊息反映函數(只是展示接收到了訊息):
LRESULT CMsgWnd::OnUserMsg(WPARAM wParam, LPARAM lParam)
{
CString strMsg = “Receive message using message map(CommonWnd): “;
CString strParam;
strParam.Format(“Method %d!”, wParam);
::AfxMessageBox(strMsg + strParam);
return 0;
}
在CMsgWnd.h中,加入函數宣告:
afx_msg LRESULT OnUserMsg(WPARAM wParam, LPARAM lParam);
演示時,我們在主視窗類別(CMsgWindowDlg)中定義一個該類別的一個物件,然後如下建立視窗:mMsgWnd.Create(NULL, “Msg”, WS_CHILD, CRect(0,0,1,1), this, 0);
b) 不依賴其它視窗
上述的方法,我們建立的視窗作為主視窗的子視窗。但是,如果我們不想牽扯到其他視窗,我們應該怎麼做呢?很簡單,修改基礎類別,從CFrameWnd類衍生。因此呢,我們又生成了一個類CMsgFrameWnd。接下去,定義訊息映射的過程跟上述方法是相似的。
值得注意的是:我們在寫的時後,使用new操作在系統的Heap上建立這個視窗,如下:
mMsgFrameWnd [...]
Posted by: kevinlin on: 四月 19, 2006
有時候常常會遇到Debug可以跑 但是Release反而不能跑了 為什麼呢?
這實在很奧妙 所以要好好了解一下這兩個的差異
還有 所以我們常常需要在一個階段就Release編譯一次 這樣才不會最後手足無措
Debug 版本
參數 含義
/MDd /MLd 或 /MTd 使用 Debug runtime library (測試版本的執行時函式庫)
/Od 關閉最佳化開關
/D “_DEBUG” 相當於 #define _DEBUG,打開編譯測試程式碼開關 (主要針對assert函數)
/ZI 建立 Edit and continue(編輯繼續)資料庫,這樣在測試過程中如果修改了程式碼不需重新編譯
/GZ 可以幫助取得記憶體的錯誤
/Gm 打開最小化重鏈接開關 減少鏈接時間
Release 版本
參數 含義
/MD /ML 或 /MT 使用發佈版本的執行時函式庫
/O1 或 /O2 最佳化開關,使程式最小或最快
/D “NDEBUG” 關閉條件編譯測試程式碼開關 (即不編譯assert函數)
/GF 合併重複的字串, 並將字串常數放到ROM中, 防止被修改
事實上呢 Debug 和 Release 並沒有本質的界限 他們只是一組編譯選項的集合 編譯器只是按照預定的選項行動。
事實上 我們甚至可以修改這些選項 從而得到最佳化過的測試版本或是帶跟蹤語法的正式版本。
哪些情況下 Release 版會出錯
有了上面的介紹,我們再來逐個對照這些選項看看 Release 版錯誤是怎樣產生的
1、Runtime [...]
Posted by: kevinlin on: 四月 18, 2006
blog不見好久 害我很緊張 以為會消失
還好有回來了
這次學四式 因為上次腳似乎拉傷 沒辦法去 連台北的研討會也沒辦法去 真是虧錢
摟膝拗步 斜形 摟膝拗步 演手肱拳 金剛搗碓還算有點複雜 演手肱拳 很特別的一招 是要發勁的 拳出如鞭 不過我還體會不了@@
的確是需要常常練習才可以的
Posted by: kevinlin on: 四月 5, 2006
要介紹的第二個使用技巧是
利用二進位運算式得到編譯時期常數
另外一個特殊運算元是##
這個運算元能讓你把兩個參數連接起來,如下所示:
#define cat(a,b) a ## b
value = cat (1,2);
錢至處理器會把上面這行轉成
value=12;
雖然說這個簡單的例子沒有什麼實際的用處(demo用而已),但是可以看見##運算元確實有一些很有趣的用處。常在微軟的一些程式中會發現,可見他有時還蠻實用的。下面的技巧就可以讓你利用二進位運算式建立編譯時期的常數。這裡特別有趣的是所有下面的程式碼都是在前至處理器裡面處理的,沒有一行執行時的程式碼。
/*
//Usage
const int nibble = BINARY1(0101); // 0×5
const int byte = BINARY2(1010,0101); // 0xa5
// 0xa5a5a5a5
const int dword = BINARY8(1010,0101,1010,0101,1010,0101,1010,0101);
*/
//Macro source:
#define HEX_DIGIT_0000 0
#define HEX_DIGIT_0001 1
#define HEX_DIGIT_0010 2
#define HEX_DIGIT_0011 3
#define HEX_DIGIT_0100 4
#define HEX_DIGIT_0101 5
#define HEX_DIGIT_0110 6
#define HEX_DIGIT_0111 7
#define HEX_DIGIT_1000 8
#define HEX_DIGIT_1001 9
#define HEX_DIGIT_1010 a
#define HEX_DIGIT_1011 b
#define HEX_DIGIT_1100 c
#define HEX_DIGIT_1101 d
#define HEX_DIGIT_1110 [...]
Posted by: kevinlin on: 四月 4, 2006
Tutorials
Search
TutorialFind (3D)
TutorialFind (2D)
Low Poly Modeling (& Skinning)
Character Model 1 (non-specific)
Character Model 2 (3DS Max)
Character Model 3 (Maya)
Character Model 4 (3DS Max)
Character Model 5 (Anim8tor)
Character Model 6 (Milkshape 3D)
Female Model 1 (Milkshape 3D)
Zombie (Milkshape 3D)
Orc Head (3DS Max)
Head 1 (Anim8tor)
Head 2 (Anim8tor) (Warning, site crashes Opera. Use IE)
Knight 1 (Anim8tor) (Warning, site crashes Opera. Use IE)
Modeling [...]
最近的回應