2009年4月7日星期二

鬼泣3(2)

中午刚吃过饭,看代码也有些累了,闲着也是闲着。
接着昨天的战役,今天挑战的boss有一只大蜈蚣,小丑,和刀斧二人组。
那个蜈蚣是相当的简单,小丑也很简单,就是躲闪要躲闪好。刀斧二人组还算挺有难度的,整个过程只吃了一个血。
鬼泣那美工的确做得好啊,单看但丁的动作,如此流畅协调,用手柄玩的如此流畅,再看CG动画又做得如此之华丽,如此的帅,再续辉煌之作。
整个游戏音效很好,砍人的判定也做的无比精准。开枪判定也是很精准。不多说了,发几张图上来。





小鱼 对不起

无意间转到峰哥做得那个靖边人网站,一种无地自容的感觉瞬间传遍了我的全身。

真的是要拼搏了,我在游戏制作上达到的高度无法和他们网页制作达到的高度相提并论。

不过这样也好,本人最喜欢的就是挑战了,越困难我就越兴奋,在这里只能无比愧疚的对小鱼说声:“对不起,真的得走了。虽然你看不到我在这里的文字,也就不会有一丝哀叹吧。其实,在体育课上能远远的望见你我就很满足了...

看代码ing

2009年4月6日星期一

MFC中ON_COMMAND, ON_MESSAGE, ON_NOTIFY它们的区别

转帖http://blog.csdn.net/wuyijc/archive/2008/05/27/2487177.aspx
http://www.cppblog.com/Lee/archive/2008/09/19/62305.html
ON_COMMAND是菜单和工具栏项处理消息的宏
ON_MESSAGE是处理自定义消息的宏
ON_NOTIFY 是控件向其父窗口发送消息处理的宏对这几个消息的理解要先了解一下Window消息的背景。在Windows3.1里,控件会将mouse, keybord等等的消息通知它的父窗口, 使用的消息就只有WM_COMMAND, 事件种类和控件ID被包含在wParam中, 控件的句柄包含在lParam中。由于wParam和 lParam已经满了,当控件要向父窗口发送其它特殊消息同时附带很多信息的时候就没有地方可以存放它们了。所以Windows3.1中定义了许多其它的消息种类,比如WM_VSCROLL, WM_CTLCOLOR等等,每种消息wParam,lParam中附带的信息是不同的。当到了Win32后,控件的种类越来越多,当然不可以为每一个控件都定义一套消息,这样也不利于系统的扩充。所以在Win32中定义了唯一一个强大的消息 WM_NOTIFY。当然WM_NOTIFY也遵守原来的消息规则,既只带参数wParam和lParam。唯一不同处在于,此时的lParam中传送的是一个NMHDR指针。不同的控件可以按照规则对NMHDR进行扩充,因此WM_NOTIFY消息传送的信息量可以相当的大,这个可以看看MSDN中的相关说明,TreeControl中就有很多这种消息。现在就可以知道为什么有ON_MESSAGE ,ON_COMMAND, , ON_NOTIFY了。ON_MESSAGE是处理所有的Windows的消息的,因为所有的消息都以相同的格式传送,也就是ID, WPARAM, LPARAM.ON_COMMAND是专门处理WM_COMMAND消息的,这样我们就不用自己解开WM_COMMAND中wParam和lParam中传送的控件ID,事件种类…(所有的都在MFC内部解决了:),当然方便了。ON_NOTIFY更是不用说了,看看他的处理函数,是不是把NMHDR解出来了。这样一样就一目了然了,ON_COMMAND和ON_NOTIFY都可以用ON_MESSAGE来处理,只不过自己要多做很多事情。ON_COMMAND和ON_NOTIFY最好就不要互换了!



