最近在研究桌面精灵,遇到许多问题,以下是源代码下载地址
http://u.115.com/file/t7babfaacc
基本上问题都在说明和代码里了
对桌面精灵有兴趣或有经验的看下吧
目前的目的是:
1、透明客户区窗体(已实现)
2、显示精灵动画(已实现)
3、精灵可随意拖动(?)
4、精灵自己会走动(?)
5、精灵移动转身自然平滑(未实现)3和4单独实现都没有问题,但是同时实现的时候就做不到了。
精灵的移动使用movewindow()实现
现在只用了一个模拟的办法勉强达到,代价就是即使点击精灵精灵的位置也会发生变化,而别人做的明显不会,原谅我看不懂MFC....
之前使用向窗口发送拖动消息实现拖动,效果不错,但是此时wm_lbuttonup就不会有,而我的思路是拖动的时候精灵不走动,放开后继续在放开的地方走动,如果没有lbuttonup消息,我不知道改怎么做,我挨个看了WINDOWS消息也不知道该用什么方法解决这个问题

解决方案 »

  1.   

    Win32 API不比MFC难用,既然走的是Win32的路,就一直走下去吧。MFC是过去时了。
    精灵拖动,可以发送消息模拟拖动标题栏实现,代码:
    case WM_LBUTTONDOWN:
            PostMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, lParam);
    在拖动时停止动画可以通过对WM_LBUTTONDOWN、WM_LBUTTONUP的响应来实现。
      

  2.   

    其实这种桌面精灵,微软有专门的SDK,阅:
    http://msdn.microsoft.com/en-us/library/ms695784%28v=vs.85%29.aspx
    需要的工具:
    Agent Character Editor
    Linguistic Sound Editing Tool
      

  3.   

    我一开始就是这么做的,立即碰壁了,原因是这么做之后就不会产生WM_LBUTTONUP,对与此我感到很奇怪
    对与三楼那个,我比较想自己实现,因为现在我已经接近目标了
      

  4.   

    你的问题好像出在动作控制上,连续图像的固定点没有考虑。比如:走路的两张连续图片,对齐的依据应该是脚尖(如果有脚尖的话^。。^两张图相对应的脚尖的点),而不是大约的位置。这个如果做得随便,走动的姿势很怪异。在BitBlt时坐标位置要控制好。看到你的图了(这种图相当于多张图,隐含双缓存的好处,感觉最好还要有个背景层),很想知道这样的资源图哪里有啊?挺好玩。
      

  5.   

    不会产生WM_LBUTTONUP是什么意思啊?
      

  6.   


    这些是连图,游戏里经常用到,不过现在D3D基本上不用这些了,D3D直接使用PNG了,这些资源在RPG制作大师里带有,游戏资源网也有下载关于动作问题我已经想到了解决办法,但还没加入代码当中,理论上可行现在着力解决拖拽问题不会产生WM_LBUTTONUP是什么意思啊?就是不会产生WM_LBUTTONUP这个消息,所以不知道改用什么办法判断鼠标右键是否弹起,不知道鼠标什么时候弹起,如何做停止拖拽后的自行走动呢?现在的思路:精灵在普通状态下会自己走动,当精灵被拖拽,精灵停止自身走动,跟着鼠标走,当右键弹起,恢复最初的状态。所以我的问题集中在右键上这是最新的源代码:http://u.115.com/file/f7edf6bbaf
    解决了之前的问题,但又产生了新的问题,不过还是关于鼠标右键的处理另外里面带了几张连图
      

  7.   

    下来看了,楼主的编程风格很好。
    建议在压缩包里加入编译后的exe文件,因为不是所有人机器上都装着VC.NET
    之前没有考虑详细楼主遇到的问题。之前的PostMessage方法还是可行的。方法是把PostMessage改为SendMessage,目的是不让它立即返回,在这个语句后面就可以判断左键弹起了。即:
    case WM_LBUTTONDOWN:
            SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, lParam);
            //左键弹起响应代码