用TypeScript开发了一个网页游戏引擎,开放源代码

最开始学习电脑编程的原动力之一就是想自己编写游戏,一方面很好奇这些游戏是怎么做出来的,另一方面觉得有些地方设计的不合理,希望电脑游戏既能让人玩的有趣,又不浪费时间。

学校五年,毕业十年,学用了十多种编程语言。期间有过几次做游戏的尝试,但由于很难驾驭游戏程序的复杂度,都半途而废了。今年1月份看了一本书之后,重新激发了我做游戏的欲望。

这本书的名字叫《Building JavaScript Games》,书里面讲了如何利用HTML5技术在网页上绘制图片,播放声音,处理键盘和鼠标输入,让图像动起来等,直到建立一个基本的游戏引擎。而且是用了四个实际的游戏例子,循序渐进地给游戏引擎增加功能,很容易看会。

但是正如作者在书中提到的,并不是每一个人都会完全认同书上对代码的组织方式,读者完全可以按照自己的思路组织代码,从而编写出一个新的游戏引擎来。再加上现在有了TypeScript这个工具,可以直观地使用“类定义”语法,并提供编译时的类型检查和代码重构等,有利于编写简洁的代码和提高开发效率。

于是我用TypeScript重新组织和编写了书里的样例代码,并加入自己的一些设计,然后从书里的四个游戏中挑了三个我喜欢的用新写的游戏引擎重新实现一遍,逐渐地验证和完善游戏引擎的功能。

一些核心的类的结构关系如下:

源代码在GitHub上,分享源代码的目的是降低开发游戏的难度,使更多的人能够设计和制作自己想要的游戏。

  • 源代码:https://github.com/J-F-Liu/CanvasGames
  • 玩游戏:http://canvasgames.net/

转载于:https://www.cnblogs.com/rufi/p/CanvasGames.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

靶场练习第二十一天~vulnhub靶场之Momentum-1

一、环境搭建 1.ifconfig查看kali的ip 2.创建靶机 靶机下载地址:Momentum: 1 ~ VulnHub 二、信息收集 1.nmap命令 寻找靶机ip:nmap 192.168.101.0/24 2.端口扫描 使用命令:nmap -A -T4 -p 1-65535 192.168.101.113,发现开放2…

为集合排序的三个方法

// 为集合字符串排序(cmpare:) // - null :空类型 就是字符型的0; // - [NSNull null]是对象类型,能够存入集合的数据:为其分配了内存,但其中的值为空(不能被排序否则程序会崩溃&am…

C#ArrayList对象集合

ArrayList alist new ArrayList();//集合对像 长度可以改变,类型不限//添加单个元素可以Add()alist.Add("在在的");alist.Add(35);alist.Add(3.14);alist.Add(c);alist.Add(5000m);//如果用Add()添加数组或集合最好用 alist.AddRange()alist.AddRange(…

靶场练习第二十二天~vulnhub靶场之Momentum-2

一、准备工作 靶机下载地址:Momentum: 2 ~ VulnHub 1.查看kali的ip 使用命令ifconfig 2.使用nmap命令 nmap 192.168.101.0/24 查看开放的端口和协议:nmap -sV 192.168.101.114 二、信息收集 1.使用gobuster,寻找隐藏的网站 gobuster di…

索引深入浅出(8/10):覆盖索引或列包含

在索引深入浅出:非聚集索引的B树结构在聚集表里,在聚集表里,我们看到非聚集索引的叶子层只包含非聚集索引键和聚集索引键。从聚集表结构或堆表结构里拿到剩下列,SQL Server需要进行书签/键查找操作。很多情况下书签或键查找非常消…

靶场练习第二十三天~vulnhub靶场之GOATSELINUX: 1

一、准备工作 kali和靶机都选择NAT模式(kali与靶机同网段) 1.靶场环境 下载链接:GoatseLinux: 1 ~ VulnHub 2.kali的ip 命令:ifconfig 3.靶机的ip 扫描靶机ip sudo arp-scan -l 二、信息收集 1.nmap的信息收集 (1)扫描靶机…

Spring事务报Connection is read-only

昨天做项目时,写了个方法,程序突然报了Connection is readonly. Queries leading to data modification are not allowed调了程序半天,最后才发现是自己在spring配置文件中增加了事务.把方法写成了大写开头了,但是spring配置是以小写开头 代码…

