小四的海市蜃楼
Never surrender to complexity
posts - 21,comments - 59,trackbacks - 0
https://github.com/dingjiecn/OpenDraw.git

打算做一个开源的矢量绘图软件(类似MS Visio),花了几天把程序框架做了出来,自认比DrawCLI的稍微好一点点。支持基本图形绘制,旋转,缩放,串行化。使用MFC、STL、GDI/GDI+和一点点设计模式。

自知做一个堪用的矢量绘图软件是个非常艰巨的事情,不过还是打算用一些业余时间把这件事情做了,对自己以往掌握的知识,也是一个总结。

编译好的可执行程序
程序0.01版本源代码在这里可以下载
posted @ 2008-01-29 18:16 小四 阅读(10030) | 评论 (37)编辑 收藏

动画Layer的作用:
U3D的老动画系统,可以通过设置动画Layer,在不去中断低层级动画的同时,播放高层级动画。高层级动画播放完后自动切换回低层级动画。一般相同层级的动画,同时只能播放一个。


Play()和PlayQuqued(QueueMode.PlayNow)的区别:
后者复制了动画放入播放序列,可以实现同一个动画之间的切换,比如一个攻击动作可以连续快击两次。而前者只能等第一个攻击动作完成后,再做第二个相同的攻击动作。

posted @ 2014-12-03 15:14 小四 阅读(90) | 评论 (0)编辑 收藏
     摘要: 多年之前在WPS做算法研究的时候写的常用计算几何算法 C++  阅读全文
posted @ 2012-12-05 23:07 小四 阅读(3305) | 评论 (0)编辑 收藏
cocos2d-x版FishingJoy, 可做为cocos2d-x示例工程,
包含CCSprite、CCAction、CCParticleSystem等重要类的使用方法。
好久没用C++,写出的代码带强烈的Objc风格,@_@
可能跟cocos2d-x源于cocos2d有关。
cocos2d-x版本2.0.4,xcode版本4.5。
资源文件从网络获得,也可使用付费TexturePacker自行生成。

源代码地址:
https://github.com/dingjiecn/FishingJoy.git

posted @ 2012-12-04 16:48 小四 阅读(2405) | 评论 (2)编辑 收藏

https://github.com/dingjiecn/TalkingJohn.git

源代码
 
outfit7公司生产了一系列的会说话的朋友app,最著名的是会说话的汤姆猫.
利用业余时间做了一个TalkingJohn,资源都是用原app的,在xcode4.1编译通过.
为CCDirector增加category方法屏幕录像,和音视频合成.
录像模式在模拟器运行良好,但是在ipad上运行经常录制不成功.
如果有哪位同学改好了这个问题,请给我发邮件cugdj at hotmail.com. 


 

posted @ 2011-11-18 23:41 小四 阅读(9517) | 评论 (2)编辑 收藏

文件系统

一些重要的应用目录

为了安全的缘故,一个应用只能拥有一些目录,用来写入应用的数据或者首选项参数。当一个应用安装到系统,会创建该应用的home目录。以下列出一些home目录下的主要的子目录:

  • <Application_Home>/AppName.app:存放应用程序自身
  • <Application_Home>/Documents/:存放用户文档和应用数据文件
  • <Application_Home>/Library/:应用程序规范的顶级目录,下面有一些规范定义的的子目录,当然也可以自定义子目录,用于存放应用的文件,但是不宜存放用户数据文件
  • <Application_Home>/Library/Preferences,这里存放程序规范要求的首选项文件
  • <Application_Home>/Library/Caches,保存应用的持久化数据,用于应用升级或者应用关闭后的数据保存
  • <Application_Home>/tmp/,保存应用数据,但不需要持久化的,在应用关闭后,该目录下的数据将删除 

    备份和恢复

    iTunes应用可在适当情况下自动处理备份和恢复。然后,应用需要知道备份和恢复的文件放在哪里。

    什么是备份

    你不必为你的应用备份和恢复做任何准备。在iOS 2.2以后,当设备连接到电脑并开始同步后,iTunes会自动增量备份所有文件,但不包括下面的目录:

    • <Application_Home>/AppName.app
    • <Application_Home>/Library/Caches
    • <Application_Home>/tmp

    虽然iTunes备份应用自身,但不是每次同步都这样做。从app store上购买的应用,只在随后的同步过程中被iTunes备份。再之后,iTunes并不在同步操作中备份应用,除非应用自身发生变化,比如应用的升级。

    为了避免同步过程时间过长,你需要对应用中使用的文件放在哪里做出选择。<Application_Home>/Documents目录用来存放用户文档和应用数据文件。临时文件要保存在Application Home/tmp目录下,这样可以在不需要时删除。如果在两次启动中都需要的数据文件,但是不需要备份的,可放置在Application Home/Library/Caches。比如很大的数据文件,尽量放置在Caches目录下,而不是Documents目录下,Documents目录下文件将做备份,这样会很耗时。

    应用更新期间的文件保存

    如果文件需要在应用更新后依然存在,需要放置在:

    • <Application_Home>/Documents
    • <Application_Home>/Library
