canvas实现鼠标交互小行星陨石移动动画效果代码

代码语言:html

所属分类:动画

代码描述:canvas实现鼠标交互小行星陨石移动动画效果代码

代码标签: canvas 鼠标 交互 小行星 陨石 移动 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">

  
  
</head>

<body translate="no">
  
  
      <script  >
////////////////////////////////////////////////////////////////////////////////
console.clear();

let canvas, canvasCtx;
let canvasSize = [0, 0],scale = 1;
let state;

main();

////////////////////////////////////////////////////////////////////////////////
function main() {
  canvas = document.createElement('canvas');
  document.body.appendChild(canvas);
  document.body.style.margin = '0';
  canvas.style.display = 'block';

  canvasCtx = canvas.getContext('2d');

  state = createState();

  setupControls();

  requestAnimationFrame(mainLoop);

  function mainLoop() {
    tick();
    requestAnimationFrame(mainLoop);
  }
}

function setupControls() {
  canvas.addEventListener('mousemove', e => {
    const x = e.offsetX - canvasSize[0] / 2;
    const y = e.offsetY - canvasSize[1] / 2;
    const m = 3;
    state.vel = [x * m, y * m];
  });
}

function createState() {
  const state = {
    time: 0,
    timeDelta: 1 / 60,
    asteroidLimit: 50,
    spawnProb: 0.0001,
    nToSpawn: 0,
    asteroids: [],
    vel: [8, 128] };

  return state;
}

function tick() {
  checkResizeAndInit();
  canvasCtx.fillStyle = '#000000';
  canvasCtx.fillRect(0, 0, canvasSize[0], canvasSize[1]);

  state.time += state.timeDelta;

  respawnAsteroids();
  moveAsteroids();

  drawAsteroids();
}

function checkResizeAndInit() {
  if (
  window.innerWidth === canvasSize[0] &&
  window.innerHeight === canvasSiz.........完整代码请登录后点击上方下载按钮下载查看

网友评论0