Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.01.2015, 18:16
Интересующийся
Отправить личное сообщение для rolleyes Посмотреть профиль Найти все сообщения от rolleyes
 
Регистрация: 06.01.2015
Сообщений: 17

Изинг наоборот
Всем привет. Столкнулся с проблемой... Решил добавить в свое приложение изинг, один-два вида, чтобы не подгружать большие библиотеки, плагины и прочее. Выдернул ф-цию, использую все ок. Если двигаю квадратик от 50 до 310 все прекрасно... Но как сделать наоборот? если мне нужно подвинуть квадратик из 310 в 50))) Наша ф-ция уже не арбайнет... Помогите пожалуйста разобраться.

В моем случае это функция

easeInOutQuart = function (t, b, c, d) {
		t /= d/2;
		if (t < 1) return c/2*t*t*t*t + b;
		t -= 2;
		return -c/2 * (t*t*t*t - 2) + b;
	}


А весь замес происходит тут:

if(myEasingStatus){
40
        if (t<=d) {
41
 
42
            context.fillStyle = "#000000";
43
            context.fillRect(easeInOutQuart(t, 50, 310, d), 50, 50, 50);
44
            myRectX = easeInOutQuart(t, 50, 310, d);
45
 
46
            }else{
47
            context.fillRect(myRectX, 50, 50, 50);
48
            myEasingStatus = false;
49
            }
50
        t++;
51
 
52
        }else{
53
            context.fillRect(myRectX, 50, 50, 50);
54
            myEasingStatus = false;
55
        }
56
    i++;
57
 
58
        }


<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Easing</title>
<script src="modernizr.custom.65354.js"></script>
<script type="text/javascript">
window.addEventListener("load", eventWindowLoaded, false);

function eventWindowLoaded () {
    canvasApp();
}

function canvasSupport () {
      return Modernizr.canvas;
}

function canvasApp () {

          if (!canvasSupport()) {
             return;
          }

        var theCanvas = document.getElementById("canvasOne");
        var context = theCanvas.getContext("2d");

        function drawScreen() {



	context.clearRect(0,0,640,480);


	if(i == 10){
		myEasingStatus = true;
	}

	if(myEasingStatus){
		if (t<=d) {

			context.fillStyle = "#000000";
			context.fillRect(easeInOutQuart(t, 50, 310, d), 50, 50, 50);
			myRectX = easeInOutQuart(t, 50, 310, d);

			}else{
			context.fillRect(myRectX, 50, 50, 50);
			myEasingStatus = false;
			}
		t++;

		}else{
			context.fillRect(myRectX, 50, 50, 50);
			myEasingStatus = false;
		}
	i++;

        }

	var w=theCanvas.width;
	var h=theCanvas.height;

	var i = 0;
	var d = 50;
	var t = 0;

	var myEasingStatus = false;
	var myRectX = 50;

        function gameLoop() {
            window.setTimeout(gameLoop, 20);
            drawScreen()
        }
	easeInOutQuart = function (t, b, c, d) {
		t /= d/2;
		if (t < 1) return c/2*t*t*t*t + b;
		t -= 2;
		return -c/2 * (t*t*t*t - 2) + b;
	}

        gameLoop();

}


</script>
</head>
<body>
<div style="position: absolute; top: 50px; left: 50px;">
<canvas id="canvasOne" width="640" height="480">
 Your browser does not support HTML 5 Canvas.
</canvas>
</div>
</body>
</html>

Последний раз редактировалось rolleyes, 11.01.2015 в 18:19.
Ответить с цитированием
  #2 (permalink)  
Старый 11.01.2015, 18:26
Интересующийся
Отправить личное сообщение для rolleyes Посмотреть профиль Найти все сообщения от rolleyes
 
Регистрация: 06.01.2015
Сообщений: 17

т.е. если на увеличение то все ок, а вот если наоборот... наверно в ту же вцию можно забить другие значения, но из какого принципа?
Ответить с цитированием
  #3 (permalink)  
Старый 11.01.2015, 18:55
Интересующийся
Отправить личное сообщение для rolleyes Посмотреть профиль Найти все сообщения от rolleyes
 
Регистрация: 06.01.2015
Сообщений: 17

Разобрался))

Если ввести значения вместо 50 и 310 — 310 и -260, все ок.

А как выразить эту зависимость?

x=50, y=310
x=310, y=-260
Ответить с цитированием
  #4 (permalink)  
Старый 11.01.2015, 22:07
Интересующийся
Отправить личное сообщение для rolleyes Посмотреть профиль Найти все сообщения от rolleyes
 
Регистрация: 06.01.2015
Сообщений: 17

Блин, забавно, я сам с собой общаюсь)) пора кукушку проверить)) Суть всего этого замеса проста: брать изинги по одному или несколько, вместо аттача целой либы.

например нужен изАут. Берем из фреймворка:

easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},


где у нас х - вообще не участвует)) его можно убрать вообще.
t - начальная итерация, ноль обычно
b - начальный параметр, например альфа 0, х или у значение
c - конечный параметр, к которму стремится b
d - конечная итерация

но вот беда... если у нас b > с, то кина не будет...
тут у меня возникла идея, а что если просто написать из нескольких логических операторов проверку значений. написал. получилось

function easeOutQuad(t, b, c, d) {
		var b2 = b;
		var c2 = c;
		if(b > c){
			b = c2;
			c = c2-b2;
		}
		return -c *(t/=d)*(t-2) + b;
	}


но если мне нужно, например, переместить объект из точки х = 200 в точку х = -5, то возникают осложнения...

Вообще складывается ощущение, что я изобретаю велосипед... Как вот это все работает в jqwery том же? допустим я делаю баннер на канвасе, и у меня каждый байт на счету, неужели без аттача фреймворка не обойтись? помогите плиз дописать, а то я тут кажется уже ку-ку)))
Ответить с цитированием
  #5 (permalink)  
Старый 11.01.2015, 23:16
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

http://learn.javascript.ru/js-animation
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #6 (permalink)  
Старый 12.01.2015, 12:45
Интересующийся
Отправить личное сообщение для rolleyes Посмотреть профиль Найти все сообщения от rolleyes
 
Регистрация: 06.01.2015
Сообщений: 17

cyber,
Спасибо за статью.. я 5 раз прочитал её, но пришел к выводу, что это выше моих способностей к осознанию))

Jquery функции понятны и просты... Вводишь 4 значения, получаешь на выходе эту дельту... Тут как все это работает я не могу понять совершенно. Если вас не затруднит, напишите пожалуйста несколько строк, как в моем примере реализуется этот подход. Заранее благодарен.

Почему тут все работает, вне зависимости от того, какие вводишь значения... https://github.com/danro/jquery-easi...uery.easing.js

Последний раз редактировалось rolleyes, 12.01.2015 в 14:09.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
object_id.onclick = null, а как сделать нажатие наоборот активным? free_style Общие вопросы Javascript 5 21.07.2014 17:15
Из процентов в пиксели и наоборот. Valdemor Events/DOM/Window 1 13.08.2013 11:11
КАк отправлять данные компьютера на сервер и наоборот, но без браузера (!!!) ? name123123 Общие вопросы Javascript 1 01.04.2013 20:50
window opener наоборот Vampir3 Общие вопросы Javascript 2 17.03.2013 17:05
Практика: перевод десятичных чисел в двоичные и наоборот Magneto Учебные материалы 10 24.07.2012 20:44