【问题标题】:Adding and removing bitmap images with mouse "click" - JavaScript / CreateJS用鼠标“单击”添加和删除位图图像 - JavaScript / CreateJS
【发布时间】:2014-01-06 15:16:49
【问题描述】:

当我单击某些容器(总共 10 个容器)时,我正在向它们添加硬币(位图)。现在我想一个接一个地取出硬币。例如,如果我在舞台上的形状上单击 3 次,而不是创建 3 个硬币并将它们放入容器中。现在,如果我在移除按钮上单击一次(也在舞台上),它应该会移除添加到容器中的最后一个硬币,依此类推。

这是我尝试的方法: -->“evt.target”是一个容器

this.coin= new createjs.Bitmap(images.jeton_image);
this.coin.value = this.coin_index;
this.coin_array.push(this.coin);
this.coin_index++;
this.coin.regX = 50;
this.coin.regY = 50;
evt.target.addChild(this.jetons);
this.target_arr.push(evt.target);

下面是我取出硬币的方法:

this.target_arr[this.target_arr.length].removeChild(this.coin);

我的问题是我无法从 10 个容器中取出硬币。 我做错了什么?

【问题讨论】:

  • “我无法从 10 个容器中取出硬币。”我没明白这意味着什么?
  • 我在舞台上有 10 个形状,每个形状都有一个容器。因此,如果我单击第一个形状,硬币将添加到第一个容器中,依此类推。我希望你现在明白我的问题是什么意思。
  • 我想问题是你不能按顺序取出硬币,对吧?
  • 是的,这是我的问题,因为我可以点击第一个形状,而不是点击第三个或最后一个。
  • 好清楚了,从你的代码中看不到 this.target_arr 指的是什么?

标签: javascript html bitmap containers easeljs


【解决方案1】:

我在这里看到的是问题出在您尝试操作的数组索引的位置:

第一阶段

如果您使用 push 将此数据添加到您的数组中,数据将添加到索引的末尾

假设:

var a=[]; //a.length would be 0 and you can't position any index inside

现在当你向它推送一些数据时:

 a.push(1);//a.length=1
    [ 1 ]
      ^
index:0    
    a.push(2);//a.length=2
    [ 1 , 2 ]
      ^   ^
index:0   1 
    a.push(3);//a.length=3
    [ 1, 2, 3 ]
      ^  ^  ^
index:0  1  2 //when trying to make that a[a.length]  
              //would give error as the maximum position 
              //reside in the index 2 not 3

所以这个:

this.target_arr[this.target_arr.length].removeChild(this.coin);

应该是这样的:

this.target_arr[this.target_arr.length-1].removeChild(this.coin);

第二阶段

你缺少的是:

this.coin_array.pop(this.coin);
this.target_arr.pop(evt.target);

在移除子节点时移除最新元素以收缩数组 因为在内存中你的 Array 仍然由 10 个元素组成,所以你应该通过在删除图像的同时弹出最新元素来缩小它

【讨论】:

  • 非常感谢您挽救了我的一天 :) 我为此苦苦挣扎了一段时间。现在它完美运行了!
  • 如果这对你有帮助,请投票,我想你现在有资格投票了 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
相关资源
最近更新 更多