快捷导航
蚂蚁部落 网站首页 实例代码 canvas实例 查看内容

canvas绘制太阳系运动效果

2017-6-16 20:36| 发布者: antzone| 查看: 105| 评论: 0|来自: 蚂蚁部落

分享一段代码实例,它利用canvas绘制了太阳系星球旋转效果。

根据与太阳不同的距离,星球的旋转速度也是不同的,当然只是一个大致的模拟。

代码实例如下:

[HTML] 纯文本查看 复制代码运行代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
*{
  margin: 0;
	padding:0;
}
html,body{
  width: 100%;
}
#canvas{
  width: 100%;
  height: 100%;
  background:black;
  display: block;
  /*去掉canvas作为行内元素默认垂直方式而产生的下边空白间距*/
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
var canvas = document.getElementById("canvas");
var cxt = canvas.getContext("2d");
var centerX = 0,
  cneterY = 0;

var time = 0;

centerX = window.innerWidth / 2;
cneterY = window.innerHeight / 2;

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

window.onresize = function() {
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
  // 获取浏览器窗口的中心坐标
  centerX = window.innerWidth / 2;
  cneterY = window.innerHeight / 2;
  // console.log("W:"+centerX + "H:"+cneterY);
};

function draw() {

  cxt.clearRect(0, 0, 10000, 10000);

  cxt.strokeStyle = "#fff";

  //画轨道,因其是相对太阳静止的,故与行星区分开来画
  function drawTrack() {

    for (var i = 1; i < 9; i++) {
      cxt.beginPath();
      cxt.arc(centerX, cneterY, 50 * i, 0, 360, false);
      cxt.closePath();
      cxt.stroke();
    }

  }

  drawTrack();

  function Planet(x, y, radius, cycle, inColor, outColor) {
    this.x = x;
    this.y = y;
    this.radius = radius;
    this.cycle = cycle;
    this.inColor = inColor;
    this.outColor = outColor;

    this.draw = function() {
      cxt.save();
      cxt.translate(centerX, cneterY);

      cxt.rotate(time * 360 / this.cycle * Math.PI / 200);


      cxt.beginPath();
      cxt.arc(this.x, this.y, this.radius, 0, 360, false);
      cxt.closePath();

      var sunColor = cxt.createRadialGradient(this.x, this.y, 0, this.x, this.y, 20);
      sunColor.addColorStop(0, this.inColor);
      sunColor.addColorStop(1, this.outColor);
      cxt.fillStyle = sunColor;
      cxt.fill();
      cxt.restore();
      time++;
    }
  }

  var sun = new Planet(0, 0, 20, 0, "#f00", "#f90");
  sun.draw();

  var Mercury = new Planet(-50, 0, 10, 288, "#A69697", "#5C3E40");
  Mercury.draw();

  var Venus = new Planet(-100, 0, 10, 505, "#C4BBAC", "#1F1315");
  Venus.draw();

  var Earth = new Planet(-150, 0, 10, 565, "#78B1E8", "#050C12");
  Earth.draw();

  var Mars = new Planet(-200, 0, 10, 687, "#CEC9B6", "#76422D");
  Mars.draw();

  var Jupiter = new Planet(-250, 0, 10, 4333, "#C0A48E", "#322222");
  Jupiter.draw();

  var Saturn = new Planet(-300, 0, 10, 10760, "#F7F9E3", "#5C4533");
  Saturn.draw();

  var Uranus = new Planet(-350, 0, 10, 30099, "#A7E1E5", "#19243A");
  Uranus.draw();

  var Neptune = new Planet(-400, 0, 10, 165 * 320, "#0661B2", "#1E3B73");
  Neptune.draw();

}

setInterval(draw, 10);
</script>
</body>
</html>

鲜花

握手

雷人

路过

鸡蛋

最新评论

关于我们|手机版|小黑屋| 蚂蚁部落 ( 鲁ICP备10022556号-3 )

GMT+8, 2017-6-27 16:40 , Processed in 0.055052 second(s), 21 queries .

Powered by Discuz! X3.2 Licensed

Copyright © 2012-2017 Design: 蚂蚁部落

返回顶部