https://github.com/dingjiecn/OpenDraw.git打算做一個(gè)開(kāi)源的矢量繪圖軟件(類似MS Visio),花了幾天把程序框架做了出來(lái),自認(rèn)比DrawCLI的稍微好一點(diǎn)點(diǎn)。支持基本圖形繪制,旋轉(zhuǎn),縮放,串行化。使用MFC、STL、GDI/GDI+和一點(diǎn)點(diǎn)設(shè)計(jì)模式。
自知做一個(gè)堪用的矢量繪圖軟件是個(gè)非常艱巨的事情,不過(guò)還是打算用一些業(yè)余時(shí)間把這件事情做了,對(duì)自己以往掌握的知識(shí),也是一個(gè)總結(jié)。
編譯好的可執(zhí)行程序程序0.01版本源代碼在
這里可以下載
動(dòng)畫(huà)Layer的作用:
U3D的老動(dòng)畫(huà)系統(tǒng),可以通過(guò)設(shè)置動(dòng)畫(huà)Layer,在不去中斷低層級(jí)動(dòng)畫(huà)的同時(shí),播放高層級(jí)動(dòng)畫(huà)。高層級(jí)動(dòng)畫(huà)播放完后自動(dòng)切換回低層級(jí)動(dòng)畫(huà)。一般相同層級(jí)的動(dòng)畫(huà),同時(shí)只能播放一個(gè)。
Play()和PlayQuqued(QueueMode.PlayNow)的區(qū)別:
后者復(fù)制了動(dòng)畫(huà)放入播放序列,可以實(shí)現(xiàn)同一個(gè)動(dòng)畫(huà)之間的切換,比如一個(gè)攻擊動(dòng)作可以連續(xù)快擊兩次。而前者只能等第一個(gè)攻擊動(dòng)作完成后,再做第二個(gè)相同的攻擊動(dòng)作。
摘要: 多年之前在WPS做算法研究的時(shí)候?qū)懙某S糜?jì)算幾何算法 C++
閱讀全文
cocos2d-x版FishingJoy, 可做為cocos2d-x示例工程,
包含CCSprite、CCAction、CCParticleSystem等重要類的使用方法。
好久沒(méi)用C++,寫(xiě)出的代碼帶強(qiáng)烈的Objc風(fēng)格,@_@
可能跟cocos2d-x源于cocos2d有關(guān)。
cocos2d-x版本2.0.4,xcode版本4.5。
資源文件從網(wǎng)絡(luò)獲得,也可使用付費(fèi)TexturePacker自行生成。
源代碼地址:
https://github.com/dingjiecn/FishingJoy.git
outfit7公司生產(chǎn)了一系列的會(huì)說(shuō)話的朋友a(bǔ)pp,最著名的是會(huì)說(shuō)話的湯姆貓.
利用業(yè)余時(shí)間做了一個(gè)TalkingJohn,資源都是用原app的,在xcode4.1編譯通過(guò).
為CCDirector增加category方法屏幕錄像,和音視頻合成.
錄像模式在模擬器運(yùn)行良好,但是在ipad上運(yùn)行經(jīng)常錄制不成功.
如果有哪位同學(xué)改好了這個(gè)問(wèn)題,請(qǐng)給我發(fā)郵件cugdj at hotmail.com.
文件系統(tǒng)
一些重要的應(yīng)用目錄
為了安全的緣故,一個(gè)應(yīng)用只能擁有一些目錄,用來(lái)寫(xiě)入應(yīng)用的數(shù)據(jù)或者首選項(xiàng)參數(shù)。當(dāng)一個(gè)應(yīng)用安裝到系統(tǒng),會(huì)創(chuàng)建該應(yīng)用的home目錄。以下列出一些home目錄下的主要的子目錄:
- <Application_Home>/AppName.app:存放應(yīng)用程序自身
- <Application_Home>/Documents/:存放用戶文檔和應(yīng)用數(shù)據(jù)文件
- <Application_Home>/Library/:應(yīng)用程序規(guī)范的頂級(jí)目錄,下面有一些規(guī)范定義的的子目錄,當(dāng)然也可以自定義子目錄,用于存放應(yīng)用的文件,但是不宜存放用戶數(shù)據(jù)文件
- <Application_Home>/Library/Preferences,這里存放程序規(guī)范要求的首選項(xiàng)文件
- <Application_Home>/Library/Caches,保存應(yīng)用的持久化數(shù)據(jù),用于應(yīng)用升級(jí)或者應(yīng)用關(guān)閉后的數(shù)據(jù)保存
- <Application_Home>/tmp/,保存應(yīng)用數(shù)據(jù),但不需要持久化的,在應(yīng)用關(guān)閉后,該目錄下的數(shù)據(jù)將刪除
備份和恢復(fù)
iTunes應(yīng)用可在適當(dāng)情況下自動(dòng)處理備份和恢復(fù)。然后,應(yīng)用需要知道備份和恢復(fù)的文件放在哪里。
什么是備份
你不必為你的應(yīng)用備份和恢復(fù)做任何準(zhǔn)備。在iOS 2.2以后,當(dāng)設(shè)備連接到電腦并開(kāi)始同步后,iTunes會(huì)自動(dòng)增量備份所有文件,但不包括下面的目錄:
- <Application_Home>/AppName.app
- <Application_Home>/Library/Caches
- <Application_Home>/tmp
雖然iTunes備份應(yīng)用自身,但不是每次同步都這樣做。從app store上購(gòu)買的應(yīng)用,只在隨后的同步過(guò)程中被iTunes備份。再之后,iTunes并不在同步操作中備份應(yīng)用,除非應(yīng)用自身發(fā)生變化,比如應(yīng)用的升級(jí)。
為了避免同步過(guò)程時(shí)間過(guò)長(zhǎng),你需要對(duì)應(yīng)用中使用的文件放在哪里做出選擇。<Application_Home>/Documents目錄用來(lái)存放用戶文檔和應(yīng)用數(shù)據(jù)文件。臨時(shí)文件要保存在Application Home/tmp目錄下,這樣可以在不需要時(shí)刪除。如果在兩次啟動(dòng)中都需要的數(shù)據(jù)文件,但是不需要備份的,可放置在Application Home/Library/Caches。比如很大的數(shù)據(jù)文件,盡量放置在Caches目錄下,而不是Documents目錄下,Documents目錄下文件將做備份,這樣會(huì)很耗時(shí)。
應(yīng)用更新期間的文件保存
如果文件需要在應(yīng)用更新后依然存在,需要放置在:
- <Application_Home>/Documents
- <Application_Home>/Library
當(dāng)未從interface builder中為view屬性顯示指定outlet,或者此UIViewController是在程序中用代碼創(chuàng)建的,
當(dāng)訪問(wèn)到view屬性,但是view屬性為nil值的時(shí)候,會(huì)調(diào)用到loadView方法創(chuàng)建view出來(lái)。
這就可以解釋
UIViewController *rootViewController = [[[UIViewController alloc] init] autorelease];
此時(shí)rootViewController.view為空
[self.window addSubview:rootViewController.view];
此時(shí)view已經(jīng)被創(chuàng)建了。
在UIViewController Class Reference有詳細(xì)說(shuō)明
首先需要一個(gè)mp3 decoder,實(shí)現(xiàn)mp3 to wav,然后需要一個(gè)ogg encoder,實(shí)現(xiàn)wav to ogg。
原理就是這樣。自己做了一個(gè)mp3轉(zhuǎn)ogg的工程,轉(zhuǎn)換過(guò)程中mp3的tag信息都沒(méi)有丟失。
速度還可以,需要的人可以自己閱讀一下代碼進(jìn)行優(yōu)化。
源代碼在
這里下載。
問(wèn)題在于,即使是Windows95,實(shí)時(shí)處理視頻音頻的能力依然很差,
于是微軟制作了一個(gè)叫做Win-G的軟件,試圖解決視頻方面的問(wèn)題。
宣傳的時(shí)候,Win-G被說(shuō)成是最佳的游戲編程和圖形子系統(tǒng),而事實(shí)
上它只不過(guò)是一堆用于畫(huà)位圖的圖形調(diào)用而已。更有甚者,Win-G
發(fā)布后大約一年之后,Microsoft竟然否認(rèn)了它的存在,不騙你!
由于在DLL窗體中需要使用CToolTipCtrl來(lái)實(shí)現(xiàn)提示功能,
所以要重載PreTranslateMessage,代碼如下
BOOL CMyWnd::PreTranslateMessage(MSG* pMsg)
{
m_toolTip.RelayEvent(pMsg);
return CGameWnd::PreTranslateMessage(pMsg);
}
但是由于CMyWnd是在DLL中,所以重載PreTranslateMessage無(wú)效,
具體原因我忘記了,反正網(wǎng)上都可以搜索到。不過(guò)解決方案都給的
不是很明確,在這里我把我的解決方法記錄下來(lái),省得以后忘掉了。
主要是在創(chuàng)建CMyWnd實(shí)例的時(shí)候把窗口指針存下來(lái),然后使用全局
消息鉤子執(zhí)行CMyWnd::PreTranslateMessage,代碼如下
1.定義全局變量
HHOOK g_hHook = 0;
CMyWnd* g_pMyWnd = NULL;
2.安裝全局鉤子,要在DLL中安裝
g_hHook = ::SetWindowsHookEx(WH_GETMESSAGE, HookProc, 0, ::GetCurrentThreadId());
3.創(chuàng)建窗體的時(shí)候保留指針
m_pMyWnd = new CMyWnd();
g_pMyWnd = m_pMyWnd;
4.鉤子函數(shù)
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
MSG* pMsg = (MSG*)lParam;
if(g_pMyWnd && (pMsg->hwnd == g_pMyWnd->m_hWnd))
{
g_pMyWnd->PreTranslateMessage(pMsg);
}
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
5.退出的時(shí)候別忘了卸載鉤子
if(g_hHook)
UnhookWindowsHookEx(g_hHook);
一個(gè)碎了一塊玻璃的房子,如果沒(méi)有及時(shí)修補(bǔ),很快其他的玻璃也會(huì)被打碎。
一段使用了全局變量和硬編碼的代碼,很快會(huì)充斥大量的全局變量和硬編碼。