cocos2d 试图让精灵保持在屏幕内

cocos2d trying to keep sprites within the screen

所以我有这些精灵从左到右沿对角线向上移动。问题是它们会无限向上,并移出屏幕。我想让他们在某个边界内移动。

我试过使用 clamp 但它不起作用。我对 cocos2d-js 还很陌生,所以我没有太多想法。如果有人可以提供帮助,我将不胜感激。

for(var i=0;i<minions.length;i++){

        var x = Math.floor((Math.random() * size.width));
        var y = Math.floor((Math.random() * size.height / 10) + size.height / 50);

        var ms = Math.floor((Math.random() + 1));
        var mas = (size.width - x) / size.width * ms
        var m2s = x / size.width * ms;


        var move = cc.MoveBy.create(mas, cc.p(size.width - x, y));
        var moveaway = cc.MoveBy.create(ms, cc.p(-size.width, -y));
        var move2 = cc.MoveBy.create(m2s, cc.p(x, y));

        var minSeq = cc.Sequence.create(move, moveaway, move2);

        minions[i].runAction(minSeq).repeatForever();

        minions[i].setPosition(cc.p(cc.clampf(minions[i].x,0,size.width),cc.clampf(minions[i].y,0,400)));
        this.addChild(minions[i]);
    }

在此之前我厌倦了一个 if 循环,比如

if(minions[i].position == 0){//向上移动}

当我遇到精灵连续下降的问题时。 它只会在精灵第一次出现在屏幕下方时起作用,但之后,它不会对精灵产生任何影响

我们先用屏幕坐标定义边界

var xMin = 0, yMin = 0, xMax = 320, yMax = 240;

我们还假设有一个全局变量保存您的小兵数组。

var minions = [];

我很确定你已经安排了更新,使用 scheduleUpdate() 所以现在您可以在 update 函数

中执行此检查
update: function(dt){
   //your code
   minions.forEach(function(minion){
      var p = minion.getPosition();
      if (p.x > pMax) {
         //change minion speed to go down
      } 
      if (p.x < pMin){
        //change minion speed to go up
      }
      // same for y-axis
   });
}