cocos2d试图将精灵保留在屏幕内

时间:2016-02-02 14:11:44

标签: cocos2d-x sprite cocos2d-js

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

我尝试使用过夹子,但它不起作用。我对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){//向上移动}

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

1 个答案:

答案 0 :(得分:1)

让我们先在屏幕坐标中定义边界

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
   });
}