1. ホーム
  2. Web制作
  3. html5

H5では、ダイナミックなグラフィックス機能を実現するために、キャンバスの最も強力なインタフェース

2022-01-31 12:40:03

前回の記事では、canvasを使ってグラフィックを描く方法を紹介しましたが、描いたグラフィックは静的なものでした。

アニメーションとは?

アニメーションを描く前に、アニメーションとは何か、アニメーションに最低限必要な基本的な条件は何か、考えてみる必要があるのではないでしょうか。

ツールで実演できるアニメーションとは?

PPTで描かれたアニメーション効果です

上記のアニメーション効果のPPT図面に基づいて、いくつかのPPTページを素早く切り替えると、アニメーション効果を見ることができるようにリンクされていることがわかります。

以上が、アニメーション実装の基本要素です。

単位時間あたりに複数の画像を連続再生する。この単位時間は一般に秒単位で、コンピュータ・レンダリング・グラフィックスで十分に滑らかな映像を得るには、1秒あたりの画像数がモニターのリフレッシュレート以上でなければなりません(このリフレッシュレートは一般に60hzです)。

各画像内のオブジェクトの状態(大きさ、形、色、位置、角度など)が変化すること

では、この2つの条件をcanvasで実現するにはどうすればよいのでしょうか。

1秒間に60枚のグラフィックを描く方法

それを変形して、1/60秒ごとにグラフを描画することができます。JavaScriptで頻繁に何かを行うには、タイマーのsetintervalを使う方法があります。

タイマーとは何ですか?

setinerval (function f(){}, t), the タイマーの内部では、関数と時間の2つのパラメータを渡すことができ、このコードは、関数fがt msごとに実行されることを意味します。

そこで、これを利用して、1/60秒ごとに必要な描画を行うことにします

setInterval(function(){
canCon.fillStyle="black";
//canCon.fill means to pick up a pen that draws solid shapes on this rice paper.
//style="black" means to dip a pen into a black ink
//all together it means to pick up a solid drawing pen and stick it with black ink
canCon.arc(233,233,66,0,Math.PI*2);
 // conceive a circle on rice paper (X position of the center of the circle, Y position, radius of the circle, from what position the circle starts and where it ends).
canCon.fill();//draw with the brush
},1000/60)

最終効果

しかし、まだアニメーション効果はありません。1sの60枚の描画はすべて同じなので、次のステップでは、1枚描画するごとに要素の状態を変化させることになります。

次のステップは、1つ1つ描画するたびに要素の状態を変化させることです。このグループは毎晩無料のライブ授業があるので、勉強したくない人は追加しないでください。

(537-631-707)

要素の状態を変更するにはどうしたらよいですか?

円の位置は円の中心の座標で決まるので、キャンバスを描くたびに要素の位置を一度変更します

vary=100;//Give an initial center position, and then each time we draw, the y position of the center will move down one distance
setInterval(function(){
canCon.fillStyle="black";
//canCon.fill means pick up a pen that draws a solid shape on this rice paper.
//style="black" means to dip a pen into a black ink
//all together it means to pick up a solid drawing pen and stick it with black ink
canCon.arc(233,y++,66,0,Math.PI*2);
// conceive a circle on rice paper (X position of the center, Y position, radius of the circle, from what position the circle starts and where it ends).
canCon.fill();//draw with the brush
},1000/60)

この時点で見えているのは、動く円ではなく、伸び続けるプログレスバーのようなものです。その理由は簡単で、新しいグラフィックを描くたびに元のグラフィックを消しているわけではないので、画像はn個のグラフィックを重ね合わせた結果になっているのです。そこで、新しいものを描くたびに元のものを消す必要があるのですが、どうすればよいのでしょうか。

vary=100;//give an initial center position, and then each time we draw, the y position of the center of the circle is moved down one distance
setInterval(function(){
canCon.clearRect(0, 0, 500, 500);//erase a rectangular area the top left corner of the rectangle and the width and height of the rectangle
canCon.fillStyle="black";
//canCon.fill means to pick up a pen that draws solid shapes on this rice paper
//style="black" means to dip a pen into a black ink
//all together it means to pick up a solid drawing pen and stick it with black ink
canCon.arc(233,y++,66,0,Math.PI*2);
// conceive a circle on rice paper (X position of the center, Y position, radius of the circle, from what position the circle starts and where it ends).
canCon.fill();//draw with the brush
},1000/60)

しかし、この時点ではまだうまくいきません。では、どうなっているのでしょうか?紙の面積を消すときは、筆を持ち上げて消しゴムで消すので、キャンバスの面積を消すときも、筆を持ち上げてから消す必要があります。

vary=100;//Give an initial circle center position, and each time we draw, the y position of the center moves down one distance
setInterval(function(){
canCon.beginPath();//Lift the pen up
canCon.clearRect(0, 0, 500, 500);//erase a rectangular area the coordinates of the upper left corner of the rectangle and the width and height of the rectangle
canCon.fillStyle="black";
//canCon.fill means to pick up a pen that draws solid shapes on this rice paper
//style="black" means to dip a pen into a black ink
//all together it means to pick up a solid drawing pen and stick it with black ink
canCon.arc(233,y++,66,0,Math.PI*2);
 // conceive a circle on rice paper (X position of the center, Y position, radius of the circle, from what position the circle starts and where it ends).
canCon.fill();//draw with the brush
},1000/60)

これにより、動きのある円を得ることができます

概要

上記は、動的なグラフィックス機能を達成するために、H5キャンバスの最も強力なインターフェイスを紹介することです、私はそれがあなたを助けることを願って、あなたが何か質問がある場合は、私にメッセージを与えてください、私は速やかに皆に返信されます。今後ともScript Houseをよろしくお願いいたします。