HTTP协议具体解释

HTTP是一个属于应用层的面向对象的协议。因为其简捷、高速的方式。适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完好和扩展。眼下在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中&#x…

靶场练习第二十四天~vulnhub靶场之Raven-1

一、准备工作 kali和靶机都选择NAT模式(kali与靶机同网段) 1.靶场环境 下载链接:Raven: 1 ~ VulnHub 2.kali的ip 命令:ifconfig 3.靶机的ip 扫描靶机ip sudo arp-scan -l 二、信息收集 1.nmap的信息收集 (1)扫描靶机开放的…

【知识积累】DES算法之C#加密Java解密

一、前言 在项目需要添加安全模块,客户端调用服务端发布的service必须要经过验证,加密算法采用DES,客户端采用C#进行加密,服务端使用Java进行解密。废话不多说,直接上代码。 二、客户端 客户端采用C#进行开发&#xff…

Space.js – HTML 驱动的页面 3D 滚动效果

为了让我们的信息能够有效地沟通,我们需要创建用户和我们的媒体之间的强有力的联系。今天我们就来探讨在网络上呈现故事的新方法,并为此创造了一个开源和免费使用的 JavaScript 库称为 space.js。该库是 HTML 驱动的,这意味着你不需要在网站上…

离职感言-Symbio的5年工作回顾和总结(转载)

离职感言-Symbio的5年工作回顾和总结 (2011-06-02 21:06:30) 转载▼2005年底,当时我在西安过的还不错,结了婚,买了房,在公司也受老板器重,但是初为人父,孩子带给我的那种人生紧迫感:“再不趁还…

64位CentOS6.2安装erlang及rabbitmqServer

CentOS 6.2 64bit 安装erlang及RabbitMQ Server 1、操作系统环境(CentOS 6.2 64bit) 1 [rootHAproxy ~]# cat /etc/issue2 3 CentOS release 6.2 (Final)4 Kernel \r on an \m5 [rootHAproxy ~]# cat /proc/cpuinfo |grep "clflush size"6 clflush size : 647 clf…

Kafka的Producer和Consumer源码学习

先解释下两个概念: high watermark (HW) 它表示已经被commited的最后一个message offset(所谓commited, 应该是ISR中所有replica都已写入),HW以下的消息都已被ISR中各个replica同步,从而保持一致。HW以上的消息可能是脏数据:部分r…

for+next()实现数组的遍历及while list each 的使用

//要求使用for循环语句来完成该数组的遍历//输出每一项的键名和对应值&#xff1a; $a array( a > 34, 5 > 51, 13, 32, bb>15, 2 > 31 ); $len count($a); for($i0;$i<$len;$i)…

读Pyqt4教程,带你入门Pyqt4 _005

对话框窗体或对话框是现代GUI应用不可或缺的一部分。dialog定义为两个或多个人之间的交谈。在计算机程序中dialog是一个窗体&#xff0c;用来和程序“交谈”。对话框用来输入数据、修改数据、改变程序设置等等。对话框是用户和计算机程序沟通的重要手段。 QColorDialog 颜色对话…

Linux内核的启动过程分析

秦鼎涛 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000  一、实验目的及要求&#xff1a; 使用gdb跟踪调试内核从start_kernel到init进程启动 详细分析从start_kernel到init进程启动的过程并结合实验截图撰写一篇署名博客&#xff0c;并在博客文…

static修饰符详解

static表示“全局”或者“静态”的意思&#xff0c;用来修饰成员变量和成员方法&#xff0c;也可以形成静态static代码块&#xff0c;但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说&#xff0c;它不依赖类特定的实例&…

四则运算2+psp0

程序要求&#xff1a; 1.题目避免重复 2.可定制&#xff08;数量\打印方式&#xff09; 3.可以一下控制参数 ① 是否有乘除法 ② 是否有括号&#xff08;最多支持十个数参与运算&#xff09; ③ 数值范围 ④加减有无负数 ⑤除法有无余数 分析&#xff1a;① 如果是两个数…

kettle作业中的js如何写日志文件

在kettle作业中JavaScript脚本有时候也扮演非常重要的角色&#xff0c;此时我们希望有一些日志记录。下面是job中JavaScript记录日志的方式。 job的js写日志的方法。 得到日志输出实例 org.pentaho.di.core.logging.LogWriter.getInstance();按照日志的级别输出&#xff1a; pu…