几点说明:
1、ON_COMMAND(id,memberFxn) 此宏通过ClassWizard或手工插入一个消息映射。它表明那个函数将从一个命令用户接口(例如一个菜单项或toolbar按钮)处理一个命令消息。当一个命令对象通过指定的ID接受到一个Windows WM_COMMAND消息时,ON_COMMAND将调用成员函数memberFxn处理此消息。在用户的消息映射中,对于每个菜单或加速器命令(必须被映射到一个消息处理函数)应该确实有一个ON_COMMAND宏语句。
2、ON_MESSAGE(message,memberFxn)指明哪个函数将处理一用户定义消息。用户定义消息通常定义在WM_USER到0x7FF范围内。用户定义消息是那些不是标准 Windows WM_MESSAGE消息的任何消息。在用户的消息映射中,每个必须被映射到一个消息处理函数。用户定义消息应该有一个 ON_MESSAGE宏语句。
3、ON_Update_COMMAND_UI(id,memberFxn)此宏通常通过ClassWizard被插入一个消息映射,以指明哪个函数将处理一个用户接口个更改命令消息。在用户的消息映射中,每个用户接口更改命令(比讯被映射到一个消息处理函数)应该有一个ON_Update_COMMAND_UI宏语句。4、ON_VBXEVENT(wNotifyCode,memberFxn) 此宏通常通过ClassWizard被插入一个消息映射,以指明哪个函数将处理一个来自VBX控制的消息。在用户的消息映射中每个被映射到一消息处理函数的VBX控制消息应该有一个宏语句。5、ON_REGISTERED_MESSAGE(nmessageVarible,memberFxn) Windows的RegisterWindowsMesage函数用于定义一个新窗口消息,此消息保证在整个系统中是唯一的。此宏表明哪个函数处理已注册消息。变量nMessageViable应以NEAR修饰符来定义。
6、ON_CONTROL(wNotifyCode,id,memberFxn)表明哪个函数将处理一个常规控制表示消息。控制标识消息是那些从一个控制夫发送到母窗口的消息。

鬼泣3(1)

看着CFileFind有点累了,那个dlg涉及的东西还真多,tnnd,玩会游戏再说。
话说我的ps16张碟子终于到了,以前在pc上玩的鬼泣3,感觉自己机子运行上有点卡,现在专用的ps2来了,哈哈。这几张碟子估计够我玩一个学期了
刚把那只狗打过去,话说鬼泣3做得还真好,尤其是打斗系统,那真是爽的不行,由此对capcom佩服的五体投地。
发几张游戏截图上来

CFileFind

今天研究CFileFind
1、CFileFind类的声明文件保存在afx.h头文件中。
2、该类的实现的功能:执行本地文件的查找(查找某个具体的文件,查找某类文件x*.x*,查找所有文件*.*)
3、CFileFind类是CGopherFileFind和CFtpFileFind类的基类。
4、CFileFind类的构造函数::CFileFind()和关闭函数::Close()我会成对使用。
5、CFileFind类的成员函数我根据其操作特性划分为3类:查找操作类、获得文件属性类、判断文件属性类。(下面我先进行函数罗列并没有完整的描述函数的参数)
查找操作类
::FindFile();
::FindNextFile();
获得文件属性类
::GetCreationTime();
::GetLastAccessTime();
::GetLastWriteTime();
::GetFileName();
::GetRoot();
::GetFilePath();
::GetFileTitle();
::GetFileURL();
::GetLength();

判断文件属性类
::IsArchived();
::IsCompressed();
::IsDirectory();
::IsDots();
::IsHidden();
::IsNormal();
::IsReadOnly();
::IsSystem();
::IsTemporary();
::MatchesMask();
6、CFileFind类中成员函数使用应注意的顺序
在创建了CFileFind对象后,先执行::FindFile()函数,然后执行::FindNextFile(),然后选择执行(获得文件属性类)的函数或者(判断文件属性类)函数。
7、CFileFind类成员函数的详细分析
virtual BOOL FindFile(LPCTSTR pstrName = null,DWORD dwUnused = 0);
该函数若返回非0 则表明执行成功,0 则表明执行不成功。
pstrName:需要查找的文件名,例:“E:\\编程工具\\VC++\\MFC例子.rar”,“E:\\编程工具\\VC++\\MFC*.rar”,“E:\\编程工具\\VC++\\*.*”,也可以是NULL表示“*.*”。
dwUnused:必须为0