posted @ 2011-10-17 15:35 小四 阅读(1790) | 评论 (0)编辑 收藏
当未从interface builder中为view属性显示指定outlet,或者此UIViewController是在程序中用代码创建的,
当访问到view属性,但是view属性为nil值的时候,会调用到loadView方法创建view出来。
这就可以解释
UIViewController *rootViewController = [[[UIViewController alloc] init] autorelease];
此时rootViewController.view为空
[self.window addSubview:rootViewController.view];
此时view已经被创建了。

在UIViewController Class Reference有详细说明


posted @ 2011-06-01 15:23 小四 阅读(1138) | 评论 (0)编辑 收藏
首先需要一个mp3 decoder,实现mp3 to wav,然后需要一个ogg encoder,实现wav to ogg。
原理就是这样。自己做了一个mp3转ogg的工程,转换过程中mp3的tag信息都没有丢失。
速度还可以,需要的人可以自己阅读一下代码进行优化。
源代码在这里下载。
posted @ 2010-02-05 16:54 小四 阅读(1244) | 评论 (1)编辑 收藏
问题在于,即使是Windows95,实时处理视频音频的能力依然很差,
于是微软制作了一个叫做Win-G的软件,试图解决视频方面的问题。
宣传的时候,Win-G被说成是最佳的游戏编程和图形子系统,而事实
上它只不过是一堆用于画位图的图形调用而已。更有甚者,Win-G
发布后大约一年之后,Microsoft竟然否认了它的存在,不骗你!
posted @ 2009-03-27 20:08 小四 阅读(332) | 评论 (0)编辑 收藏

由于在DLL窗体中需要使用CToolTipCtrl来实现提示功能,
所以要重载PreTranslateMessage,代码如下

BOOL CMyWnd::PreTranslateMessage(MSG* pMsg)
{
 m_toolTip.RelayEvent(pMsg);  
 return CGameWnd::PreTranslateMessage(pMsg);
}

但是由于CMyWnd是在DLL中,所以重载PreTranslateMessage无效,
具体原因我忘记了,反正网上都可以搜索到。不过解决方案都给的
不是很明确,在这里我把我的解决方法记录下来,省得以后忘掉了。
主要是在创建CMyWnd实例的时候把窗口指针存下来,然后使用全局
消息钩子执行CMyWnd::PreTranslateMessage,代码如下

1.定义全局变量
 HHOOK g_hHook = 0;
 CMyWnd* g_pMyWnd = NULL;

2.安装全局钩子,要在DLL中安装
 g_hHook = ::SetWindowsHookEx(WH_GETMESSAGE, HookProc, 0, ::GetCurrentThreadId());

3.创建窗体的时候保留指针
 m_pMyWnd = new CMyWnd();
 g_pMyWnd = m_pMyWnd;

4.钩子函数
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.退出的时候别忘了卸载钩子
 if(g_hHook) 
  UnhookWindowsHookEx(g_hHook);

posted @ 2009-01-06 10:24 小四 阅读(1328) | 评论 (1)编辑 收藏
一个碎了一块玻璃的房子,如果没有及时修补,很快其他的玻璃也会被打碎。
一段使用了全局变量和硬编码的代码,很快会充斥大量的全局变量和硬编码。
posted @ 2008-09-22 14:58 小四 阅读(1248) | 评论 (3)编辑 收藏
仅列出标题  下一页