我频繁地被问及到的一个问题之一,就是什么时候使用Angular框架是一个糟糕的选择。我的默认答复是编写游戏的时候,尽管Angular有它自己的 事件循环处理 ($digest循环) ,并且游戏通常需要很多底层DOM操作.如果说有Angular能支持很多类型的游戏,那这个说法可不准确。即使游戏需要大量的DOM操作,这可能会用到 angular框架处理静态部分,如记录最高分和游戏菜单。 如果你和我一样迷上流行的2048 游戏. 游戏的目标是用相同的值相加拼出值为2048的方块。 在今天这篇博文中,我们会用AngularJS从头到尾地创建一个副本, 并解释创建app的全过程。由于这个app相对复杂,所以我也打算用这篇文章来描述如何创建复杂的AngularJS应用。 这是我们要创建的 demo . 现在开始吧!
第一步:规划app第一步我们要做的,就是给要创建的app做高层设计。无论是山寨别人的app,还是自己从零做起,这一步都与app的规模无关。 再来看看这个游戏,我们发现在游戏板的顶端有一堆瓦片。每个瓦片自身都可以作为一个位置,用来放置其他有编号的瓦片。我们可以根据这个事实,把任务移动瓦片的任务交给CSS3来处理,而不是依靠JavaScript,它需要知道移动瓦片的位置。当游戏面板上有一个瓦片,我们只需要简单地确保它放在顶部合适的位置即可。 使用CSS3来布局,能带给我们CSS动画效果,同时也默认使用AngularJS行为来跟踪游戏板的状态,瓦片和游戏逻辑。 因为我们只有一个单页面(single page),我们还需要一个单控制器(single controller)来管理页面。
因为应用的生命周期内只有一个游戏板,我们在GridService服务中的一个单一实例里包含所有的网格逻辑。由于服务是单例模式对象,所以这是一个存储网格的恰当位置。我们使用GridService来处理瓦片替换,移动,管理网格。 而把游戏的逻辑和处理放到一个叫做GameManager的服务中。它将负责游戏的状态,处理移动,维护分数(当前分数和最高分) 最后,我们需要一个允许我们管理键盘的组件。我们需要一个叫做KeyboardService的服务。在这篇博文中,实现了应用对桌面的处理,我们也可以复用这个服务来管理触摸操作让它在移动设备上运转。 创建app为了创建app,我们先创建一个基本的 app (使用 yeoman angular 生成器生成app的结构, 这一步不是必须的. 我们只把它作为切入点,之后就迅速地从它的结构上分开。).创建一个app目录用来放置整个应用。把test/目录作为app/目录的同级目录.
因为在应用中我们用了yeomanin工具, 我们首先要确保它已经安装好了. Yeoman安装时基于NodeJS和npm.安装NodeJS不是这篇教程所要讲的,但你可以参看NodeJS.org 站点. 装完npm后,我们就可以安装yeoman工具yo和angular生成器(它由yo调用来创建Angular app):
安装后,我们可以使用yeoman工具生成我们的应用,如下:
该工具会询问一些请求。我们都选yes即可,除了要选择angular-cookies作为依赖外,我们不需要任何其他的依赖了。
我们的angular 模块我们将创建scripts/app.js文件来放置我们的应用。现在就开始创建应用吧:
|