virtual BOOL FindNextFile();
该函数返回值非0 还有符合条件的文件, 0表示是最后一个文件。

virtual BOOL GetCreationTime(FILETIME *pFileTime) const;
virtual BOOL GetCreationTime(CTime& refTime) const;
该函数用来获得查找到的某个文件的创建时间,返回值非0 获得创建时间成功操作,0表示执行获得创建时间失败或者FindNextFile()没有被执行的时候。
FILETIME *:容纳时间的结构指针
CTime&:容纳时间的对象地址
此处介绍:FILETIME和CTime相互转换的处理方法:
FILETIME转CTime的方法:
A、CTime对象在初始化时可以传递FILETIME结构
FILETIME ft;
CTime time(ft);
B、将FILETIME转换为SYSTEMTIME,然后CTime对象在初始化时可以传递SYSTEMTIME结构
FILETIME ft;
SYSTEMTIME st;
BOOL bSuccess = ::FileTimeToSystemTime(&ft , &st);
CTime time(st);
CTime转FILETIME方法:
CTime time(CTime::GetCurrentTime());
SYSTEMTIME st;
time.GetAsSystemTime(st);
FILETIME ft;
::SystemTimeToFileTime(&st,&ft);

virtual BOOL GetLastAccessTime(FILETIME *pFileTime) const;
virtual BOOL GetLastAccessTime(CTime& refTime) const;
该函数用来获得某个文件最后被访问的时间,非0表示执行成功,0表示执行失败或者FindNextFile()函数没有执行的时候。

virtual BOOL GetLastWriteTime(FILETIME *pFileTime) const;
virtual BOOL GetLastWriteTime(CTime& refTime) const;
该函数用来获得某个文件最后被访问的时间,非0表示执行成功,0表示执行失败或者FindNextFile()函数没有执行的时候。

virtual CString GetFilePath() const;
该函数用来获得查找到的文件绝对路径,必须在执行了FindNextFile()后该函数才能执行成功。
返回的结果是CString对象,例“E:\\编程工具\\VC++\\MFC.rar”

virtual CString GetFileName() const;
该函数用来获得查找到的文件的全称,必须在执行了FindNextFile()后该函数才能执行成功。
返回的结果是CString对象,例“MFC.rar”

virtual CString GetFileTitle() const;
该函数用来获得查找到的文件的名称,必须在执行了FindNextFile()后该函数才能执行成功。
返回的结果是CString对象,例“MFC”

virtual CString GetRoot() const;
该函数用来获得查找到的文件的根目录,必须在执行了FindNextFile()后该函数才能执行成功。
返回的结果是CString对象,例“E:\\编程工具\\VC++\\”

virtual CString GetFileURL() const;
该函数用来获得查找到的文件的URL路径,必须在执行了FindNextFile()后该函数才能执行成功。
返回的结果是CString对象,例“file://E:\\编程工具\\VC++\\MFC.rar”

DWORD GetLength() const;
该函数返回值获得查找到的文件的长度,必须在执行了FindNextFile()后该函数才能执行成功。

BOOL IsArchived() const;
该函数用来判断查找的文件属性是否是档案文件,非0表示是,0表示不是。必须在执行了FindNextFile()后该函数才能执行成功

BOOL IsCompressed() const;
该函数用来判断查找的文件属性是否是压缩文件,非0表示是,0表示不是。必须在执行了FindNextFile()后该函数才能执行成功

BOOL IsDirectory() const;
该函数用来判断查找的文件属性是否是路径文件,非0表示是,0表示不是。必须在执行了FindNextFile()后该函数才能执行成功

