Animasi Lingkaran Menjauhi Titik Tengah dengan HTML5 Canvas


Terusik mengingat pemrograman HTML5 Canvas yang penulis telah lama tidak membuat aplikasi apapun, akibat kesibukan kerja. Dalam tulisan ini penulis mencoba membuat animasi sederhana, lingkaran-lingkaran yang bergerak menjauhi titik tengah workspace.

Konsepnya adalah lingkaran tidak hanya menjauhi, tetapi ukurannya semakin membesar, dan sedikit bergerak berotasi.

Ide ini muncul, ketika penulis melihat video Youtube, dengan background yang kurang lebih seperti animasi di atas.

Effect glow, hanya penulis gunakan untuk mempercantik tampilan.

Di bawah ini adalah kode HTML5 Canvas animasi tersebut:

<html> 
<head> 
<title>Dots that Move Around</title> 
</head> 
<body> 
<canvas id="myCanvas" width="1024" height="768"> 
</canvas> 
<script> 
 
var canvas = document.getElementById("myCanvas"); 
 
var num=0,n=1; 
var points=[]; 
var vx=0.1,vy=0.1; 
var RO=0.5*Math.sqrt(canvas.width*canvas.width+canvas.height*canvas.height); 
 
function Menggambar() 
{ 
 var ctx = canvas.getContext("2d"); 
 ctx.fillStyle = "black"; 
 ctx.fillRect(0, 0, canvas.width, canvas.height); 

 if(n==1 && num<50){ 
  points[4*num+0]=0.5* canvas.width-0.5+Math.random()*0.9; 
  points[4*num+1]=0.5* canvas.height-0.5+Math.random()*0.9; 
  points[4*num+2]=0.0; 
  points[4*num+3]=1.0; 
  num++; 
  n=200+parseInt(Math.random()*50); 
 }else n--; 
 ctx.save(); 
 for(i=0;i<num;i++){ 
  points[4*i+2]+=0.01; 

  var rx=points[4*i+0]-0.5 * canvas.width; 
  var ry=points[4*i+1]-0.5 * canvas.height; 
  var r=Math.sqrt(rx*rx+ry*ry); 
  r+=0.2; 
  if(r>RO){ 
   points[4*i+0]=0.5* canvas.width-0.5+Math.random()*0.9; 
   points[4*i+1]=0.5* canvas.height-0.5+Math.random()*0.9; 
   points[4*i+2]=0.0; 
   points[4*i+3]=1.0; 
  }else{ 
   var rad=Math.atan2(ry,rx); 
   rad-=Math.PI/5500; 
   points[4*i+0]=0.5 * canvas.width+r*Math.cos(rad); 
   points[4*i+1]=0.5 * canvas.height+r*Math.sin(rad); 
  } 

  ctx.globalAlpha=points[4*i+3]; 
  ctx.shadowBlur = 10; 
  ctx.shadowColor = "yellow"; 
  points[4*i+3]-=0.0001; 
  if(points[4*i+3]>0){ 
   ctx.beginPath(); 
 
   // Fill with gradient 
   ctx.fillStyle = "white"; 
   ctx.arc(points[4*i+0],points[4*i+1],points[4*i+2], 0, 2 * Math.PI); 
   ctx.fill(); 
   ctx.closePath(); 
  } 
 } 
 ctx.restore(); 
 window.requestAnimationFrame(Menggambar); 
} 
 
Menggambar(); 
</script> 
</body> 
</html> 

Komentar



Postingan populer dari blog ini

Jasa Penjadwalan Semester, UTS dan UAS Perguruan Tinggi menggunakan Google Sheet

Menyikapi Ucapan AI Pejabat

Peringatan: Aksi Penipuan Skimming Melalui Aplikasi Android M-Pajak

Kebodohan Karyawan Menyalahkan Sistem

Ketika Pengelola Basis Data Terabaikan

Checking Data yang Belum Dimasukkan dalam Daftar Menggunakan Query Google Sheet

Apps Script untuk Cetak Sertifikat

Kumpulan Source Code Greenfoot

Menyembunyikan Failed Load Images di Blogger

Game TicTacToe dengan Greenfoot