转载:http://www.xuebuyuan.com/2167614.html

新建一个Demo工程时,编译之前有一些VS的配置是必须的,在Debug和Release下,工程必须包括:

$(GFXSDK)\Src\GRenderer

$(GFXSDK)\Src\GKernel

$(GFXSDK)\Src\GFxXML

$(GFXSDK)\Include

这里$(GFXSDK)环境变量指的就是你安装Gfx的位置,其实如果你能够有Gfx中的Lib何Include文件夹得话,你吧他们放到工程目录下,你就可以使用相对路径来指定这些路径,就不必为每个开发人员安装Gfx了。

至于库文件,就是一些核心的内容,这部分是不会提供源码,所以我们也必须包含这些库文件来提供给应用程序

$(DXSDK_DIR)\Lib\x86

$(GFXSDK)\3rdParty\expat-2.0.1\lib

$(GFXSDK)\Lib\$(PlatformName)\Msvc80\Debug_Static\

$(GFXSDK)\3rdParty\zlib-1.2.3\Lib\$(PlatformName)\Msvc80\Debug

$(GFXSDK)\3rdParty\jpeg-6b\Lib\$(PlatformName)\Msvc80\Debug

我们开发程序时基本要用的库文件如下:

libgfx.lib 

libjpeg.lib

zlib.lib 

imm32.lib  

winmm.lib

libgrenderer_d3d9.lib

作为一个没有封装过的引擎,在开发程序的时候需要建立以下的一些对象来实现一个对象的加载:

#include "GTimer.h"

#include "GFxEvent.h"

#include "GFxPlayer.h" 

#include "GFxFontLib.h"

#include "FxPlayerLog.h"

#include "GRendererD3D9.h"

// GFxLoader 每个应用程序都需要一个Load来读取来自文件的Flash文件

GFxLoader           gfxLoader;

 

// SWF/GFx GFxMovieDef  这是一个具体的定义Flash文件的对象,通过它可以创建一个可操作的Flash对象

GPtr<GFxMovieDef>   pUIMovieDef;

 

// GFxMovieView 这是一个可以操作的Flash对象,通过它可以进行与C++和Flash直接进行通信和传递参数以及一些对影片的操作。

GPtr<GFxMovieView>  pUIMovie;

 

// D3D9 这个是针对这个Deam儿建立的D3D对象。

GPtr<GRendererD3D9>   pRenderer;

GPtr<GFxRenderConfig> pRenderConfig;

第一步肯定是要为Gfx分配内存,GFxSystem对象就是这个作用,这个对象在第一个Gfx被调用时获取,并且在结束前不能释放,它位于WinMian函数头里面。

在初始化过程中执行下面的一些操作:

gfxLoader->SetLog(GPtr<GFxLog>(*new GFxPlayerLog()));

//读取文件的对象

GPtr<GFxFileOpener> pfileOpener = *new GFxFileOpener 

//  默认方式导入

GPtr<GFxFileOpener> pfileOpener = *new GFxFileOpener;

gfxLoader->SetFileOpener(pfileOpener);

GfxLoader通过GFxFileOpener来读取文件内容,默认为从磁盘读入,也可以从内存或其他资源文件读入。

D3D对象的创建和关联如下:

// GFxD3D

pRenderer = *GRendererD3D9::CreateRenderer();

  

// GFxLoader

pRenderConfig = *new GFxRenderConfig(pRenderer);

gfxLoader->SetRenderConfig(pRenderConfig);

这样很轻松的就将对象关联进了Gfx Movie中,这里如果不是D3D对象,而是其他对象如GameBryo等,也可以用类似的方法。

接下来就是导入Flash文件了,通过一个宏定义路径UIMOVIE_FILENAME相对路径来导入

// 

pUIMovieDef = *(gfxLoader.CreateMovie(UIMOVIE_FILENAME, 

                                  GFxLoader::LoadKeepBindData |

              GFxLoader::LoadWaitFrame1));

动画实例的创建时通过上面的pUIMovieDef来创建的。

pUIMovie = *pUIMovieDef->CreateInstance(true);

指向动画的第一帧:

pUIMovie->Advance(0.0f, 0);

透明的效果和背景融合。

pUIMovie->SetBackgroundAlpha(0.0f);

接下来就是设置Flash的视窗和缩放方式。// 

RECT windowRect = DXUTGetWindowClientRect();

DWORD windowWidth = windowRect.right - windowRect.left;

DWORD windowHeight = windowRect.bottom - windowRect.top;

