2017-12-21 FriceEngine试用与API中文化
早先就听闻FriceEngine已有中文接口版本, 可惜没有机会尝试. 经原作者 @大笨蛋千里冰封 (Github账号 @ice1000 )建议, 在FriceEngine的DSL封装的接口基础上, 添加了对应的中文接口.
下面的代码利用了新添的中文接口, 实现了一个圆形向方块加速撞击后反弹下落的动画过程(开发环境: IntelliJ IDEA社区版, 更全的测试用例在此, 是参考了原代码中的测试用例编写的):
注: FriceEngine仍在活跃开发中, 本文的接口很可能在新版本中修改. 使用时请参考最新的测试代码.

接口中文化过程
在命名接口与参数时, 遇到不少需要推敲的问题:
- 英文接口中, (x,y)在不同地方有不同含义, 比如在形状(方形/圆形)属性中, 是定位功能(左上角顶点的坐标, 都为正数). 而在
速度等接口中, 表示的是横向和纵向的分量, 可以为负. 在中文命名后, 进行了区别:左上角x/左上角y和横向速度_左负右正/纵向速度_上负下正. 后者比较累赘, 而且也许应该在注释而不是命名中说明参数的正负意义, 但鉴于IntelliJ提供了独到的参数名提示功能, 就暂时把命名的含义最大化了. - 之前对其他库中文化也碰到过. 对于重载接口, 暂时还是采用了赋值对应英文接口的方式, 但其实是可以用调用中文接口实现, 比如
FObject.加速(x: Int, y: Int)调用FObject.加速(x: Double, y: Double). 这决定了中文化的"深度". 但越"深", 越涉及到实现, 维护的工作量就越大. 个人暂时倾向于尽量"浅"地进行中文化. - 暂时是将中文接口的实现放在了对应英文接口的下面, 这样的好处是关联性一目了然, 但也让它们分散在各处, 带来一些维护的难度.
另一种方式也许是至少将简单的对等接口抽取出来, 用一个数据结构描述(类似下面), 然后在编译之前自动生成这些接口的实现, 但这个脑洞比较大. 
whenExit(block: () -> Unit) -> 当退出时(块: () -> Unit)
ImageObject.url(s: String) -> ImageObject.远程文件(网址: String)
...
其他感想
- IntelliJ刚开始用, Kotlin和Gradle也是初学, 在使用和开发过程中遇到不少磕碰. 在此多谢原作者的各种协助与指点. Kotlin的语言特性也让添加中文接口的实现过程不那么费劲. 比较印象深刻的是对属性的get/set
 - 相比之前尝试的p5js的动画绘制, 感觉FriceEngine的语法更加灵活, 有不少高层接口让开发更加方便, 比如
每隔(毫秒数), 以及当碰撞(某物体名), 在p5js中好像没有类似功能, 使用时需要根据帧数和帧率用算法自行实现. 而且类OO的设计(对形状可以取名)也是p5js不具备的. - 个人觉得API在形式上的一致性对易用性比较重要. 作为Kotlin新手, 个人在使用时开始有些语法上的困惑, 尤其是{}和()的使用. 比如代码中同时有
加速(0, 50)和: 
加速 {
    横向加速度_左负右正 = 20.0
}
- 强烈建议改进动画性能, 过高的CPU占用会让推广受限, 尤其是手机app上.
 
2017-12-21 FriceEngine试用与API中文化的更多相关文章
- 2017.12.21 学习vue的新得
		
温故而知新,这句话说的真的有道理.每次回顾vue总会学到不一样的知识点,我就在想,我第一遍到底看了什么? 废话不多说,简要记录今天的所得: 1.v-if 与 v-show 同:都是条件渲染 异:渲染的 ...
 - 2017.7.21 Linux中ELK服务后台运行方式
		
通过 2017.7.18 linux下ELK环境搭建 搭建好服务于之后,一旦按下Ctrl+C或者退出登录会话,服务的进程就随之停止了.要长期在后台运行此程序,有几种方式: 1 nohup 输入Ctrl ...
 - C#实现多级子目录Zip压缩解压实例  NET4.6下的UTC时间转换  [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了  asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程  asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案  .NET Core开发日志
		
C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...
 - Apache Flink 1.12.0 正式发布,DataSet API 将被弃用,真正的流批一体
		
Apache Flink 1.12.0 正式发布 Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 的开发,提交 ...
 - IoC在ASP.NET Web API中的应用
		
控制反转(Inversion of Control,IoC),简单地说,就是应用本身不负责依赖对象的创建和维护,而交给一个外部容器来负责.这样控制权就由应用转移到了外部IoC容器,控制权就实现了所谓的 ...
 - ASP.NET Web API中的JSON和XML序列化
		
ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok ...
 - Web API中使用Dependency Resolver
		
Web API中使用Dependency Resolver 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyo ...
 - 目标HttpController在ASP.NET Web API中是如何被激活的:目标HttpController的选择
		
目标HttpController在ASP.NET Web API中是如何被激活的:目标HttpController的选择 ASP.NET Web API能够根据请求激活目标HttpController ...
 - 在ASP.NET Core Web API中为RESTful服务增加对HAL的支持
		
HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务 ...
 
随机推荐
- 关于 redis的操作
			
1.修改配置文件 redis.conf是redis的配置文件,redis.conf在redis源码目录. 注意修改port作为redis进程的端口,port默认6379.如果需要搭建redis集群,千 ...
 - TextView展示富文本时emoj或图片和文字不对齐的解决方案
			
在项目中,回复框.聊天界面的显示往往会有emoj或者图片,但是一个比较头疼的问题是,会出现emoj表情或者图片和文字的位置不对齐,总是有偏移,这样很影响用户体验的.下面会总结一下如何解决这个问题. 本 ...
 - JavaScript的BOM编程,事件-第4章
			
目标 BOM编程 window和document对象 window对象的属性和方法 document对象的属性和方法 JavaScript中对象的分类 浏览器对象:window对象 window对象, ...
 - Android精通教程V
			
前言 大家好,给大家带来Android精通教程V的概述,希望你们喜欢 前言 如果你想学习Android开发,那你就要了解Java编程,这是基础,也是重点,如果没学Java语法就先学习,再来学Andro ...
 - koa-static与react-create-app搭配的路径
			
概述 前端路由与后端路由的结合一直是一个难题.koa-static这个中间件能够把静态资源"搬到"后端路由上面去,react-create-app在不解构的情况下只会把资源打包到b ...
 - js中的类
			
概述 经典的老书害人啊,全是讨论怎么解决javascript里面用函数形式定义类的坑.结果es2015直接用class关键字解决了所有问题.虽然class关键字没有什么新东西,只是js现有继承结构的语 ...
 - MongoDB索引管理-索引的创建、查看、删除
			
索引是提高查询查询效率最有效的手段.索引是一种特殊的数据结构,索引以易于遍历的形式存储了数据的部分内容(如:一个特定的字段或一组字段值),索引会按一定规则对存储值进行排序,而且索引的存储位置在内存中, ...
 - JAVA中的COPYONWRITE容器
			
Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...
 - Intellij新安装初始化配置
			
自动编译开关 忽略大小写开关 IDEA默认是匹配大小写,此开关如果未关.你输入字符一定要符合大小写.比如你敲string是不会出现代码提示或智能补充.但是,如果你开了这个开关,你无论输入String或 ...
 - CentOS 6.5的安装详解(图文详解)
			
不多说,直接上干货! 主流: 目前的Linux操作系统主要应用于生产环境, 主流企业级Linux系统仍旧是RedHat或者CentOS. 免费: RedHat 和CentOS差别不大,CentOS是一 ...