BOOL IsDots() const;
该函数用来判断查找的文件属性是否是“.”,“..”,非0表示是,0表示不是。必须在执行了FindNextFile()后该函数才能执行成功

BOOL IsHidden() const;
该函数用来判断查找的文件属性是否隐藏文件,非0表示是,0表示不是。必须在执行了FindNextFile()后该函数才能执行成功

BOOL IsNormal() const;
该函数用来判断查找的文件属性是否正常文件,非0表示是,0表示不是。必须在执行了FindNextFile()后该函数才能执行成功

BOOL IsReadOnly() const;
该函数用来判断查找的文件属性是否只读文件,非0表示是,0表示不是。必须在执行了FindNextFile()后该函数才能执行成功

BOOL IsSystem() const;
该函数用来判断查找的文件属性是否系统文件,非0表示是,0表示不是。必须在执行了FindNextFile()后该函数才能执行成功

BOOL IsTemporary() const;
该函数用来判断查找的文件属性是否临时文件,非0表示是,0表示不是。必须在执行了FindNextFile()后该函数才能执行成功

BOOL MatchesMask(DWORD dwMask) const;
该函数用来判断查找的文件的综合属性,非0表示是,0表示不是。必须在执行了FindNextFile()后该函数才能执行成功
dwMask参数的使用方法:几种文件属性采用或运算()
文件属性的结构定义:
FILE_ATTRIBUTE_ARCHIVE:档案文件
FILE_ATTRIBUTE_COMPRESSED:压缩文件
FILE_ATTRIBUTE_DIRECTORY:路径文件
FILE_ATTRIBUTE_NORMAL:正常文件
FILE_ATTRIBUTE_READONLY:只读文件
FILE_ATTRIBUTE_SYSTEM:系统文件
FILE_ATTRIBUTE_TEMPORARY:临时文件
FILE_ATTRIBUTE_HIDDEN:隐藏文件

心境上的总结

放假了2天了,BNB段位刚开赛就被我打了个3段,看来真的是到了极致了,我相信现实中我也可以如此极致。
根据我实践中的经验,一个人还是说道做到得好,不管是对自己说的,还是对别人说的,这不仅是毅力上的锻炼,而且也是勇气的锻炼。
再次根据我实践中的经验,我还是少说话的好,这是一种舒服的感觉,也是一种让大脑保持清醒的方法。
顺带提一下关于爱情,我曾经无比热情的对待了它,但是........我不想说了。对此,我想到:这就是命运吧。还是技术好啊,至少你很懂事......
孤独一世也好,总之,我是不会再爱情付出我的热情了,除非你能像我一样付出的热情可以令我如此感动...........我说到做到。。。
有人曾经告诉我,不能变成机器,但是此刻,我毫无疑问的要成为机器了,心已静,眼已冷,若如此我不会再败。
别了,花花世界。

2009年3月28日星期六

计算机绘图做的东西

总结一下计算机绘图的东西吧。

上了这么几周课,计算机绘图所讲的内容都是一些最底层的东西。

比如说,画线算法,画圆的算法,不要误会,所谓的画线之类的算法是要考虑像素点的取舍的。还有教的诸如裁剪算法。

用得是孙家光的那本计算机图形学,感觉那本书很撇,中间出错无数。

今天做了作业,也算是熟悉MFC所做的一些事情吧。

发几张图上来。主要是做了画线,画圆,还有椭圆的算法,个人觉得自己代码中采用的模式还是挺好的。


继续加油吧














2009年3月26日星期四

文件查找系统

今天到明天打算做一个文件查找的小程序,刚又去浩哥的博客转了一圈,浩哥你永远是我崇拜的偶像。

是激励我前进的动力。

总之是为了熟悉下MFC的一些界面的函数,为下一步的地图编辑器打个基础。

程序界面大概如下,本来就是模仿别人的小程序。截个图吧。