pUIMovie->SetViewport(windowWidth, windowHeight, 0, 0, 

                      windowWidth, windowHeight);

pUIMovie->SetViewScaleMode(GFxMovieView::SM_ShowAll);//默认的方式,按上面指定窗口比例扩展

如下是一些对齐方式的代码

pUIMovie->SetViewAlignment(GFxMovieView::Align_CenterRight);

在消息循环里面,flash的事件响应都会在ProcessEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool *pbNoFurtherProcessing) 总进行处理。

总体看起来还是很麻烦的,做了过多的底层操作。

但是如果等到他哈GameBryo集成后的游戏引擎,你会发现这些操作你基本上都不用在去做了,而更加关注的是逻辑的设计,这里的一个Demo只是为了解释一下大体上的一个架构。

Scaleform Gfx的Demo的更多相关文章

  1. 我所遭遇过的游戏中间件--Scaleform

    我所遭遇过的游戏中间件---Scaleform Scaleform帮助开发人员利用现代系统的三维硬件加速性能创建电影品质的菜单.游戏内HUD,动画纹理.迷你游戏以及移动游戏与应用.Scaleform作 ...

  2. UDK Stat命令

    Stat命令(chs  en)提供了游戏和引擎各个方面的实时统计信息,输入不同参数会在屏幕HUD上显示对应统计数据. 非Shipping版的UDK才会启用STATS宏,统计逻辑才会编译进exe,才能使 ...

  3. scaleform mobile sdk for android 多点触摸 修正

    修正 scaleform 的多点触控 (随手一记 给后来的人做个参考) scaleform 版本号 4.2.24 (估计这就是最后一个 移动版的版本了,万年没有更新了) 开始 一直以为 scalefo ...

  4. qml demo分析(maroon-小游戏)

    1.效果展示 这篇文章我还是分析一个qt源码中的qml程序,程序运行效果如下图所示. 图1  游戏开始 图2  游戏中 2.源码分析 这个游戏的源码文件比较多,为了能更清楚的了解整个代码,我先整体分析 ...

  5. scaleform中ActionScript和UnrealScript的交互

    转自:http://www.cnblogs.com/NEOCSL/p/4174134.html scaleform是制作UI的好工具: 1.他可以解放程序员用代码控制的UI效果,例如平移,旋转和缩放都 ...

  6. 通过一个demo了解Redux

    TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...

  7. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

  8. 在线浏览PDF之PDF.JS (附demo)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#skill 下载地址:http://mozilla.gith ...

  9. 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo

    Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...

随机推荐

  1. 简单的topK问题

    /************************************************************************/ /* 求一组数据中的top(K)问题,这是一个经典 ...

  2. 将png图片转换为字体图标

    字体图标不仅可以随意调整大小,而且可以避免在页面制作过程中引用N多的图片,发送请求造成的流量浪费,因此,我们可以将图标的icon转换成字体图标: 方法一: 1.将png格式的图片转换成svg格式: 网 ...

  3. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求(转)

    通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需要获取认证信息(如Cookie),所以返回的是HttpWebRe ...

  4. TCP/IP四层模型讲解笔记

    本文转载自:http://www.vuln.cn/2041 OSI七层模型   表示层:用来解码不同的格式为机器语言,以及其他功能. 会话层:判断是否需要网络传输. 传输层:识别端口来指定服务器,如指 ...

  5. 随机获取一个集合(List, Set,Map)中的元素<转>

    import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Random; impo ...

  6. linux基础知识 【转】

    linux目录架构 / 根目录 /bin 常用的命令 binary file 的目錄 /boot 存放系统启动时必须读取的档案,包括核心 (kernel) 在内 /boot/grub/menu.lst ...

  7. apk MIME类型

    MIME (Multipurpose Internet Mail Extensions) 多用途互联网邮件扩展,它设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器 ...

  8. Nginx 基本命令

    基础命令 1.启动 直接点击Nginx目录下的nginx.exe 或者 cmd运行start nginx 2.关闭 nginx -s stop 或者 nginx -s quit stop表示立即停止n ...

  9. 从浏览器中输入URL到页面加载的发生了什么-转载

    转:https://www.cnblogs.com/confach/p/10050013.html 背景 “从浏览器中输入URL到页面加载的发生了什么“,这是一道经典的面试题,涉及到的知识面非常多,但 ...

  10. 安卓开发笔记——丰富多彩的TextView

    随手笔记,记录一些东西~ 记得之前写过一篇文章<安卓开发笔记——个性化TextView(新浪微博)>:http://www.cnblogs.com/lichenwei/p/4411607. ...