ホームページ | Pirikaで化学 | ブログ | 業務案内 | お問い合わせ |
情報化学+教育トップ | 情報化学 | MAGICIAN | MOOC | プログラミング |
2022.2.28
Pirika.comでプログラミング
山本博志
わかりやすいように、少し改造したプログラムは次のようになる。
コピペして、HogeHoge.htmlとして保存して、改造しよう。
完成形プログラム(▶︎をクリックして開く)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>円の放出</title>
</head>
<body>
<h1>円の放出</h1>
<input type="button" id="btnStart" value="Start" onclick="StartSimu()">
<canvas width="600" height="350"></canvas>
<script type="text/javascript">
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
const width = canvas.width ;
const height = canvas.height ;
let MySimu = false; // シミュレーション・フラグ
var center = {};//画面の中央
var dots = [];
var density = 40; //パーティクルの数
var colors = ['#eeb900', '#6DD0A5', '#f799db'];
var baseSize = 3;//大きさを変える
var baseSpeed = 5;//スピードを変える
function loop() {//アニメーションループ
if(MySimu){
ctx.fillStyle = 'rgb(255, 255, 255)';
ctx.fillRect(0, 0, width, height);
for (var i = 0; i < density; i++) {
dots[i].update();
dots[i].draw();
}
requestAnimationFrame(loop);
}
}
// 開始ボタンが押されたとき
function StartSimu() {
if (MySimu) {
MySimu = false;
document.getElementById('btnStart').value = 'シミュレーション開始';
} else {
MySimu = true;
document.getElementById('btnStart').value = 'シミュレーション停止';
center.x = canvas.width / 2;
center.y = canvas.height / 2;
for (var i = 0; i < density; i++) {
dots.push(new Dot());//Dotを作って、dots配列に入れていく。
}
loop();
}
}
var Dot = function () {
this.size = Math.floor( Math.random() * 6 ) + baseSize; //大きさ
this.color = colors[~~(Math.random() * 3)]; //色
this.speed = this.size / baseSpeed; // 大きさによって速度変更
this.pos = { // 位置
x: canvas.width / 2,
y: canvas.height / 2
};
var rot = Math.random() * 360; // ランダムな角度
var angle = rot * Math.PI / 180;
this.vec = { // 移動方向
x: Math.cos(angle) * this.speed,
y: Math.sin(angle) * this.speed
};
// ランダムに配置
var startRandom = Math.random();
this.pos.x += this.vec.x * (startRandom * center.x);
this.pos.y += this.vec.y * (startRandom * center.y);
};
Dot.prototype = {
update: function() {//早さで動いた後の座標
this.pos.x += this.vec.x;
this.pos.y += this.vec.y;
if(this.pos.x > canvas.width + baseSize
|| this.pos.x < 0 - baseSize
|| this.pos.y > canvas.height + baseSize
|| this.pos.y < 0 - baseSize) {//壁に到達したら中央へ
this.pos.x = center.x;
this.pos.y = center.y;
}
},
draw: function() {//円を描く
ctx.fillStyle = this.color;
ctx.beginPath();
ctx.arc(this.pos.x, this.pos.y, this.size, 0, 2 * Math.PI, false);
ctx.fill();
}
};
</script>
</body>
</html>
星を円から球に変更しよう。(2-2で光らせる位置を取り出す。)
星の出てくる位置をマウスのある位置に変更しよう。(キャンバス中のマウスの位置)
マウスの形を、エンタープライズ号に(もしくは、好きな乗り物)変更しよう。
(エンタープライズの絵、画像サイズ変更)
するとワープしているような気分になれるかも。
Copyright pirika.com since 1999-
Mail: yamahiroXpirika.com (Xを@に置き換えてください) メールの件名は[pirika]で始めてください。