>いっしょにつっこむべきだと思う?
思う。
関数をリストにつっこんでおけば放置しておいても1ループに一度は必ず実行される
ってのが基本的なタスクシステムのキモの一つなわけで
実体の有無(画面に表示されるかどうかって意味だよな?)はあまり関係ないんだな。
ただ、当たり判定や重力計算を独自のタスクで組むと、それを適用したいキャラを
リストからいちいち探さなくちゃいけないしあまり効率がいいとは言えない。
関数の内容によってリストを別けるとか解決策はいくらでもあるが
そこまでして使うものか?とも思う。
>>925 欲張りだから最初から失敗が嫌
とか言っても一発で成功したこと一度もない・・・
コンパイルの度に”必ず”ひとつはエラー出す
タスクとしてリストにぶっ込みたいんだけど色々問題があって
>>927 「リストからいちいち探さなくちゃいけない」
この辺でずっと悩んでた
タスクリストの一番最初に入れるのはもちろん無理だし
一番最後に入れるとタスクリスト内のデータをまた最初から検索しなおさなくちゃならないから単純に処理2倍だし
各タスクの行動関数に組み込むと再利用性がうんこ
タスクリストに入れて問題があるんだったら入れなきゃいいだろ。
なんでタスクリストに入れたいの?
「タスク」とか「タスクリスト」の意味が曖昧なまま話しても無駄っぽいから
もっと実のある話にしたければ次スレ立てて
「タスクで組む」の意味を具体的にしてから話すことだね。
タスクじゃなくてオブジェクトとして素直に考え方が楽そうだな…
重力計算クラスはどんな機能が必要で
外からはどんなインターフェースが必要なのか。
>>928 実行順優先度とか設けてないの?
入れるなら最初か最後でしょ。
優先度ごとにリストを設けておけば総なめしなくても済むし
一本のリストで全てをまかなおうと考えない方がいいよ。
>それを適用したいキャラをリストからいちいち探さなくちゃいけない
適応したい処理の対象のリストを、フレーム毎に作成すればいいんじゃね?
検索の約一兆倍スマートでクールだと思うよ??(当社調べ)
流れが読めないならROMってればいいと思うよ。
何度みても笑える。
笑いどころがどこかわからん。
プログラマのとこか?
2Dの当たり判定についでなんですが、
1pixelずつの移動であれば移動する場所の座標で当たり判定をして
ヒットしていれば移動しない、ヒットしていなければ1pixel進むでいいですよね。
けど、通常の3倍で進むような場合は3pixel進んだ場所の座標で当たり判定をして
ヒットしていれば移動しない、ヒットしていなければ3pixel進むではよろしくないです。
3pixelは進めなくても2pixelは進める可能性があるからですが、
こういう通常の3倍で進む場合は1pixel進む処理をx3してやるのが普通なんでしょうか?
それともほかに良い方法がありますか?
>>937 真っ当に考えれば、n pixel進むためには、
n 回ループで 1 pixel ずつ判定するしか方法はないと思われる。
状況によっては、先に n pixel進めてみて
移動不可だったら (n-1) pixelを試すという逆順のほうが効率がいいかも試練が。
当たっていたら
何ピクセル埋まったかを計算してその分戻せば?
跳ね返る時はかなりいい加減でもごまかせるけど
ぴったり止まるなら>939が丁寧な方法で>938が簡易だな。
>>938-940 どうもです。
>>939 まさにそれですね。
ジャンプして天井にぶつかったり
落下して地面に着地した時、
キャラクターの移動速度を上げたときに
挙動が変だったのがこれで直りそうです。thx。
>>936 いや全部。 仕事でプログラマとか実務側の方をやってると
全部がだいたいそのとおりなので笑える。
笑えないのは現在進行形の場合だな。
うむ
文字をゆっくり表示させようと思ってるんですが、SetTimer()で時間をとってくる方法しか思いつきません。他に方法はないのですか?
なぜ他の方法を探そうと思ったのか、現状の方法でどのような問題があるのかを説明する方が先だろう。
timeGetTime
本屋寄ったらエフェクト関連の本が二冊あった
けど買えなかったorz
マップ読み込みがわかんね・・・
縦,横,チップサイズ \n
番号,番号,番号,番号,番号 \n
番号,番号,番号……
とかなってるマップの読み込みをスマートにできないかな
暗号化とかもまた意味不明
スマート?
とってもスマートなのだが。
暗号化?
ぐぐれよ
>>948 それは私のよりスマートそう。
私のもっといい加減だもん。
俺のよりスマート。
いやfgetcとかforとfscanfを組み合わせてるんだけどどうしても分岐が出てくるしこれは見てて嫌だなって
バイナリにしちゃえば?
それだ
で次スレ
>>953 早速やってみた
変換ツール作りの段階でコンパイラにコンパイルエラー連射されると困る
テキストファイルをバイナリに変換するのと
バイナリをテキストに変換するのを作るのに2時間かかった
マップ以前に今後について考える必要があるかも
そういうツールをちゃちゃっと作るならスクリプト言語が楽でいいぞ。
例えばperlで
>>948のCSVをバイナリ化するならこう書ける。
open(IN, 'map.txt');
while (<IN>) {
chomp($_);
my @linedata = split(/,/, $_);
foreach my $data (@linedata) {
$out .= pack("s", int($data));
}
}
close(IN);
open(OUT, '>map.dat');
binmode OUT;
print OUT $out;
close(OUT);
>>957 短いなぁ
ちょっとそっち関連の勉強でもしてみる
そして、とうとう彼はスクリプト世界から帰ってきませんでした。
ttp://dream.my-sv.net/upload/src/up0144.zip タスク構築していろいろやってみたんだけど、デバッグ中にタスク削除辺りでエラーが出る
WinMain.cpp - エントリ。タスクやキャラクラスの宣言
CTask.cpp - タスクシステム
CChar.cpp - キャラクラス。タスククラスを継承。全キャラクタの継承元クラス。
CUser.cpp - 自キャラ管理。爆発クラスの呼び出し。 キャラクラス派生
CExplosion.cpp - 爆発クラス。一定時間経過で開放。
CRenderer.cpp - DirectX
ChipPoint.h - テクスチャ座標配列
クラスCUserがカーソルキーによる移動時に一定間隔でCExplosionをnewしてタスクリストに追加、
CExplosionが一定フレーム爆発し続ければメンバ関数Proc内で
CTask::TaskKill(TASK* t)にthisポインタ渡して開放待ち状態に移行
TaskKill内では渡されたタスクのタスク用デストラクタを実行してそのタスクのStatusメンバにステータス列挙体のSTATUS_KILLを詰め込む
その後にCTask::TaskExecution()を実行してTASK_KILLのタスクをCTask::TaskDelete(TASK* t)に渡して開放したいんだけど、
そのTaskExecution()内のswitch文でTASK::Statusを参照するとエラーが出る
長々長々とスマソ。ソースは「とりあえずやってみっか」的でかなり雑
>960
で、何だ?
「暇人の皆さん、このとりあえずやってみっか的ソースをデバッグしやがれ。」
って事か?
>>960 (1)(2)(3)の順に読んでね、お兄ちゃん。
for(TASK* i=Top->Next; i!=End; i=i->Next) ← (2) 次のi->Nextは開放後の不定値になり
{
(中略)
switch(i->Status) ← (3) そして、どかーん☆
{
case STATUS_KILL:
TaskDelete(i); ←(1) ここでiの実体を開放した場合、
break;
};
}
964 :
960:2006/03/11(土) 00:49:40 ID:ojp9Bp1N
>>961-962 すまんかった。
>>963 おお、なるほど
オブジェクト側で何かやらかしてるのかと思ってたから
タスク実行ループは疑いもしなかった
実行できました。ありがとうございます
965 :
名前は開発中のものです。:2006/03/11(土) 01:09:54 ID:xs4HFJgg
いいなあ、ロリロリの妹に手取り足取り教えてもらえて
ソースレビューはする方もされる方も勉強になるかと。
なんでもかんでもタスクタスクって、あなた達はVOWのファンなのですか?
ゲームのデータ(マップやキャラクタのデータなど)の構造変更時に旧ファイルとの互換性を楽にもたせられる方法はありませんか?
例えば
class map_data
{
public:
BYTE chip_x,chip_y;//チップのインデックス
};
というクラスがあり、これをそのままサイズ分ファイルに書き込みます。
このクラスはマップファイル用に使われるので実際はマップの編集作業に大変時間を取られます。
しかし、このクラスに何かの変数を追加する必要が生じまして
class map_data
{
public:
BYTE chip_x,chip_y;//チップのインデックス
char flag[4];//
};
こうなったとすると、クラスのサイズの違いから読み込み位置にズレが生じてしまい、
前回頑張って作ったマップのデータが意味の無いものになってしまいます。
これを回避するために上手い方法は無いでしょうか。
今はファイル読み込み関数を旧式、書き込み関数だけを新しいものにして、
一旦新形式でセーブしてから読み込み関数を新形式にする方法と、
あらかじめchar reserved[1000]という余分なスペースを確保し、
追加分の変数のサイズだけ引いていくという方法でやっていますが面倒です。
バージョンでも持てばいいじゃん
答えてやった奴にはお礼にエロ画像でも見せてやれよ
オフセットじゃなくて名前でそれぞれのパラメタを取れるようにしたらどーなのよ?
プロパティシート?プロパティテーブル?プロパティセット?そんな感じのやつ。
それができないようなデータならreservedを設けるしかないな!
チャンク使って、データ単位で分類わけするべし。
いま時だとXMLとかでもいいかもしれず。