通过Flash和c++的交互来实现自己的桌面游戏

[转]
那种游戏最容易推广、接受人群最广泛,也最容易实现、效率最高?当然是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的关键代码如下:
     CShockwaveflash1 m_FlashPlayer;
     m_FlashPlayer.LoadMovie(0, strFlashFileName);  //加载flash
     m_FlashPlayer.Play();                          //开始播放
2,如何与flash进行交互?
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。

转载于:https://www.cnblogs.com/vilyLei/articles/1379477.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值