2016-08-24 5 views
0

私はゲームを開発しており、ゲームのさまざまな側面(ユニット、アップグレードなど)を保持する変数saveを持っています。ゲームコードは、アップグレードやアチーブメントなどのいくつかのモジュールに分かれています。グローバルではなく他のモジュールで編集できる変数を作成するにはどうすればよいですか?

他のモジュールでsave変数にアクセスするにはどうすればよいですか?インポートすると変数の読み取り専用コピーが得られますが、これは有用ではありません。変数をグローバルにすることなく他のモジュールと変数を共有するにはどうすればいいですか?

私は問題の最も簡単な解決策を探しているわけではありません。ベストプラクティスを探しています。

EDIT:私はES6のインポート/エクスポート機能を使用しています。

+0

あなたは[依存性注入](http://krasimirtsonev.com/blog/article/Dependency-injection-in-JavaScript)で見ることができます。 – byxor

+0

Ajax +サーバー側の永続性? – Gar

+1

@JamesThorpe質問にいくつかの追加情報を追加しました。とても広範なことに対する謝罪! –

答えて

3

インポートすると、変数の読み取り専用コピーが得られる可能性がありますが、インポートされたオブジェクトはであるではありません。あなたは複数のモジュールが書き込みできる種類の状態オブジェクトを共有したい場合はそのため、次のことができます。

import saveState from './saveState'; 

saveState = { world: { } }; // Doesn't work 
saveState.world = {};  // Does work 

...私はこのようなパターンを提唱したいないこと(共有状態はupredictabilityのすべての種類につながります)。メソッドと共有オブジェクトを持ち、そのオブジェクトが内部状態を維持するようにしてください。

+0

正直なところ、ビデオゲームの目的のためには、私はオープンアクセスがおそらく最も簡単だと言うだろう。それは 'if(saveState.world ['dragonChoice'] === 'SAVE'){dialog ="あなたがそのドラゴンを救ったと聞きました。 } ' – Katana314

1

es6を使用している場合は、ローカルモジュール変数を作成し、ユーティリティー関数をエクスポートして元の値を変更することができます。

// save-module.js 
let Save = { 
    score: 0, 
    room: 'main' 
} 

export changeRoom(room){ 
    Save.room = room; 
} 
export addScore(){ 
    Save.score++; 
} 
export subtractScore(){ 
    Save.score--; 
} 
export getSaveObject(){ 
    return Save; 
} 

// other-module.js 
import { changeRoom, addScore, subtractScore, getSaveObject } from './save-module'; 

// Do something here with the fns and it should update the Save variable 
+0

3レベルのネストされたオブジェクトを持っているときにこれを実装するよりクリーンな方法がありますか? –

関連する問題