通过Flash和c++的交互来实现自己的桌面游戏
来源:互联网 发布:淘宝 电子发票 编辑:程序博客网 时间:2024/05/29 18:26
那种游戏最容易推广、接受人群最广泛,也最容易实现、效率最高?当然是flash.
那种高级语言最灵活,最具扩展性和兼容性,对系统的控制力最强?当然是c++。
如果flash 和c++ 结合起来开发游戏会是什么样子呢?当然具备以上的全部优点。
下面简单讲解一下最近实现的一个用C++做控制,用flash 做表现的桌面精灵。如果时间允许,我将在blog上全程介绍自己的开发进展。
1,如何在windows程序中播放flash?
首先创建一个vc项目,可以是win32程序,也可以是MFC。
然后加载shockwave flash object控件,在win32中可以使用如下方式进行加载:#import "c://windows//system32//macromed//flash//flash9b.ocx"。如果采用这种方式来实现播放flash 的效果将比较复杂。
而在MFC中则要简单的多,只要在你希望播放flash的窗口中添加flash 的ActiveX Control就可以了。然后给该控件关联一个对象,即会自动生成一个用于控制flash加载播放的类,类默认名为:CShockwaveflash1。
为了便于讲解,下面列出该类的部分代码。
class CShockwaveflash1 : public CWnd
{
//开始是一些构造及初始化函数
……
long get_TotalFrames()
{
long result;
InvokeHelper(0x7c, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
void LoadMovie(long layer, LPCTSTR url)
{
static BYTE parms[] = VTS_I4 VTS_BSTR ;
InvokeHelper(0x8e, DISPATCH_METHOD, VT_EMPTY, NULL, parms, layer, url);
}
void Play()
{
InvokeHelper(0x70, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
void Stop()
{
InvokeHelper(0x71, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
void Back()
{
InvokeHelper(0x72, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
……
}
可以看到,CShockwaveflash1主要是通过调用COM组件的方法来实现对flash的控制。播放flash的关键代码如下:
2,如何与flash进行交互?
CShockwaveflash1 m_FlashPlayer;
m_FlashPlayer.LoadMovie(0, strFlashFileName); //加载flash
m_FlashPlayer.Play(); //开始播放
shockwave flash object控件有四个事件句柄(event handler)。
分别是:FSCommand, OnProgress, FlashCall, OnReadyState.
其中,FSCommand就是flash就是给支持它的应用程序发送消息的手段。
具体的事件函数如下:
//接受flash播放过程中的消息
void CFlashGameDlg::FSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args)
{
// TODO: Add your control notification handler code here
if (strcmp(command, "WINDOWAPI") != 0)
{
//……
}
if( 0 == strcmp(command,"drag") )
{
MessageBox("开始拖动窗口!");
}
}
从上面的代码中可以看到,flash完全是通过发送文本消息的方式给外部发送指令的。所以我们可以在写flash前预先定义好一系列命令名称,然后在 flash的关键帧或一些按钮点击响应中发送这些指令。外部根据接受到的指令做对应的响应。由此就达到了flash与应用程序的交互。
除了利用 FSCommand外,shockwave flash object还提供了两个进行交互的函数
一个是CString GetVariable(LPCTSTR name),用来获得flash动画中变量name的值,该值以CString的形式返回给调用者;
一个是void SetVariable(LPCTSTR name, LPCTSTR value),可以用来将flash动画中的name变量设置一个值value。
但这种交互方式有比较高的耦合性,需要flash开发者及应用程序的开发者有比较紧密的配合。但这种方式也可以一些交互性很强的flash.当然更多的是两种方式同时采用。因为这两种方法各有不同的使用背景。一般来说如果需要对整个flash和应用程序的外部行为进行控制则采用FSCommand,而如果只是需要对flash的内部动作进行响应则使用GetVariable和 SetVariable。
参考资料:
http://blog.csdn.net/benny5609/archive/2007/11/18/1891076.aspx
- 通过Flash和c++的交互来实现自己的桌面游戏
- 通过Flash和c++的交互来实现自己的桌面游戏
- cocos2d-x 通过JNI实现c/c++和Android的java层函数交互
- cocos2d-x 通过JNI实现c/c++和Android的java层函数交互
- android web view的学习 2 通过WebChomeClient 实现进度条和title,通过WebViewClient 来进行url的拦截,和javascript的交互
- 通过GitHub和Hexo来搭建自己的个人博客
- C++ 实现flash动画播放——Flash和c++的交互
- Cocos2d-js04_游戏触摸交互的监听和实现
- 通过SecureCRT实现window和linux的编译交互
- 如何通过xshell实现Win和linux的交互
- Android通过使用webview实现和js的交互
- Flash AS3和ASP.NET的交互
- javascript和Flash ActionScript的交互(AS3)
- 自己写的mysql客户端应用程序(通过官方头文件和lib来编译链接实现)
- c# 通过程序来设置允许服务与桌面交互
- 通过修改framework来达到过滤启动桌面的效果
- 给合Flash的Socket和AMF3来尝试开发web游戏引擎
- Lua和C++是通过一个虚拟栈来交互的。
- 全球四大Java研讨会
- 正确的折半查找实现
- 快速幂取模
- php学习中的备忘
- [转载]点(Dot)与像素(Pixel)的区别
- 通过Flash和c++的交互来实现自己的桌面游戏
- 部署企业中第一台Windows Server 2008 R2域控制器
- 如何修改状态栏上时钟的颜色
- Truncate Table 会不会释放索引
- 修改css样式
- 用VC直接读写excel中的数据
- 缓存的几个
- windows程序设计第四章sysmets3程序详解
- GNU Grub