質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

Q&A

解決済

1回答

1359閲覧

どんな理由があって分散したのか

aaaaaaaa

総合スコア501

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

0グッド

0クリップ

投稿2017/12/27 10:26

下記のソースは、canvasのパーティクルを動かすソースです。

処理をdrawにぶちこんだもの

javascript

1//①canvas要素の取得 2var canvas = document.getElementById("canvas"); 3 4//②canvas要素から描画コンテキストの取得 5var ctx = canvas.getContext("2d"); 6 7window.requestAnimationFrame = 8 window.requestAnimationFrame || 9 window.mozRequestAnimationFrame || 10 window.webkitRequestAnimationFrame || 11 window.msRequestAnimationFrame || 12 function(cb) {setTimeout(cb,17);}; 13 14var x =5; 15var y =5; 16 17//1.図形を描画する。(描画サイクルの開始) 18draw(); 19 20function draw() { 21 //2.一度図形を消去する 22 ctx.clearRect(0,0,500,500); 23 24 //3.位置をずらす 25 x +=5; 26 y +=5; 27 28 //.4再度図形を描画する。 29 30 //パスを初期化。ここでいうパスとは、領域の境界線のようなものだという。 31 ctx.beginPath(); 32 33 //塗りつぶす色を指定。 34 ctx.fillStyle = "#99ff66";//緑色 35 36 //長方形のパスを作成。第一引数がx座標(横)、第二引数がy座標(縦)、第三引数が横幅、第四引数が高さだ。座標というのは、ブラウザの表示領域のX軸とY軸のことだ。0,0にすれば、ブラウザの左上に表示される。 37 ctx.rect(this.x,this.y,10,20);//rectは、rectangel(長方形、矩形)の略である。 38 39 //fillで長方形を塗りつぶす。何も指定しないと黒色となる。 40 ctx.fill();//fillは、容器や場所などをいっぱいにする、満たすという意味だ。 41 42 //最後にbeginPathで開始したパスを閉じる。 43 ctx.closePath(); 44 45 //5.一定時間を置く 46 requestAnimationFrame(render); 47} 48

処理をいくつかの関数に分けたもの

javascript

1//①canvas要素の取得 2var canvas = document.getElementById("canvas"); 3 4//②canvas要素から描画コンテキストの取得 5var ctx = canvas.getContext("2d"); 6 7window.requestAnimationFrame = 8 window.requestAnimationFrame || 9 window.mozRequestAnimationFrame || 10 window.webkitRequestAnimationFrame || 11 window.msRequestAnimationFrame || 12 function(cb) {setTimeout(cb,17);}; 13 14var x =5; 15var y =5; 16 17//1.図形を描画する。(描画サイクルの開始) 18render(); 19 20function render() { 21 //2.一度図形を消去する 22 ctx.clearRect(0,0,500,500); 23 24 updatePosition(); 25 draw(x.y); 26 27 //5.一定時間を置く 28 requestAnimationFrame(render); 29} 30function updatePosition() { 31 //3.位置をずらす 32 x +=5; 33 y +=5; 34} 35function draw(posx,posy) { 36 //.4再度図形を描画する。 37 38 //パスを初期化。ここでいうパスとは、領域の境界線のようなものだという。 39 ctx.beginPath(); 40 41 //塗りつぶす色を指定。 42 ctx.fillStyle = "#99ff66";//緑色 43 44 //長方形のパスを作成。第一引数がx座標(横)、第二引数がy座標(縦)、第三引数が横幅、第四引数が高さだ。座標というのは、ブラウザの表示領域のX軸とY軸のことだ。0,0にすれば、ブラウザの左上に表示される。 45 ctx.rect(this.x,this.y,10,20);//rectは、rectangel(長方形、矩形)の略である。 46 47 //fillで長方形を塗りつぶす。何も指定しないと黒色となる。 48 ctx.fill();//fillは、容器や場所などをいっぱいにする、満たすという意味だ。 49 50 //最後にbeginPathで開始したパスを閉じる。 51 ctx.closePath(); 52}

drawにぶちこんだ処理をわけるさい、描画する位置をずらす処理をupdatePositionに、描画する処理をdraw、それらをまとめたもの?をrenderに分けましたが、なぜこのような分け方になったのでしょうか。
またこのようにわけるとブレイクスルーjavascriptの72頁によれば再利用性(使いまわしやすさ?)が向上するそうですが、なぜ分けると向上するのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

GameEngineの一つであるUnityでは
https://docs.unity3d.com/ja/current/Manual/ExecutionOrder.html
こんな感じに分かれてます。

歴史的な経緯はわからないので例をあげます

3次元空間に立方体が2つあったとして、描画する順は基本的に奥にある方から書くとうまく描画できますが、
そのためには位置が決まってからじゃないと判断できないので、update関数で位置を決め、draw関数で決まった位置をもとに描画順を決めていくって決めておけば間違いないよねっていう感じですね。
(Zバッファとかでそんなルールなくてもいいとかはありますが、それは今回はないものとして)

また、updateを2回呼び出してからdrawを呼ぶだけで倍速になったりしたりして便利です

ハード的にも例はあるんですが、これに関しては難しいので割愛

投稿2017/12/27 17:14

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問