javascript - Angular JS 游戏 - 使用方法创建和销毁子 Controller

标签 javascript html angularjs

我正在创建一个基于 AngularJS 和 HTML5 的游戏,该游戏由用户寻找和点击鸟类组成。我想让鸟出现在屏幕上的随机位置。如果你点击一只鸟——或者如果你等待超过 5 秒——那只鸟会自动消失。

我是 Angular 的新手,但我想我会通过...来解决这个问题

  1. 创建一个负责管理游戏的 Controller session (时间限制、难度等)

  2. 使用那个 Controller 定期创建 Bird 对象(子 Controller ?) 间隔。

  3. 将逻辑放入每个 Bird 对象中 他们会在 5 秒后或如果 他们被点击了。

这是为我的问题的第 1 部分创建的主 Controller :

 myGameModule.controller( 'BirdActivityCtrl', function BirdActivityCtrl($scope) {

    $scope.difficulty = 'Easy';
    $scope.reward = 250; 

    $scope.spawn_interval = 1000;
    $scope.status = 'starting';

    $scope.birds_required = 30; 
    $scope.birds_clicked = 0; 
    $scope.time_left = 60; 

    $scope.start = function(){
     location = '#/birds_in_progress';
     $scope.status = 'in_progress';
   }
         $scope.cancel = function(){
    location = '#/cafeteria';
  }
});

具体来说,我正在就我的问题(如上所述)的第 2 部分和第 3 部分寻求帮助。我知道 Angular 有严格的约定来将 DOM 元素与 Controller 分开。生成鸟类对象(将绑定(bind)到页面上的 DIV)并在 5 秒后销毁它们的正确方法是什么?感谢您阅读。任何帮助将不胜感激!

最佳答案

你的 DOM 相关工作应该在 directives 中.任何指令都可以有自己的 Controller ,它将是您的 BirdController。对于任何新的鸟实例(div with directive),将创建新的 Controller 和作用域。

我建议你把所有的鸟都放在一个 service 的数据结构中。使用 DI 从应用程序的任何部分访问。然后你可以简单地使用 ng-repeat为了你的鸟!

像这样的伪代码应该可以工作:

game.factory('BirdStorage', ['in', 'ject', 'ables', function(){
    var birds = [];

    return {
        addBird : function(){
            birds.push({...})
        },
        deleteBird : function(id){
            ...
        },
        ...
    }
}]);

game.directive('bird', ['in', 'ject', 'ables', function(){
    return {
        restrict: 'EA',
        template: '<div>...</div>',
        replace: true,
        scope: {
            ...
        }
        controller: function($scope, $element, $attrs){
            ...
        }
        link: function(){
            ...
        }
    }
}]);

然后你可以在 HTML 中像元素一样使用它:

<ul>
    <li data-ng-repeat="bird in birds">
        <bird attrs=...>
    </li>
</ul>

birds 将来自您之前定义的服务。

移除 bird 的逻辑将进入 BirdStorage。只需创建一个将删除指定鸟的超时:

setTimeout(function(){
    this.deleteBird(id);
}, 5000)

关于javascript - Angular JS 游戏 - 使用方法创建和销毁子 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18817778/

相关文章:

javascript - 为什么网站管理员使用 `ul/li` 而不是 `div` 进行布局?

html - 如何使用 CSS 将文本垂直对齐到彩色 div 中?

javascript - 如何循环遍历数组并查找与数组中的值匹配的内容

javascript - 绘制点,以便它们在具有相同坐标时不会重叠

javascript - 如何使用 Protractor 将 key 发送到 ui-ace 实例?

html - 如何居中对齐菜单项? Bootstrap

javascript - 将下拉菜单变成jquery slider

javascript - Angular JS 入门 - 结构和其他问题

javascript - 不确定为什么 ng-repeat-start 和 ng-repeat-end 抛出异常

javascript - 将 AngularJS 1.4.7 注入(inject) IE crossrider 扩展