制作背景

为了参加ImagineCup 2013 世界公民类比赛,我们设计制作了一个可动态扩展的幼教类App。这个App需要能动态加载内容,内容包括带动画可交互的电子书,动画,视频,游戏。

技术支持

2012年10月第一次:因为SVG性能问题,将SVG换为cocos2d-x JSBind,可惜cocos2d-x JSBind不完善,最后换为cocos2d-x html5。11月第二次:cocos2d-x html5性能问题,破产。12月第三次:取消HTML5,转为使用XAML+JS模式。
(微软的WinRT明显就是阉割的WPF,查过动态加载相关的类库,只允许加载安装时已包含的DLL。)

用XAML来做前台页面,性能比HTML的高很多,而且制作十分方便,微软擅长做IDE嘛,Blend配合Adobe的AI出矢量界面、动画十分迅速,我们的美工上手也快。
用JS来做后台逻辑也是很方便的,为了程序流程方便管理后来用状态机做了个程序制作工具。

由于XAML和JS本质上都是文本,所以加密非常容易,Win8Metro做AES加密很容易,可以很好的保护代码。(额...反编译C#代码获取AES密钥不在讨论范围内...)
根据需要另集成了Spritehand.PhysicsHelper.Metro物理引擎。

相关技术传送门

核心原理


XAML与C#代码通信

网上有个Win8Metro的框架,G.Controls其中Interactive部分就可以把WPF中的Behavior、EventTrigger带回来。

至于JS与C#通信那就简单了,WebView本身就有事件支持。

服务端为Asp.Net MVC/WebApi,图片直接Base64存数据库。

(代码没有重构过,比较乱,就不发布了。)

其他


总体开发流程


外壳程序状态机流程图


其中一个游戏的部分状态机流程图


程序逻辑编辑器界面


程序逻辑编辑器界面


HTML5支持WebSocket可以连接UppBox,自写的JS状态机引擎在调试模式下可以把与C#代码交互过程全部传输出来,还可以传输指令,方便调试。


XAML+JS协议文档,大部分命令都支持写在XAML自动触发或JS发送


配套的App测试平台...没什么用的机会了...

Win8 Metro动态加载内容框架的更多相关文章

  1. Scrapy 框架 使用 selenium 爬取动态加载内容

    使用 selenium 爬取动态加载内容 开启中间件 DOWNLOADER_MIDDLEWARES = { 'wangyiPro.middlewares.WangyiproDownloaderMidd ...

  2. 在ASP.NET中动态加载内容(用户控件和模板)

    在ASP.NET中动态加载内容(用户控件和模板) 要点: 1. 使用Page.ParseControl 2. 使用base.LoadControl 第一部分:加载模板 下 面是一个模板“<tab ...

  3. bootstrap模态框modal使用remote动态加载内容,第二次加载显示相同内容解决办法

    bootstrap的modal中,使用remote可以动态加载页面到modal-body中,并弹窗显示 如果提供的是 URL,将利用 jQuery 的 load 方法从此 URL 地址加载要展示的内容 ...

  4. python+selenium+PhantomJS爬取网页动态加载内容

    一般我们使用python的第三方库requests及框架scrapy来爬取网上的资源,但是设计javascript渲染的页面却不能抓取,此时,我们使用web自动化测试化工具Selenium+无界面浏览 ...

  5. bootstrap modal动态加载内容

    $("#test .modal-body").load('test_url?id=' + id,function(){ $("#followStep1").mo ...

  6. layui upload 在JS动态加载内容后, 点击按钮无反应

    /** * 根据用户选择的不同规格选项 * 返回 不同的输入框选项 */ function ajaxGetSpecInput2(spec_arr) { var goods_id = $('#goods ...

  7. APK动态加载框架(DL)解析

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/39937639 (来自singwhatiwanna的csdn博客) 前言 好久 ...

  8. Android动态加载框架汇总

    几种动态加载的比较 1.Tinker 用途:热修复 GitHub地址:https://github.com/Tencent/tinker/ 使用:http://www.jianshu.com/p/f6 ...

  9. 动态加载框架DL分析

    动态加载框架DL分析 插件化开发,主要解决三个问题1.动态加载未安装的apk,dex,jar等文件2.activity生命周期的问题,还有service3.Android的资源调用的问题 简单说一下怎 ...

随机推荐

  1. 毕业论文中使用的技术—FileReader接口

    用来把文件读入内存,并且读取文件中的数据. FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据 FileReader接口的方法 方法名 参 ...

  2. Daily Scrum Meeting 汇总

    Alpha Daily Scrum Meeting --FirstDay(11.8) Daily Scrum Meeting --SecondDay(11.9) Daily Scrum Meeting ...

  3. Swift 之模糊效果(毛玻璃效果,虚化效果)的实现

    前言: 之前项目中有用到过Objective-C的的模糊效果,感觉很是不错,而且iOS8之后官方SDK也直接提供了可以实现毛玻璃效果的三个类:UIBlurEffect.UIVibrancyEffect ...

  4. MsSQLserver中修改字段值系统自动生成的脚本

    主要参考一下脚本的实现思路: ①创建临时表 ②创建临时表 ③向临时表插入数据 ④删除原表 ⑤临时表改名 /* 为了防止任何可能出现的数据丢失问题,您应该先仔细检查此脚本,然后再在数据库设计器的上下文之 ...

  5. window10 office 手工完全卸载

    在地址栏输入itellyou,点击第一个搜索结果,可以从微软官方网站下载office安装. 一下是一点需要注意到的地方: 本次安装的是office2016其它类似 下载解压有的目录结构: 如果你是x6 ...

  6. ACM ICPC Vietnam National Second Round

    A. Stock Market 枚举哪一天买入,哪一天卖出即可. #include<cstdio> #include<algorithm> using namespace st ...

  7. SSH私钥取消密码(passphrase )

    1. 使用openssl命令去掉私钥的密码 openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa_new 2. 备份旧私钥 mv ~/.ssh/id_rsa ...

  8. js学习笔记之标准库

    在全局函数中,this等于window  在函数被作为某个对象的方法调用时,this等于那个对象. 数组的函数: 检测:Array.isArray() 转换:toString(),toLocalStr ...

  9. 根据异常处理对 Java 方法的层次分类

    我根据异常处理对 Java 的方法分为三个层次:1.执行层,2. 处理层,3. 调用层. 执行层方法只抛出异常 throws Exception,是作为代码的基层操作者,可能有多个层次. 处理层方法使 ...

  10. Javascript的自执行函数

    自执行函数其实也就是"立即执行的函数",它有四个特点:提高性能.利于压缩.避免冲突.依赖加载: 1.减少作用域查找 JS代码: // Anonymous function that ...