並列処理について。
投稿者 : そいそい(b196057.usr.starcat.ne.jp)
- 2003/02/24(Mon) 11:19
No.2718
|
|
|
|
|
いくつかのオブジェクトで相互に作用する関係が有る場合や 一つのオブジェクトの動きが他のオブジェクト内で決定する場合、
ゲーム起動時に別オブジェクト内での定義が間に合わず違った動き を初回だけしてしまいます。
オブジェクト毎に定義を入れてしまうと、流用がきかなくなり、別 オブジェクトをどんどん増やす結果になってしまいます。
複数オブジェクトの並列処理に関して初回だけ、「これを優先する」 等の措置は有りますでしょうか?
|
Re: 並列処理について。
投稿者 : hoge-(ppp02.kake.info.waseda.ac.jp)
- 2003/02/24(Mon) 12:26
No.2720
|
|
|
|
方法1:appearメソッドに続いて初期化(比較的単純な方法) appearメソッドの戻り値は、出現したオブジェクトそのものになっているので、次のような初期化が可能です。
a=appear(new Teki(x,y,p)); a.life=5; a.attack=4; これらの処理は途中にupdateをはさまない限り同時に行われます。
|
Re: 並列処理について。
投稿者 : hoge-(ppp02.kake.info.waseda.ac.jp)
- 2003/02/24(Mon) 12:28
No.2721
|
|
|
|
その2:コンストラクタを定義 コンストラクタ(初期化用メソッド)を使うともっと短く書くことができます。 たとえば、Teki.tonyu において次のようにコンストラクタを定義します。
extends SpriteChar; // これは予め書いてあるもの constructor Teki(x,y,p,l,a) { super(x,y,p); life=l;attack=a; } それ以降の処理
この場合、appearメソッドは次のようになります: appear (new Teki(x,y,p,5,4)); // その1と同等の処理
|
Re: 並列処理について。
投稿者 : そいそい(b196057.usr.starcat.ne.jp)
- 2003/02/24(Mon) 14:13
No.2722
|
|
|
|
なるほど、コンストラクタは継承の延長のような感じですね。 古い知識では、同名ファンクション定義はいけない物と思いがちで、 なかなか発想できません(苦笑)。 自分の問題はNo2720での指摘でして、その定義がupdate後になってしまう事に有るようです。
調べてみましたら、最初から画面においてあるオブジェクトのみ発生 していましたので、1クッション置いて、別タスクでappearを かけて初期化するようにします。 体力メーターのように簡単なオブジェクトに while(1){ update(); } と記載してしまい、なかなか難しそうです。 まずは、updateがすぐに発生しないよう配慮します。
|
Re: 並列処理について。
投稿者 : hoge-(ppp02.kake.info.waseda.ac.jp)
- 2003/02/24(Mon) 14:50
No.2724
|
|
|
|
なお、どのオブジェクトがどの順で処理するかは、オブジェクトインスペクタの「一覧」ボタンを押して開くウィンドウでも設定できます。ただし設計中のオブジェクトのみです。appearで出現させたものは順番の後ろのほうへ追加されます。また、waitを実行すると順番が狂います
確実に初期化するにはご指摘のとおりupdateを1クッションはさみます: 例
// ---A.tonyu extends SpriteChar; $b.target=x; while (1) { : } // ---B.tonyu ($B) extends SpriteChar; update( ); // Aがtargetを設定するまで1クッションおく while (1) { if (x>target) x--; : }
|
Re: 並列処理について。
投稿者 : そいそい(b196057.usr.starcat.ne.jp)
- 2003/02/24(Mon) 15:10
No.2725
|
|
|
|
素早い回答をありがとうございます。 しかしソースは!おお!
updateを遅らせるのでは無く、updateしてほしいオブジェクトに先に1つ入れて置くという、まさに発想の転換です。
感激しました。この方法で行きます。
|
Re: 並列処理について。
投稿者 : そいそい(b196057.usr.starcat.ne.jp)
- 2003/02/24(Mon) 16:17
No.2728
|
|
|
|
2728.lzh
う〜ん、据え置きオブジェクトをやめて、updateを入れてみました。 しかしながら、参照に失敗するというエラーになってしまいます。
汚いソースですが、参考に添付します。 申し訳ございません。 見る部分は
monitor:タイマーとappear呼び出し DM1〜DM6:呼び出されるオブジェクト
bossdm:上記オブジェクト監視。
$dem変数で動きを制御しています。
必要が有れば正常に動く(オブジェクト削除前)のソースもおつけします。
|
Re: 並列処理について。
投稿者 : そいそい(b196057.usr.starcat.ne.jp)
- 2003/02/24(Mon) 16:28
No.2729
|
|
|
|
2729.lzh
う〜ん、据え置きオブジェクトをやめて、updateを入れてみました。 しかしながら、参照に失敗するというエラーになってしまいます。
汚いソースですが、参考に添付します。 申し訳ございません。 見る部分は
monitor:タイマーとappear呼び出し DM1〜DM6:呼び出されるオブジェクト
bossdm:上記オブジェクト監視。
$dem変数で動きを制御しています。
必要が有れば正常に動く(オブジェクト削除前)のソースもおつけします。
|
|