销毁范围/隔离范围? Angularjs

时间:2015-09-30 19:09:37

标签: javascript angularjs angularjs-scope game-engine

这段代码有点疯狂,但我更关心的是概念,而不是明确的代码响应。我正在为游戏制作战斗系统。我有一个"攻击" npc字符。环。一旦玩家将npc坏人的生命值降低到零,我想从地图/ DOM /范围等中移除该实体......某些代码(有问题的代码将朝向末尾) -

从database..an数组加载npc字符数据,所有相同的属性,但不同的值。 $ scope.encounters在HTML中重复ng并在屏幕上构建字符。然后将该数据发送到$ scope.encounter_a()函数以执行更多操作。

db.getNpcCombat(npc_combat_set).success(function(data){
  $scope.encounters = [];
  $scope.encounters = data;
  angular.forEach(data, function(value, key){
    console.log(value);
    $scope.encounter_a(value);
  }); 

这为不同的npcs设置不同速率的进度条的计时器,一旦时间命中100,取消计时器然后运行攻击功能...这是循环的,所以它运行的每个npc的时间不同根据他们的数据。所以value是来自一个npc实体的数据。

$scope.encounter_a = function(value){
    value.attack_count = 0;
    $timeout(function(){
        var set_timer = $interval(function() {
        value.attack_count += 1;
        if(value.attack_count >= 100){
        $interval.cancel(set_timer);
        $scope.attack(value);
      }
   }, value.attack_rate);
 }, 500); 
}

这部分看起来有点疯狂,但是做了它的工作。这仍然是接收一个npc实体的数据。每个敌人都有不同的攻击,所以基本上,这是从某个NPC攻击数据库中的数据,然后随机化使用哪个攻击,然后计算攻击是否会击中玩家角色。无论攻击是命中还是未命中,它都会循环回到encounter_a()。

$scope.attack = function(data){
   $timeout(function(){
       db.getNpcFeats(data.feats).success(function(feat_data){
  //randomize which feat is used ...get amount of feats 
       var count = feat_data.length;
  //randomize number
       count = getRandomInt(1, count);
       count = count - 1;
  //get feat_hit success - gets random number between 1-10
      feat_success = getRandomInt(1, 10);
      $('#enemy_'+data.id+' ul li .attack_text h5').html(feat_data[count].feat_name + '!');
      $('.attack_text').removeClass('fadeOut').addClass('fadeIn');
      $timeout(function(){
         $('.attack_text').removeClass('fadeIn').addClass('fadeOut');
      }, 1000);
      if(feat_data[count].feat_chance >= feat_success){
         $scope.damage_amount= getRandomInt(parseInt(feat_data[count].feat_min_damage), parseInt(feat_data[count].feat_max_damage));
         $scope.$watch('damage_amount', function() {
             $('.feat_name').html(feat_data[count].feat_name);
             $('.feat_damage').html('Damage - ' +$scope.damage_amount);
             $('.feat_hit .text-danger').html("You've been hit!!");
             $('.outer-container').addClass('tada');
            $('.feat_hit').removeClass('fadeOutDown').addClass('fadeInUp');
            $scope.player_hp = $scope.player_hp - $scope.damage_amount;
            if($scope.player_hp >= 0){
           //future player death function
            }
            $timeout(function(){
             $('.feat_hit').removeClass('fadeInUp').addClass('fadeOutDown');
      }, 2000);

       });
      }

    });
     $scope.encounter_a(data);
    }, data.attack_delay);
   }

最后,这是给我带来麻烦的代码。此代码基本上与上述代码断开连接。这是攻击NPC的玩家的攻击代码。哪个有效,除了NPC的生命值达到零,不知道该怎么办。

$scope.playerFeatAttack = function(player_feat){
   //if player has not selected npc to attack, show message and prevent attack then remove message else allow attack 
   if (!$('.enemy_container').hasClass('attack_selected')){
       $('.helper_dialog_area').removeClass('lightSpeedOut');
       $('.helper_dialog_area').removeClass('hide');
       $('.helper_dialog_area h4').html('CLICK AN ENEMY TO ATTACK!!!');
       $('.helper_dialog_area').addClass('lightSpeedIn');
       $timeout(function() {
          $('.helper_dialog_area').removeClass('lightSpeedIn');
          $('.helper_dialog_area').addClass('lightSpeedOut');
  }, 2500);
}else{
  //calculate hit damage
  var hit_damage = getRandomInt(parseInt(player_feat.feat_min_damage), parseInt(player_feat.feat_max_damage));
  //calculate attack success
  var attack_success_roll = getRandomInt(1, 10);
  //if attack passes, run attack
  if(player_feat.feat_chance >= attack_success_roll){
    //determine which NPC to attack based on the .attack_selected class
     //not sure if this is a good way but this is how getting the specific NPC hitpoints 
     var elem = angular.element($(".attack_selected .npc_hp")).scope();
      $scope.npc_hp = $('.attack_selected .npc_hp').html();
    //watch for changes in the hitpoints
      $scope.$watch('npc_hp', function(){
   //change the hitpoints on the screen using jquery..probably not ideal way
        var npc_hp = parseInt($scope.npc_hp) - parseInt(hit_damage);
        $('.attack_selected .npc_hp').html(npc_hp);
        var hp_after_attack = $('.attack_selected .npc_hp').html();

这个主要代码有问题 -

         if(hp_after_attack <= 0){
          $('.attack_selected').addClass('flipOutX');
          var what = angular.element($('.attack_selected')).scope();
        }
    }); 
  }
}

}

最后一部分是有问题的代码。如果NPC的生命值低于0,首先计划添加一个CSS类来做动画,然后想要从游戏中删除该角色。如果我控制台记录这个 -

 var what = angular.element($('.attack_selected')).scope();

我要删除的元素是哪个,我可以看到主要范围中的遇到对象是NPC实体数据。我试图将其更改为NULL,认为它会消除实体的数据,因此无法执行任何操作。还尝试从DOM中删除元素,当然,它会将其从屏幕中删除,但随后它会继续运行攻击。 在范围的$ parent中,我可以看到$ scope.attack()函数..我将其更改为NULL,但随后阻止所有NPC受到攻击。

我需要做的是杀死特定NPC的attack()函数...但是当我控制$ scope时,它看起来像范围内只有1个攻击函数,而不是每个& #34;遭遇&#34;实体/ NPC。

我是否有某种方法可以将attack()函数编码为攻击每个元素的主要范围?也许是一个孤立的范围(我不明白它是什么)?

这是我学习的AngularJS项目......所以任何关于更好地完成上述任务的建议,以及在被杀之后消灭NPC的任何建议都会非常棒。如果您需要我的更多信息,请告诉我。

0 个答案:

没有答案