標籤:
一年前想寫一個像cocoa那樣,可以方便層動畫開發的引擎,寫著寫著又逆向它的QuartzCore.framework,也就是CoreAnimation的底層,已經大半年沒有搞windows這個引擎。大體來看,動畫簡單來說有9要素,矩形地區(x, y, w, h),仿射變換矩陣(translation, rotation, scale),還有就是透明度alpha,除此還必須有線性變化函數。這些在cocoa中構成了最基本的動畫,也最常用,通常提交動畫一個始態,一個終態,以及時間就OK了。有次序的動畫可以用completion進行時間上的順序組合。到底要怎麼設計和實現才能夠讓編程簡便呢。
這幾天將大半年前的代碼整理了一下,在github上放上兩個demo。demo展示一些用引擎寫的動畫效果,兩個demo分別用了不同的方法去融合半透明(windows視窗層的,不是動畫引擎層)。由於用的windows視窗的層的方法選用不同,動畫引擎層實現時也有不同。當然,作為動畫引擎層的容器空間的windows視窗不考慮透明,做的事情就少上不少了。
demo的地址在下面:
https://github.com/bbqz007/xw/tree/master/demo
一年前的構想在這裡:構思一個在windows下仿objc基於動畫層ui編程的ui引擎
現在在用這個引擎仿效QQ管家加速功能的懸浮小視窗,同時也帶動引擎的開發,只有在問題前思考和解決問題當中,開發才能有進展。
當然目前簡陋的那一個就是我做的了。
PS:在動畫基本要素中,我上面漏了座標系,在3d動畫中這個尤為重要和基礎。例如opengl中有MODELVIEW的矩陣模式,切換到對象座標系,同樣我的引擎也要負責完成父層到子層的座標系切換和子層回到父層的座標系切換,即使大家都做了矩陣變換(transform)。
囉嗦了半篇,現在才是本篇正題。大家都在悠長渡龍舟小長假,我挨了幾個通頂(通宵)用自製的引擎做了這個仿QQ電腦管家加速小火箭的demo。開發過程少不了九曲十八彎,坑坑窪窪的了。本次做demo的過程,理清了不少思路,但也發現有許多思路尚未清晰。引擎本身不是成品,所以許多東西都有待開發,而且還有點像愛迪生試燈絲一樣。demo的功能的需要,本身就是一份對引擎功能的需求,做demo就可以清晰發現引擎要做什麼,奔著目的再考慮怎麼設計,哪些分支繼續向前,哪些分支需要更好的替代,哪些分支是走彎了。反過來看,引擎也需要demo來帶動開發。引擎就是生產工具,生產工具不用來生產,又怎麼知道工具哪裡好哪裡不足,要怎麼去改進。
demo由兩部分組成,左側記憶體單元,以及右側流量單元,當然這個只是UI引擎的demo,所以不帶任何實質的資源訪問功能。本引擎功能主要面向動畫,所以展示的功能主要也就仿動畫方面的效果。分別是滑鼠經過記憶體單元時的動畫組合(立體層次變化,氣場,小火箭登場)和滑鼠點記憶體單元觸發釋放記憶體的動畫組合(火箭發射,記憶體數量統計,流量單元收合展開)。
demo的地址同樣在:https://github.com/bbqz007/xw/tree/master/demo
除了自製動畫UI引擎,還有自製mach平台下逆向x64反組譯碼代碼的工具-自製反組譯碼逆向分析工具 迭代第六版本 ,歡迎觀看。
自製window下core animation引擎 - demo第二彈 - 仿QQ電腦管家加速小火箭