ユーザーがデバイスの再生ボタンをクリックしたときに実行されるメソッドを持つGame
クラスがあります。-(void) play
メソッド内-(void) play
には、ユーザーが [終了] ボタンをクリックするまで繰り返し実行される while ループがあります。この while ループは基本的に私のコードの中核であり、必要なすべてのメソッドが呼び出され、物事が起こり、オブジェクトが相互作用するなどです。
User クラスもあり (他のクラスの中でも..) 、Game クラスUser* player
のメソッドにインスタンスを作成し-(void) play
ていくつかの値を保存し、それらがゲームの期間中に他のものと相互作用するようにします..
ここで、(ゲーム中の任意の時点で..)磁北からのデバイスの偏差と、ユーザーがデバイスで実行している加速度を知る必要があります
コードを書きましたが、すべて正常に動作しています。ただし、プログラミングが初めてなので、コードの全体的な設計に関していくつか質問があります。これは、特に CoreLocation および CoreMotion フレームワークの使用に関しては混乱していると思います..
Game クラスの-(void) play
メソッド (基本的には私の「メイン」メソッド) は、[game performSelectorInBackground:@selector(play) withObject:nil];
Is this the right way to do it? のように別のスレッドで実行されます。
ただし、CoreMotion Acceleration の更新を-(void) play
メソッド内から初期化[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]withHandler:^(CMDeviceMotion *motion, NSError *error){...}
します。つまり、更新はメイン キューに格納されますが、これらの更新を初期化するメソッドは-(void) play
、別のスレッドで実行される method( ) 内から実行されます。それは理にかなっていますか?
Game クラスのインスタンスを初期化するときに、CoreLocation の更新も初期化します。さらに奇妙な?
私のポイントはこれです。ユーザーがデバイスで実行している加速度と、ユーザーがデバイスに与えている方向 (度) を測定することを考えると、すべてを User クラスにカプセル化し、次のようなメソッドを持ちたいと思い[player getMyDegrees];
ます[player getMyAcceleration];
。設計上の正しい方法は?これらの更新を正確にどこで初期化する必要がありますか? どの特定のクラスメソッドの中から? すべてを同じメイン スレッドで実行するか、同じ別のスレッドで実行するか、別の別のスレッドで実行する必要がありますか? よくわかりません..