自制window下core animation引擎 - demo第二弹 - 仿QQ电脑管家加速小火箭

一年前想写一个像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反汇编代码的工具-自制反汇编逆向分析工具 迭代第六版本,欢迎观看。

时间: 2024-08-02 16:58:43

自制window下core animation引擎 - demo第二弹 - 仿QQ电脑管家加速小火箭的相关文章

Core Animation一些Demo总结 (动态切换图片、大转盘、图片折叠、进度条等动画效果)

前一篇总结了Core Animation的一些基础知识,这一篇主要是Core Animation 的一些应用,涉及到CAShapeLayer.CAReplicatorLayer等图层的知识. 先看效果图: 1.切换图片:      2.彩票转盘 3.图片折叠 4.进度条旋转 5.粒子效果 一.切换图片 看起来很复杂的动画,通过少量的计算和编码就可以简单的实现.要做到这一步,必须是需要研究iOS开发中的Core Animation和Core Graphics框架的.日常工作中,对于很多东西不求甚解

iOS Core Animation Advanced Techniques(一):图层树、寄宿图以及图层几何学

(一)图层的树状结构 巨妖有图层,洋葱也有图层,你有吗?我们都有图层 -- 史莱克 Core Animation其实是一个令人误解的命名.你可能认为它只是用来做动画的,但实际上它是从一个叫做Layer Kit这么一个不怎么和动画有关的名字演变而来,所以做动画这只是Core Animation特性的冰山一角. Core Animation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系之中.于是这个树形成了UIKit以及在iO

Core Animation学习总结

目录: The Layer Beneath The Layer Tree(图层树) The Backing Image(寄宿层) Layer Geometry(图层几何学) Visual Effects(视觉效果) Transforms(变换) Specialized Layers(专有图层) Setting Things in Motion Implicit Animations(隐式动画) Explicit Animations(显式动画) Layer Time(图层时间) Easing(缓

iOS Core Animation Advanced Techniques(五):图层时间和缓冲

图层时间 时间和空间最大的区别在于,时间不能被复用 -- 弗斯特梅里克 在上面两章中,我们探讨了可以用CAAnimation和它的子类实现的多种图层动画.动画的发生是需要持续一段时间的,所以计时对整个概念来说至关重要.在这一章中,我们来看看CAMediaTiming,看看Core Animation是如何跟踪时间的. CAMediaTiming协议 CAMediaTiming协议定义了在一段动画内用来控制逝去时间的属性的集合,CALayer和CAAnimation都实现了这个协议,所以时间可以被

长路漫漫,唯剑作伴--Core Animation优化

一.简介 当App发展到一定的规模,性能优化就成为必不可少的一点.但是很多人,又对性能优化很陌生,毕竟平常大多时间都在写业务逻辑,很少关注这个.最近在优化自己的项目,也收集了很多资料,这里先浅谈一下使用Instruments中CoreAnimation优化收获的经验以及总结,这是第一篇,后续会更新Timer Profiler,Leaks等其他优化工具的具体用法. 二.准备工作 在性能优化中一个最具参考价值的属性是FPS:全称Frames Per Second,其实就是屏幕刷新率,苹果的iphon

转 Instrument之Core Animation工具

一.Instrument 两个方法: (1).按下Command + I打开Instrument; (2).xcode->product->profile; 二.Core Animation工具 1.界面 2.简介 注意这个调试必须使用真机,点击左上角的红色圆圈就会开始录制 我们需要了解两个两个区域: 1.这里记录了实时的fps数值,有些地方是0是因为屏幕没有滑动: 2.调试选项: ps:有过游戏经验的人也许对fps这个概念比较熟悉.我们知道任何屏幕总是有一个刷新率,比如iphone推荐的刷新

iOS Core Animation Advanced Techniques(四):隐式动画和显式动画

隐式动画 按照我的意思去做,而不是我说的. -- 埃德娜,辛普森 我们在第一部分讨论了Core Animation除了动画之外可以做到的任何事情.但是动画师Core Animation库一个非常显著的特性.这一章我们来看看它是怎么做到的.具体来说,我们先来讨论框架自动完成的隐式动画(除非你明确禁用了这个功能). 事务 Core Animation基于一个假设,说屏幕上的任何东西都可以(或者可能)做动画.动画并不需要你在Core Animation中手动打开,相反需要明确地关闭,否则他会一直存在.

iOS Core Animation Advanced Techniques(六): 基于定时器的动画和性能调优

基于定时器的动画 我可以指导你,但是你必须按照我说的做. -- 骇客帝国 在第10章“缓冲”中,我们研究了CAMediaTimingFunction,它是一个通过控制动画缓冲来模拟物理效果例如加速或者减速来增强现实感的东西,那么如果想更加真实地模拟 物理交互或者实时根据用户输入修改动画改怎么办呢?在这一章中,我们将继续探索一种能够允许我们精确地控制一帧一帧展示的基于定时器的动画. 定时帧 动画看起来是用来显示一段连续的运动过程,但实际上当在固定位置上展示像素的时候并不能做到这一点.一般来说这种显

一、Instrument之Core Animation工具

一.Instrument 三个方法: (1).按下Command + I打开Instrument; (2).Xcode->product->profile; (3).Xcode->Open Developer Tool->Instrument 二.Core Animation工具 1.界面 2.简单介绍 注意这个调试必须使用真机,点击左上角的红色圆圈就会開始录制 我们须要了解两个两个区域: 1.这里记录了实时的fps数值.有些地方是0是由于屏幕没有滑动. 2.调试选项: ps:有过