Добавление нескольких действий на кнопку генерируется динамически - PullRequest
0 голосов
/ 08 ноября 2018

Я генерировал кнопки динамически. Я хотел бы добавить к этой кнопке действия click и onInputOver, но работает только кнопка click(chooseHero):

РЕДАКТИРОВАТЬ FULL_CODE

var heroesState = {
  create: function() {
    //game.add.image(0, 0, 'board');
    backBtn = game.add.button(5, 5, 'back_btn', this.GoBack);
    choiceText = game.add.bitmapText(150, 50, 'desyrel', 'Welcome warrior, Choose your Hero', 35);

    //var heroCardStyle = { fill: "#00ff00" };

    var initWidth = 60;
    var initHeight = 150;

    var heroesFiles = ["obatala.jpg", "obba.jpg", "olokun.jpg", "orunmila.jpg", "oshun.jpg",
      "oxosi.jpg", "oya.jpg", "ozain.jpg", "shango.jpg", "yemoja.jpg"
    ];
    var heroesLength = heroesFiles.length;
    var heroCard = [];
    //4 buttons generated dynamically with a loop
    for (var i = 0; i < heroesLength / 2; i++) {
      //longueur de chaque élément dans heroes
      var ln = heroesFiles[i].length;
      heroCard = game.add.button(initWidth, initHeight, heroesFiles[i].substring(0, ln - 4), this.ChooseHero, this.over);
      heroCard.scale.setTo(0.5, 0.5);
      heroCard.alpha = 0.4;
      initWidth = initWidth + 150;
    };

    var initWidth = 60;
    var initHeight = 350;
    //4 buttons generated dynamically with a loop
    for (var i = heroesLength / 2; i < heroesLength; i++) {
      //longueur de chaque élément dans heroes
      var ln = heroesFiles[i].length;
      heroCard = game.add.button(initWidth, initHeight, heroesFiles[i].substring(0, ln - 4), this.ChooseHero, this.over);
      heroCard.scale.setTo(0.5, 0.5);
      heroCard.alpha = 0.4;
      initWidth = initWidth + 150;

    };
    //heroCard.onInputOver.add(over, this); 

  },
  //functions associated to button events(chooseChero works fine but over doesn't work)
  GoBack: function() {
    game.state.start("menu");
  },

  over: function() {
    heroCard.tint = 0xffffff;
  },

  ChooseHero: function() {
    //game.state.start("menu");
    chosenHero = this.key;
    alert(this.key);
    game.state.start("play", true, false, chosenHero);
  }
};

Я получаю эту ошибку: Невозможно прочитать свойство 'onInputOver' из неопределенного .

1 Ответ

0 голосов
/ 09 ноября 2018

Из дополнительного кода я вижу следующие проблемы:

  1. game.add.button() имеет другую подпись. Из официальных документов видно, что это:

новая кнопка (игра [, x] [, y] [, ключ] [, обратный вызов] [, callbackContext] [, overFrame] [, outFrame] [, downFrame] [, upFrame])

overFrame, outFrame, downFrame и upFrame все ищут кадр для использования на используемом графике, а не для вызова функции.

  1. var heroCard = []; используется для инициализации переменной, но затем вы устанавливаете это для фактической кнопки. Я мог бы порекомендовать изменить это значение на heroCards, а затем создать новый heroCard в цикле for, определив его свойства перед добавлением в массив heroCards.

  2. heroCard.onInputOver.add(over, this); должно быть в пределах цикла for. Если вы console.log(arguments);, вы можете видеть, что вы получаете два аргумента назад, что позволяет использовать первый аргумент, чтобы просто изменить кнопку, над которой они наводят курсор:

    over: function(heroCard) {
        heroCard.tint = 0xffffff;
        // This is a quick and dirty way to see what arguments are being passed
        // to a function in JavaScript.
        // console.log(arguments);
    }
    
...