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

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

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

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

Q&A

2回答

880閲覧

JavaScript 名前空間のような機能はないのか?

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2021/09/19 08:10

提示コードですがこのソースファイルにはPlayer,Bullet,Enemy, があるのですがこのクラスの名前は別のソースファイルでも利用したいので名前空間等を使って同じ名前を使いたいのですがこれはどうやったら実現できるのでしょうか?

js

1let BulletType = {Enemy: 0,Player: 1}; //バレットタイプ 2 3class Bullet 4{ 5 //引数のバレット配列にオブジェクトを生成 6 static Instance(array,position,type) 7 { 8 let b = false; 9 10 if(array.length == 0) 11 { 12 array.push(new Bullet(new Vector(position.x,position.y),type)); 13 b = true; 14 } 15 16 array.forEach(item => 17 { 18 if(item.alive == false) 19 { 20 b = true; 21 item.Init(new Vector(position.x,position.y),type); 22 } 23 }); 24 25 if( b == false) 26 { 27 array.push(new Bullet(new Vector(position.x,position.y),type)); 28 } 29 30 } 31 32 constructor(pos,type) 33 { 34 this.c = color(0,0,0); //色 35 this.speed = 0; //速度 36 this.deleteBulletY = 800; //表示座標上限 37 this.type = type; //タイプ 38 this.size = new Vector(5,15); //サイズ 39 this.position = pos; //座標 40 this.alive = true; //有効かどうか? 41 42 if(type == BulletType.Enemy) 43 { 44 this.c = color(200,0,0); 45 this.speed = 6; 46 } 47 else if(type == BulletType.Player) 48 { 49 this.c = color(0,0,200); 50 this.speed = 15; 51 } 52 53 54 } 55 56 Init(pos,type) 57 { 58 if(type == BulletType.Enemy) 59 { 60 this.c = color(200,0,0); 61 } 62 else if(type == BulletType.Player) 63 { 64 this.c = color(0,0,200); 65 } 66 67 this.position = pos; 68 this.alive = true; 69 } 70 71 Update() 72 { 73 if(this.type == BulletType.Enemy) 74 { 75 this.position.y += this.speed; 76 77 if(this.position.y > this.deleteBulletY ) 78 { 79 this.alive = false; 80 } 81 } 82 else if(this.type == BulletType.Player) 83 { 84 this.position.y += -this.speed; 85 86 if(this.position.y < 0) 87 { 88 this.alive = false; 89 } 90 } 91 } 92 93 Renderer() 94 { 95 fill(this.c); 96 if(this.alive == true) 97 { 98 rect(this.position.x,this.position.y,this.size.x,this.size.y); 99 } 100 } 101} 102 103 104class Enemy 105{ 106 constructor(pos) 107 { 108 this.position = pos; //座標 109 this.alive = true; //生きいるかどうか? 110 this.size = new Vector(20,20); //サイズ 111 this.bullet = new Array(); //Enemy Bullet 配列 112 this.b = 0; //インスタンス判定 113 this.speed = 2; //速度 114 } 115 116 117 Init(pos) 118 { 119 this.position = pos; 120 this.alive = true; 121 } 122 123 124 get getBullet() 125 { 126 return this.bullet; 127 } 128 129 Update() 130 { 131 this.position.y += this.speed; 132 133 //console.log(this.bullet.length); 134 135 if( GetRandom(1,100) % 50 == 0 ) 136 { 137 Bullet.Instance(this.bullet,this.position,BulletType.Enemy); 138 } 139 140 // バレット更新 141 if(this.bullet.length > 0) 142 { 143 this.bullet.forEach(item => 144 { 145 if(item.alive == true) 146 { 147 item.Update(); 148 } 149 150 }); 151 } 152 } 153 154 Renderer() 155 { 156 if(this.alive == true) 157 { 158 fill(color(255,0,0)); 159 160 triangle(this.position.x,this.position.y + this.size.y, 161 this.position.x - this.size.x,this.position.y - this.size.y, 162 this.position.x + this.size.x,this.position.y - this.size.y); 163 } 164 165 if(this.bullet.length > 0) 166 { 167 this.bullet.forEach(item => 168 { 169 if(item.alive == true) 170 { 171 item.Renderer(); 172 } 173 174 }); 175 } 176 } 177 178} 179 180 181class Player 182{ 183 //コンストラクタ 184 constructor(pos) 185 { 186 this.position = pos; //座標 187 this.alive = true; //生きるかどうか? 188 this.size = 30; //サイズ 189 this.speed = 10; //移動速度 190 this.bullet = new Array(); //バレット 191 this.shiftPush = false; //シフトキーを押したかどうか? 192 this.damage = false; //ダメージがどうか? 193 this.damageAnimation = 0; //ダメージアニメーション フレームを加算 194 this.life = 3; //ライフ 195 196 } 197 198 //ダメージ 199 Damage() 200 { 201 this.damage = true; 202 } 203 204 get getBullet() 205 { 206 return this.bullet; 207 } 208 209 //キー入力 210 KeyBoard() 211 { 212 213 if(keyIsDown(LEFT_ARROW) == true) 214 { 215 this.position.x += -speed; 216 217 } 218 else if(keyIsDown(RIGHT_ARROW) == true) 219 { 220 this.position.x += speed; 221 } 222 223 if(keyIsDown(UP_ARROW) == true) 224 { 225 this.position.y += -speed; 226 } 227 else if(keyIsDown(DOWN_ARROW) == true) 228 { 229 this.position.y += speed; 230 } 231 232 if ( (keyIsDown(SHIFT) == true) && (this.shiftPush == false) ) 233 { 234 this.shiftPush = true; 235 Bullet.Instance(this.bullet,this.position,BulletType.Player); 236 } 237 238 if(keyIsDown(SHIFT) == false) 239 { 240 this.shiftPush = false; 241 } 242 } 243 244 245 //更新 246 Update() 247 { 248 if(this.life >= 0) 249 { 250 this.KeyBoard(); 251 } 252 253 if(this.bullet.length > 0) 254 { 255 this.bullet.forEach(item => 256 { 257 item.Update(); 258 }); 259 } 260 261 if(this.damage == true) 262 { 263 //ライフを減らす 264 if(this.damageAnimation == 0) 265 { 266 this.life += -1; 267 } 268 269 this.damageAnimation++; 270 271 if(this.damageAnimation > 20 ) 272 { 273 this.damageAnimation = 0; 274 this.damage = false; 275 276 } 277 } 278 } 279 280 //描画 281 Renderer() 282 { 283 if(this.damage == true) 284 { 285 if(GetRandom(1,100) % 10 == 0) 286 { 287 fill(color(255,0,255)); 288 triangle(this.position.x,this.position.y - this.size, 289 this.position.x - this.size,this.position.y + this.size, 290 this.position.x + this.size,this.position.y + this.size); 291 } 292 293 } 294 else 295 { 296 fill(color(255,0,255)); 297 triangle(this.position.x,this.position.y - this.size, 298 this.position.x - this.size,this.position.y + this.size, 299 this.position.x + this.size,this.position.y + this.size); 300 } 301 302 if(this.bullet.length > 0) 303 { 304 this.bullet.forEach(item => 305 { 306 item.Renderer(); 307 }); 308 } 309 } 310} 311 312class Game 313{ 314 315}

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

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

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

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

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

guest

回答2

0

「javaScript 名前空間」で検索した中で出てくるキーワードから辿ればこのようなものがヒットする。

モジュールオブジェクト

これは、module.js の中にある全てのエクスポートを取得して、それらを Module というオブジェクトのメンバーとして利用できるようにすることで、独自の名前空間を持たせるような効果があります

要件に合うかは知らない。

投稿2021/09/19 09:30

編集2021/09/19 09:31
m.ts10806

総合スコア80765

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

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

0

名前空間等を使って同じ名前を使いたいのですが

JavaScriptの場合、必要になるものは各ファイルでimportするという形を取ることで、ファイルごとにスコープが切れたまま、共有したいものは共有することが可能です。

暗黙に参照を行う名前空間のような構造は、(ブラウザ内でどうしようもなく使うことはありますが)あまり好まれません。

投稿2021/09/19 09:35

maisumakun

総合スコア145121

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問