Запись в переменную ссылку на функцию
Есть функции рисующие в 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, время: 04:22. |