cocos2d пытается удержать спрайты на экране

Итак, у меня есть эти спрайты, которые движутся слева направо по диагонали вверх. Проблема в том, что они будут бесконечно подниматься вверх и двигаться за пределы экрана. Я хочу, чтобы они двигались внутри определенной границы.

Я пробовал использовать зажим, но это не сработает. Я новичок в 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){//переместиться вверх}

когда у меня были проблемы со спрайтами, которые постоянно двигались вниз. это будет работать только в самый первый раз, когда спрайты появятся под экраном, но после этого это не окажет никакого влияния на спрайты.


person joonor23    schedule 02.02.2016    source источник


Ответы (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
   });
}
person Роман Гуйван    schedule 03.02.2016
comment
Хорошо, это может быть дерьмовый вопрос, но я не знаю, как вызвать миньонов для функции обновления. они находятся в init:fucntion(), и я добавил тег 500, чтобы можно было использовать var minions = this.getChildByTag(500). но он продолжает говорить, что миньоны var в функции обновления равны нулю - person joonor23; 05.02.2016
comment
Ну, вы можете хранить их в глобальной переменной или в дополнительном атрибуте gameLayer, который вы создали сами. - person Роман Гуйван; 05.02.2016
comment
о, я не хотел, чтобы это была глобальная переменная, но это был самый простой способ исправить это, лол. Большое спасибо за Вашу помощь!! - person joonor23; 05.02.2016
comment
нп человек, вы можете выбрать ответ как правильный, чтобы закрыть вопрос - person Роман Гуйван; 06.02.2016