Javascript.RU

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

Вопрос по анимации canvas
Должно получиться что-то типа шкалы с делениями.
Деления двигаются справа налево, как только крайнее деление доходит до края холста, то оно должно исчезнуть и появиться справа. Но исчезают все деления, и появляются справа. Подскажите что можно сделать.[JS][JS]
<!doctype html>
<html>
<head>
 <meta charset="utf-8" />
 <title>...</title>

</head>
<body>
 
 <script type="text/javascript">
 
   var canvas = document.createElement('canvas');
   canvas.id = 'canvas';
   canvas.style.border = 'double black 4px';
   document.body.appendChild(canvas)
	 
   var cnvWidth = canvas.width = window.innerWidth-30;
   var cnvHeight = canvas.height = window.innerHeight-30;
	 
   var ctx = canvas.getContext('2d');
   
   function Shkale(c, x) {
     
	 var self = this;
	 this.x = x;
	 
	 Shkale.prototype.gorLine = function() {
	   
	   c.beginPath();
	   c.strokeStyle = '#396';
	   c.moveTo(0, cnvHeight/2);
	   c.lineTo(cnvWidth, cnvHeight/2);
	   c.stroke();
	   
	 };
	 
	 Shkale.prototype.verLine = function() {
	   for (var i = 0; i < cnvWidth; i += 45) {
	     c.beginPath();
	     c.strokeStyle = '#00f';
	     c.moveTo(this.x + i, cnvHeight/2 - 50);
	     c.lineTo(this.x + i, cnvHeight/2 + 50);
	     c.stroke();
	   }
	 };
	 
   };

   var shkale = new Shkale(ctx, 50);
   
   function move() {
     ctx.clearRect(0, 0, cnvWidth, cnvHeight);
     shkale.gorLine();
     shkale.verLine();
	 shkale.x -= 2
	 if (shkale.x < 0) {
	   shkale.x = cnvWidth
	 };
	 requestAnimationFrame(move);
	 console.log(shkale.x);
   };
   
   move();
   
 </script>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 30.06.2018, 20:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Sevic,
строки 38 и 58
<!doctype html>
<html>
<head>
 <meta charset="utf-8" />
 <title>...</title>

</head>
<body>

 <script type="text/javascript">

   var canvas = document.createElement('canvas');
   canvas.id = 'canvas';
   canvas.style.border = 'double black 4px';
   document.body.appendChild(canvas)

   var cnvWidth = canvas.width = window.innerWidth-30;
   var cnvHeight = canvas.height = window.innerHeight-30;

   var ctx = canvas.getContext('2d');

   function Shkale(c, x) {

     var self = this;
     this.x = x;

     Shkale.prototype.gorLine = function() {

       c.beginPath();
       c.strokeStyle = '#396';
       c.moveTo(0, cnvHeight/2);
       c.lineTo(cnvWidth, cnvHeight/2);
       c.stroke();

     };

     Shkale.prototype.verLine = function() {
       for (var i = 0; i < cnvWidth +45; i += 45) {
         c.beginPath();
         c.strokeStyle = '#00f';
         c.moveTo(this.x + i, cnvHeight/2 - 50);
         c.lineTo(this.x + i, cnvHeight/2 + 50);
         c.stroke();
       }
     };

   };

   var shkale = new Shkale(ctx, 50);

   function move() {
     ctx.clearRect(0, 0, cnvWidth, cnvHeight);
     shkale.gorLine();
     shkale.verLine();
     shkale.x -= 2;

   if (shkale.x < 0) {
      shkale.x = 45
    };

     requestAnimationFrame(move);
     console.log(shkale.x);
   };

   move();

 </script>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 30.06.2018, 21:04
Интересующийся
Отправить личное сообщение для Sevic Посмотреть профиль Найти все сообщения от Sevic
 
Регистрация: 04.02.2018
Сообщений: 17

спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 30.06.2018, 21:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

