Javascript-форум (https://javascript.ru/forum/)
-   Сайт Javascript.ru (https://javascript.ru/forum/site/)
-   -   Запись в переменную ссылку на функцию (https://javascript.ru/forum/site/66230-zapis-v-peremennuyu-ssylku-na-funkciyu.html)

Freekazoid 02.12.2016 11:54

Запись в переменную ссылку на функцию
 
Есть функции рисующие в canvas как можно реализовать переключение между функциями.
думал сделать переменную в которой записывается название нужной функции. И делать по выводу переменной самих функций.
Но это не сработало.
Подскажите как можно реализовать переключение между функциями от рисовки фигур на canvas'е?

Freekazoid 02.12.2016 12:24

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

Freekazoid 02.12.2016 13:09

Есть 6 функций от рисовки объектов.
Нужно сделать посменный вывод онных.
Использую рандом в качестве проверки смены. т.е. при загрузки случайным образом должна выводится определенная фигура из массива activ.
Далее записываю имя функции в переменную activs.a и делаю вызов данной фигуры.
Но если нужно сменить ее делаю повторный запрос к рендому и должен получить новую фигуру.
Загвоздка в том что переменная выводится но от рисовка не идет.
Если напрямую указать на фигуру то все работает, отрисовывается.

Freekazoid 02.12.2016 13:44

это запрос на от рисовку
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();

вроде все.

Freekazoid 02.12.2016 15:22

Разобрался)
приходит строка а не функция, поэтому не работало.
eval(activs.a);

eval();
- Выполняет как код нашу строку из переменной.

Спасибо за помощь.


Часовой пояс GMT +3, время: 16:36.