位置: 编程技术 - 正文

使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码(typescript concat)

编辑:rootadmin

推荐整理分享使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码(typescript concat),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:typescript const,typescript enum,typescript concat,typescript重载,typescript const,typescript重载,typescript重载,typescript contains,内容如对您有帮助,希望把文章链接给更多的朋友!

源码下载

源码我已经上传到 CSDN 了,无需资源分,下载地址: VS +TypeScript 1.4 进行开发。打开后,显示如下图:

JsTankGame 1.0:老的使用 JS 编写的坦克游戏。

JsTankGame 2.0:新的使用 TS 直接翻译过来的游戏。

JsTankGame:在 2.0 的基础上,对类型进行了重构后的新游戏。

重构步骤

由于老的 JS 游戏是采用 MS Ajax Client Library 构建,并且采用了 OOD 的方式来进行设计,再加之 TypeScript 可以兼容 JS 的全部代码。所以使用 TypeScript 来移植的工作也比较简单,主要是替换类型设计的代码:类、继承、接口等。

完成以上工作后,也就得到了使用 TS 编写的 2.0 版本。过程中体会到了强类型语言的诸多好处,当然也有一些 TS 目前并不完善的地方(后面会说)。

得到了强类型的 2.0 版本后,并没有结束。为了体验强类型对于重构的好处,我决定在这个版本之上做代码结构上的重构。

有了强类型编写的代码,我可以很方便地分析出每一个类型、每一个方法,具体在哪些地方被使用。这样,我就能很快地知道类型之间的依赖关系。不看不知道,一看吓一跳。之前一点一点随心写的代码,本以为类型设计得还不错,之间耦合性应该不是很高。但是图画完之后,才发现与想象中差点很远,这就是没有画图直接编写代码的结果,见下面两张图:

可以看出各精灵类型之间的关系是比较乱的,双向依赖随处可见。(其实图中因为把 SpriteManager 画到了另外一张图,所以没有显示出更复杂、更乱的关系。)

据此,我绘制了新的关系图,然后按照此关系来重构了所有的代码。这样就得到了最新的 3.0 版本。

新版本的类型关系图如下:

分层:

使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码(typescript concat)

精灵:

管理器:

代码层面,主要是把各精灵之间耦合的代码,都移植到了上层的管理器中。同时,为精灵定义事件来解除精灵与管理器的直接耦合。

TS 首次体验中感受的优缺点

优点: Lambda 非常好地解决了 this 指针的问题。 Chrome、IE 都能直接调试 TypeScript! 过程中还发现了弱类型无法发现的错误。因为重命名,还没有修改原来的代码。(SpriteManager.js 行)

缺点: 开发环境-还没有集成代码注释功能,只能手动拷贝。 开发环境-目前还不支持 Code Snippets。 开发环境-不支持关键字代码生成:if、while、swith、括号匹配等。 开发环境-不支持代码区域的定义(Region)。 语法-不支持事件的定义。 语法-暂时还不支持为类定义重载方法。见 SpriteBase.IsCollided 方法。

其它:

编译出的 JS 代码有一定的冗余。命令空间处显得特别明显。 重写基类方法,没有提示。 基类的属性获取器/设置器无法重写。 无法分辨哪些方法是虚方法。 接口中不能定义只读的属性。 还存在 BUG。(SpriteManager.ts line )。 简单定义一个数字类型的字段的话,默认值并不是 0,而是 NaN。

总结

总体说来,经过试用,我感觉 TS 到目前的 1.4 版本,已经可以用于正式的大型 JS 项目开发。但是还有很多地方需要改进!

附 Chrome、IE 调试 TS 截图:

以上所述就是本文的全部内容了,希望能够对大家熟练掌握typescript有所帮助。

TypeScript具有的几个不同特质 今天要讨论的话题是TypeScript。之前在转载过一篇《TheRiseofTypeScript》的文章,今天来谈一下我的感想。很多朋友应该都了解,TypeScript是微软推出的一个