canvas шкала анимация requestAnimationFrame
Sevic,
Вариант анимации ...
<!doctype html>
<html>
<head>
 <meta charset="utf-8" />
 <title>...</title>

</head>
<body>

 <script type="text/javascript">
var canvas = document.createElement("canvas");
canvas.id = "canvas";
canvas.style.border = "double black 4px";
document.body.appendChild(canvas);
var cnvWidth = canvas.width = window.innerWidth - 30;
var cnvHeight = canvas.height = window.innerHeight - 30;
var ctx = canvas.getContext("2d");

function Shkale(c, x) {
    var self = this;
    this.x = x;
    Shkale.prototype.gorLine = function() {
        c.beginPath();
        c.strokeStyle = "#396";
        c.moveTo(0, cnvHeight / 2);
        c.lineTo(cnvWidth, cnvHeight / 2);
        c.stroke()
    };
    Shkale.prototype.verLine = function() {
        for (var i = 0; i < cnvWidth + 45; i += 45) {
            c.beginPath();
            c.strokeStyle = "#00f";
            c.moveTo(this.x + i, cnvHeight / 2 - 50);
            c.lineTo(this.x + i, cnvHeight / 2 + 50);
            c.stroke()
        }
    }
}
var shkale = new Shkale(ctx, 50);
var time = performance.now(),
    duration = 1700;//скорость одного деления в ms

function move(b) {
    b = (b - time) / duration;
    1 <= b && (b = 1);
    shkale.x = 45 - 45 * b;
    ctx.clearRect(0, 0, cnvWidth, cnvHeight);
    shkale.gorLine();
    shkale.verLine();
    if (b == 1) time = performance.now();
    requestAnimationFrame(move);
    console.log(shkale.x)
}
requestAnimationFrame(move);


 </script>
</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 01.07.2018, 12:58
Интересующийся
Отправить личное сообщение для Sevic Посмотреть профиль Найти все сообщения от Sevic
 
Регистрация: 04.02.2018
Сообщений: 17

ваш вариант имеет более фиксированый интервал, независит от FPS дисплея и все такое?
Ответить с цитированием
  #6 (permalink)  
Старый 01.07.2018, 13:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Sevic
ваш вариант имеет более фиксированый интервал
да
Сообщение от Sevic
независит от FPS дисплея и все такое?


https://learn.javascript.ru/js-animation
Ответить с цитированием
  #7 (permalink)  
Старый 01.07.2018, 13:37
Интересующийся
Отправить личное сообщение для Sevic Посмотреть профиль Найти все сообщения от Sevic
 
Регистрация: 04.02.2018
Сообщений: 17

https://dou.ua/lenta/articles/javascript-gamedev/
Ответить с цитированием
  #8 (permalink)  
Старый 01.07.2018, 13:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Sevic,
ок, используйте что вам удобнее, shkale.x -= 2; зависит от числа запусков move и интервал сумма запусков, duration = 1700;//скорость одного деления в ms -- не зависит от числа запусков и интервал более стабилен, придерживается заданной величины.

Последний раз редактировалось рони, 01.07.2018 в 14:22.
Ответить с цитированием
  #9 (permalink)  
Старый 01.07.2018, 13:55
Интересующийся
Отправить личное сообщение для Sevic Посмотреть профиль Найти все сообщения от Sevic
 
Регистрация: 04.02.2018
Сообщений: 17

теперь разобрался, спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas функции и JQ Tanya51 Общие вопросы Javascript 5 29.07.2017 14:41
canvas hue-rotate fireballpro100 Общие вопросы Javascript 8 11.08.2016 05:34
Петербург: Javascript + Canvas. Разработчик для портирования игры. В офис. waxattack Работа 0 21.07.2016 14:06
Меню с выезжающим сайдбаром Jaz Элементы интерфейса 17 26.06.2016 19:21
Неизвестный идентификатор FaNaT_96 Общие вопросы Javascript 14 01.05.2016 18:15