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

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

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

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

Q&A

解決済

2回答

869閲覧

波括弧の働きはなんですか

takahashi-one

総合スコア120

JavaScript

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

0グッド

0クリップ

投稿2020/10/31 02:52

下記のコードのinit()の中に単に { } で囲まれた部分があります。関数でもなく変数に入れるわけでもなく、これは何のための { } なのでしょうか? どのような働きがありますか?

javascrtipt

1 <script> 2 // ページの読み込みを待つ 3 window.addEventListener('load', init); 4 5 function init() { 6 // サイズを指定 7 const width = 960; 8 const height = 540; 9 10 // レンダラーを作成 11 const renderer = new THREE.WebGLRenderer({ 12 canvas: document.querySelector('#myCanvas'), 13 antialias: true//アンチエイリアス 物体の輪郭がギザギザになることを抑える処理 動きが重たくなる場合がある 14 }); 15 renderer.setPixelRatio(window.devicePixelRatio); 16 renderer.setSize(width, height); 17 // レンダラー側で影を有効に 18 renderer.shadowMap.enabled = true; 19 20 // シーンを作成 21 const scene = new THREE.Scene(); 22 23 // カメラを作成 24 //平行投影を表現できるカメラです。このカメラには遠近感がないので、手前にある3Dオブジェクトも奥にある3Dオブジェクトも同じ大きさで表示されます 25 //left, right, top, bottom, near, far 26 const camera = new THREE.OrthographicCamera(-480, +480, 270, -270); 27 28 // 光源を作成 29 //色, 光の強さ, 距離, 照射角, ボケ具合, 減衰率 30 { 31 const spotLight = new THREE.SpotLight( 32 0xffffff, 33 4, 34 2000, 35 Math.PI / 5, 36 0.2, 37 1.5 38 ); 39 spotLight.position.set(500, 300, 500); 40 spotLight.castShadow = true; // 影を落とす設定 41 spotLight.shadow.mapSize.width = 2048; 42 spotLight.shadow.mapSize.height = 2048; 43 scene.add(spotLight); 44 } 45 46 // 地面を作成 47 { 48 // 床のテクスチャー 49 const texture = new THREE.TextureLoader().load('imgs/floor.png'); 50 texture.wrapS = texture.wrapT = THREE.RepeatWrapping; // リピート可能に 51 texture.repeat.set(10, 10); // 10x10マスに設定 52 texture.magFilter = THREE.NearestFilter; // アンチエイリアスを外す 53 54 const floor = new THREE.Mesh( 55 new THREE.PlaneGeometry(1000, 1000), 56 new THREE.MeshStandardMaterial({ 57 map: texture, 58 roughness: 0.0, 59 metalness: 0.6 60 }) 61 ); 62 floor.rotation.x = -Math.PI / 2; 63 floor.receiveShadow = true; // 影の設定 64 scene.add(floor); 65 } 66 67 // マス目を作成 68 { 69 // 立方体のマテリアルとジオメトリを作成 70 const material = new THREE.MeshStandardMaterial({ 71 color: 0x2299ff, 72 roughness: 0.1, 73 metalness: 0.2 74 }); 75 const geometry = new THREE.BoxGeometry(45, 45, 45); 76 77 // 立方体を複数作成しランダムに配置 78 for (let i = 0; i < 60; i++) { 79 const box = new THREE.Mesh(geometry, material); 80 box.position.x = Math.round((Math.random() - 0.5) * 19) * 50 + 25; 81 box.position.y = 25; 82 box.position.z = Math.round((Math.random() - 0.5) * 19) * 50 + 25; 83 // 影の設定 84 box.receiveShadow = true; 85 box.castShadow = true; 86 scene.add(box); 87 } 88 } 89 90 tick(); 91 92 // 毎フレーム時に実行されるループイベントです 93 function tick() { 94 // 角度に応じてカメラの位置を設定 95 camera.position.x = 500 * Math.sin(Date.now() / 2000); 96 camera.position.y = 250; 97 camera.position.z = 500 * Math.cos(Date.now() / 2000); 98 // 原点方向を見つめる 99 camera.lookAt(new THREE.Vector3(0, 0, 0)); 100 101 // レンダリング 102 renderer.render(scene, camera); 103 requestAnimationFrame(tick); 104 } 105 } 106 </script>

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

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

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

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

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

otn

2020/10/31 02:58

どれのことですか?
guest

回答2

0

ブロックスコープを使うために書いています。{} 内でletやconstで宣言された変数などは、その {} 内部でのみアクセス可能です。

ブロック - JavaScript | MDN

今回のコードでは、scene.addするために一時的に用いられる変数(spotLightなど)が、他の部分からはアクセスできないようにしています。

投稿2020/10/31 02:58

Daregada

総合スコア11990

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

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

guest

0

ベストアンサー

オブジェクトリテラルを表す{ }を知らないと思えないので、「光源を作成」「地面を作成」などの後のものですかね?

これは単なるブロックです。
書いている目的としては、const(やlet)で宣言した変数名のスコープをこのブロック内に限定するためでしょう。
例えば、spotLightという変数名はこのブロックの外では無効(未定義)です。

投稿2020/10/31 03:08

otn

総合スコア85901

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

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

otn

2020/10/31 03:17

長いプログラムの場合、囲んでないと、プログラムを読む人は「spotLightが後ろの方でもまた出てくるかも」という前提でプログラムを読む必要がありますが、囲まれていると、以降を読むときにspotLightの事は忘れて良くなります。頭の中に覚えておく情報が少なくて済むので、読み手に優しい。 関数として独立させるのも手です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問