实现前后端数据交互方法汇总 此文章适合前后端协同开发经验不足的新手阅读。HTML赋值输出到Element的value或data-nameinputtype="hidden"value="phpecho$user_avatar;"/divdata-value="phpecho$user_avatar;"/div

JS 作用域与作用域链详解 (1)作用域一个变量的作用域(scope)是程序源代码中定义的这个变量的区域。1.在JS中使用的是词法作用域(lexicalscope)不在任何函数内声明的变量(函

标签: typescript concat

本文链接地址:https://www.jiuchutong.com/biancheng/382842.html 转载请保留说明!

上一篇:ECMAScript5(ES5)中bind方法使用小结

下一篇:TypeScript具有的几个不同特质(typescript的缺点)

  • 企业之间拆借资金是什么意思
  • 转让金融资产需要交税吗
  • 固定资产盘点折旧怎么算
  • 发票抬头写错了还能改吗
  • 没有报关单货物违法吗
  • 在银行购买支票需要什么手续
  • 股权转让企业所得税税率
  • 以前年度损益调整会计分录
  • 关联交易措施
  • 个人转让商铺个人所得税核定征收
  • 现金支票存根联需要盖章吗?
  • 公司没有收入没开发票
  • 外贸企业出出口退税会计科目怎么做账?
  • 买二手车年限久的会怎样
  • 携税宝报税流程
  • 一般纳税人房租没有发票怎么办
  • 工程物资应该计入哪里
  • 外贸企业出口退税账务处理
  • 工商营业年报怎么做
  • 耗材会计分录做账怎么做
  • 公司成立前的准备工作有哪些
  • linux安装常用命令
  • 2021最新版眼保健视频
  • 受托加工物资入库流程
  • 承兑找零怎么做凭证
  • 电脑非法关机后开机进不了系统
  • macOS 11 Big Sur 开发者预览版 Beta 7正式推送
  • mmc.exe是什么进程
  • 金融资产减值损失计入什么科目
  • 计提固定资产折旧怎么做会计科目
  • 阐述python中浅复制与深复制
  • 软件企业职工培训费税前扣除标准
  • 养老院护工5.8k包吃住
  • 公司投资款无法收回
  • php内置数组
  • 税收协定与国内税法发生冲突
  • 朝圣者将风马旗扔向甘登寺上方的空中为新年祈福,中国西藏 (© Ian Cumming/plainpicture)
  • 发现新大陆的是麦哲伦还是哥伦布
  • 递归最小二乘法辨识参数
  • pwd命令的用法
  • 国企无偿划转股权免印花税
  • 缴纳税款滞纳金怎么算
  • 上个月开的发票这个月作废怎么做帐
  • 独资设立的有限公司
  • 工会经费的会计分录2022
  • 增值税主表和附表
  • 接受银行承兑汇票需要开通吗
  • 微信支付宝等改观了人们的生活方式修改病句
  • 一般纳税人需要报个税吗
  • mysql交互操作过程中使用的语言是什么
  • 技术维护费全额抵扣有时间限制吗
  • 现金流量表的主要项目
  • 工装算劳保用品还是办公费
  • 汇算清缴期间费用福利费填哪里
  • 应收应付核销的会计科目
  • 以考核为由扣除工资
  • 短期借款核算的会计分录
  • 主营业务成本和主营业务收入的关系
  • 在建工程不做了发生的费用如何做账?
  • 如何管理固定资产账户
  • 国有企业公司制改造 发行企业债券
  • centos rpm命令
  • winxp搜索文件内容搜不出来
  • freebsd重置密码
  • win8 分屏
  • win7浏览器在c盘哪里
  • Windows8和Windows Phone8中IE10两者相同点和区别
  • linux使用范围
  • css开发环境
  • python中while用法
  • python executemany的使用及注意事项
  • shell脚本判断命令是否执行成功
  • python记录运行状态的模块
  • jquery获取指定元素
  • android 4.2
  • 办完营业执照多久可以开抖音小店
  • 社保缴纳人数和公积金人数不一样怎么说明
  • 上海税务登记如何网上申请
  • 兼营增值税应税项目和免税项目
  • 为什么10月份社保交不了
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设