Запись в переменную ссылку на функцию
Есть функции рисующие в canvas как можно реализовать переключение между функциями.
думал сделать переменную в которой записывается название нужной функции. И делать по выводу переменной самих функций. Но это не сработало. Подскажите как можно реализовать переключение между функциями от рисовки фигур на canvas'е? |
var activs = { a: '', play: function() { var activ = ['player.troin()', 'player.pram()', 'player.kvadr()', 'player.ugolL()', 'player.ugolR()', 'player.ugol()']; if (activs.a == ''){ function getRandomInt(min, max){return Math.floor(Math.random() * (max - min + 1)) + min; }; s = getRandomInt (0, 5); activs.a = activ[s]; console.log('рабора рендома '+ activs.a); return activs.a; }; } }; |
Есть 6 функций от рисовки объектов.
Нужно сделать посменный вывод онных. Использую рандом в качестве проверки смены. т.е. при загрузки случайным образом должна выводится определенная фигура из массива activ. Далее записываю имя функции в переменную activs.a и делаю вызов данной фигуры. Но если нужно сменить ее делаю повторный запрос к рендому и должен получить новую фигуру. Загвоздка в том что переменная выводится но от рисовка не идет. Если напрямую указать на фигуру то все работает, отрисовывается. |
это запрос на от рисовку
if (!activs.a) {activs.play();/* console.log('есть 1'); */} else {activs.a; /* console.log('есть 2 '+activs.a); */ } ; массив с именами функций var activ = ['player.troin()', 'player.pram()', 'player.kvadr()', 'player.ugolL()', 'player.ugolR()', 'player.ugol()']; выбор что рисовать var activs = { a: '', play: function() { var activ = ['player.troin()', 'player.pram()', 'player.kvadr()', 'player.ugolL()', 'player.ugolR()', 'player.ugol()']; if (!activs.a){ function getRandomInt(min, max){return Math.floor(Math.random() * (max - min + 1)) + min; }; s = getRandomInt (0, 5); activs.a = activ[s]; console.log('работа рендома '+ activs.a); return activs.a; }; }, }; сама от рисовка 1го объект var player = { size: 20, /* размер блока */ step: 20, /* шаг спуска */ x: 180, /* положение появления с верху */ y: 0, /* положение появления с низу */ /*/ Отрисовка /*/ ugolR: function() { /* Уголник правый */ ctx.linew = 2; // ширина линии /* Цвет обьекта */ ctx.fillStyle = "rgb(255, 255, 255)"; // цвет заливки ctx.strokeStyle = "rgb(255, 255, 255)"; // цвет линии /* контур */ ctx.strokeRect(this.x,this.y-40,this.size,this.size); ctx.strokeRect(this.x,this.y-20,this.size,this.size); ctx.strokeRect(this.x-20,this.y-20,this.size,this.size); ctx.strokeRect(this.x-20,this.y,this.size,this.size); /* заливка */ ctx.fillRect(this.x+2.5,this.y+2.5-40,this.size-5,this.size-5); ctx.fillRect(this.x+2.5,this.y+2.5-20,this.size-5,this.size-5); ctx.fillRect(this.x+2.5-20,this.y+2.5-20,this.size-5,this.size-5); ctx.fillRect(this.x+2.5-20,this.y+2.5,this.size-5,this.size-5); }, } ну и вызов отрисовки напрямую player.ugolR(); вроде все. |
Разобрался)
приходит строка а не функция, поэтому не работало. eval(activs.a); eval();- Выполняет как код нашу строку из переменной. Спасибо за помощь. |
Часовой пояс GMT +3, время: 16:36. |