- 1 名前:名前は開発中のものです。 [2007/11/02(金) 01:53:08 ID:M/fkomaJ]
- C++の勉強をかねてFCのドラクエっぽい感じのRPGを作りたいんです。
しょっぱなからつまずいています、知恵を貸してください。 <<使用しているもの>> BorlandC++ DXライブラリ ドラクエフォント DXライブラリはここ ttp://homepage2.nifty.com/natupaji/DxLib/index.html ドラクエフォントはここ ttp://slime4.hp.infoseek.co.jp/font/font.html
- 543 名前:名前は開発中のものです。 mailto:sage [2008/02/18(月) 00:36:07 ID:08DD/JC7]
- 有名な哲学者も文字なんか使うと脳が退化するとか言ってたからねw
- 544 名前:名前は開発中のものです。 mailto:sage [2008/02/18(月) 01:08:34 ID:vUYQTiug]
- 小説読まずに漫画ばかり見てると馬鹿になるとも言われてたなw
これについてだけは当たってなくもない気がするが
- 545 名前:名前は開発中のものです。 mailto:sage [2008/02/18(月) 01:14:50 ID:UpTmLwcj]
- VCのインテリセンスはVBやVC#が神すぎるからしょぼく見えるんだよね
- 546 名前:1 [2008/02/20(水) 08:18:05 ID:V7ld5O9y]
- 現在新機能実装中なわけですが、作業が難航してます。
FieldMapのMapObj[i]をField.party->iventFlag[i]に対応させて表示/非表示を切り替えたかったのですが FieldMapクラスで表示/非表示を切り替えさせようと思ったけど check(PlayerParty *party) として引数にポインタを取るか あらかじめFieldMapクラスにポインタ変数を格納しておくか PlayerPartyクラスをグローバル化してしまうか 悩んでます。 どっちにしてもFieldMapクラスにPlayerPartyクラスをヘッダを読み込ませないとだめですよね?
- 547 名前:名前は開発中のものです。 mailto:sage [2008/02/20(水) 10:01:13 ID:eusdqHEV]
- iventじゃなくてeventにしたほうが
- 548 名前:名前は開発中のものです。 mailto:sage [2008/02/20(水) 18:18:28 ID:a8QXZ2ge]
- いくらイージス艦のレーダーが凄いからって
戦時でもないのに常に最高の警戒レベルで巡航していることなんか有り得ないわけで…
- 549 名前:名前は開発中のものです。 mailto:sage [2008/02/20(水) 18:24:11 ID:V7EDVY0P]
- そうは言ってもあれじゃ中国や朝鮮が船で攻めて来たら何もできずに沈められちゃうよ
- 550 名前:名前は開発中のものです。 mailto:sage [2008/02/21(木) 02:26:57 ID:Wf5Zb2+X]
- 漁船と衝突してイージス艦が沈んだら面白かったのにw
- 551 名前:名前は開発中のものです。 mailto:sage [2008/02/21(木) 04:48:12 ID:vbUxjJ5P]
- 最強の楯は殴るのにも最強でした
- 552 名前:名前は開発中のものです。 mailto:sage [2008/02/21(木) 07:03:01 ID:R8XN2vkw]
- デュエル バスター ブリッツ
- 553 名前:名前は開発中のものです。 mailto:sage [2008/02/21(木) 20:21:58 ID:fJ0DkPYJ]
- >>546
アクセサ書くってのはどうだい? ソース見てないから最適解かどうかは知らんが。
- 554 名前:名前は開発中のものです。 mailto:sage [2008/02/21(木) 21:52:45 ID:iy0K8pSX]
- class PlayerParty;
class FieldMap { check(PlayerParty *party); いろいろ… }; でいいんじゃないか。
- 555 名前:名前は開発中のものです。 mailto:sage [2008/02/21(木) 21:53:00 ID:0C4L3kC+]
- マップオブジェクトの表示制御に必要なのは
パーティ情報じゃなくて、イベントの状態なんだから わざわざパーティ情報の扱いを考慮するんじゃなくて フィールドマップはイベント情報だけ受け取るべきじゃね? そうでないと、 フィールドオブジェクトとパーティ情報の結合度が強くなり過ぎて ちょっと気持ち悪い感じがする (ドラクエだったら、パーティ情報 = フィールドの状態 で構わないかもしれないけどね・・・)
- 556 名前:1 [2008/02/21(木) 23:28:46 ID:9ZwlGJuJ]
- たしかに あんまり依存関係を強くしたくないのはありますね。
イメージ的にこうやってFieldクラスがFieldMapクラスとPlyartPartyクラスを見て仲介するようにしたかったのかも。 Field class ┌─────┴─────┐ PlayerParty class FieldMap class │ MapObject class ただしPlayerPartyクラスにイベントのフラグが入っていたため FieldMapの中にあるMapObjectクラスから、何番のフラグがたっているかは見えない、っていうのが問題でした。 こうなると Fieldクラスで if(PlayerParty.getIventFlag(FieldMap.MapObject.getEventFlag())){ //以下普通に処理 みたいな感じに処理するふうになるのかな?
- 557 名前:1 [2008/02/21(木) 23:29:37 ID:9ZwlGJuJ]
- あと
× ivent ○ event は、めっちゃ恥ずかしくて死にたくなった。
- 558 名前:名前は開発中のものです。 mailto:sage [2008/02/22(金) 00:45:22 ID:/6yYYp4N]
- ええー
- 559 名前:名前は開発中のものです。 mailto:sage [2008/02/22(金) 12:19:02 ID:gAchg6ey]
- >FieldMap.MapObject.getEventFlag()
POD型ではないのにpublicなメンバ変数があるのは変だと思う。 インスタンスの利用者が階層を深く掘るのが当たり前な実装はOOPじゃないし。 かといって、万能クラスを作るのもおかしい話だけど・・・ あとインスタンスがPascal記法ってどうなの? とここまで書いてからソース読んでみた。 いくら擬似コードでも実態とかけ離れすぎだろww publicになってないし、インスタンスは小文字始まりの名前になってるし・・・ むしろ気になったのは ・コンストラクタで初期化じゃなく代入をしてる ・あちこちにハードコーディングしてる ・継承しててもデストラクタがvirtualじゃない ・enumを使わず#define使ってる ・関数に対するコメントが無い(doxygenやxml code commentのような) ・ローカル変数にポインタか参照おけばいいのに"character[ci]->getDs()->"のような記述が沢山並んでいる ・あちこちで動的なメモリ確保を行っているにも関わらずスマートポインタを使っていない ・警告レベルが最大じゃない こういうところ
- 560 名前:名前は開発中のものです。 mailto:sage [2008/02/22(金) 14:30:33 ID:ik+aPlRF]
- >>559
まぁ、>>1はC++初心者のようだからな。 C++の標準記法を知らなくても不思議じゃない。 補足しておこう。 >・コンストラクタで初期化じゃなく代入をしてる 多分>>1は初期化リストを知らない。 初期化リストのほうが分かりやすいし、constな変数、参照は これでしか初期化できない(代入できないため)。 >・継承しててもデストラクタがvirtualじゃない デストラクタがvirtualじゃないと、 基底クラスのポインタに派生クラスのポインタを代入して ポリモ−フィズムをしているとき、 オブジェクトを破棄するときに派生クラスのデストラクタが呼ばれない。 >・enumを使わず#define使ってる #defineは時代遅れ。コンパイラが処理していないので。 できればenumやconstを使う。 >・ローカル変数にポインタか参照おけばいいのに"character[ci]->getDs()->"のような記述が沢山並んでいる ローカル変数にポインタか参照を代入して、 hoge = character[ci]->getDs(); hoge->hoge(); のように呼び出したほうが読みやすい(し、関数を不必要に呼ばないので高速) ということを言っている。
- 561 名前:名前は開発中のものです。 [2008/02/22(金) 14:33:59 ID:ik+aPlRF]
- 続き。
>・あちこちで動的なメモリ確保を行っているにも関わらずスマートポインタを使っていない 動的メモリ確保は解放し忘れてしまうので、 参照が無くなった時に自動的に解放してくれる boost::smart_ptrのようなスマートポインタを使うのが基本。 標準のスマートポインタにはstd::auto_ptrがあるが、使い方が特殊でオススメしない。 使えるところなら、std::vectorを使うのも良い。 >・警告レベルが最大じゃない 警告を無視するのはバグの元。 むしろ、「もっと俺に警告をくれ!!」のような勢いで。
- 562 名前:名前は開発中のものです。 mailto:sage [2008/02/22(金) 20:29:49 ID:zYdRz8UL]
- あんまり一気にダメ出ししちゃうと はかせタンが凹んじゃうから
週に1個ほど、ちょいダメ出しにしといてあげて オレはそうしてる まぁ、はかせタンの向上心なら幾らダメ出ししても学習しそうだけど
- 563 名前:名前は開発中のものです。 mailto:sage [2008/02/22(金) 20:38:44 ID:HEZBKFdo]
- ダメ出しでも実力自慢じゃなくフォロー入ってるあたり良スレ
- 564 名前:559 mailto:sage [2008/02/22(金) 21:37:02 ID:sRPpWiqL]
- ソースはそこそこ綺麗だったよ
このスレに載る疑似コードがいつもショボかったから、upされてるのも当然…と思ってたんで意外だった >>562 この先原因不明のバグでモチベーションダウンさせるよりはいいかなと思った。 少し反省している。
- 565 名前:1 [2008/02/22(金) 22:55:08 ID:OojD/ESp]
- みんなのヌクモリティで前がにじんで見えない…
みんなありがと ダメだしが多いのは、へこまないのは嘘ですけど 消化しきるのに時間がかかるので、レスが遅くなっちゃって申し訳ない気持ちが強いです。Orz ご飯食べてお風呂入って続きがんばります! みんな ほんとに ありがとう! 追伸 またアク禁の食らいました。 なんでこんなに喰らうんだろう? 普通そんなもん?
- 566 名前:名前は開発中のものです。 mailto:sage [2008/02/23(土) 02:05:15 ID:bnLD25M9]
- >>565
俺も最近くらった。一日でとけたけど。
- 567 名前:名前は開発中のものです。 mailto:sage [2008/02/23(土) 06:56:35 ID:HSvKNA24]
- なんだ、DQIをつくってるのかと思ったらIIIか。
また大変なところを選んだなあ。
- 568 名前:名前は開発中のものです。 mailto:sage [2008/02/23(土) 08:37:01 ID:N04xmAge]
- >>1 に影響されました
僕はDQIIをC#で作ろうと思います!
- 569 名前:名前は開発中のものです。 mailto:sage [2008/02/23(土) 12:16:38 ID:OuVO6QWF]
- じゃ 俺はDQ4にするか
- 570 名前:名前は開発中のものです。 mailto:sage [2008/02/23(土) 12:57:51 ID:x1Ouesp5]
- 俺はMASMでFF11を作るぜ!!
- 571 名前:名前は開発中のものです。 mailto:sage [2008/02/23(土) 13:11:06 ID:F+CAkEqg]
- じゃおれDQ1をC++で
- 572 名前:名前は開発中のものです。 mailto:sage [2008/02/23(土) 14:18:01 ID:Oy3gPfcf]
- 果たして何人生き残れるのか・・・
- 573 名前:名前は開発中のものです。 mailto:sage [2008/02/23(土) 14:39:52 ID:CN8IHKwV]
- アセは死ねるだろw
- 574 名前:名前は開発中のものです。 mailto:sage [2008/02/23(土) 17:13:08 ID:yJaKrN6D]
- FCのドラクエは殆どアセンブラだろうが…FF11と言う所に大物の器を感じるぜ。
- 575 名前:名前は開発中のものです。 mailto:sage [2008/02/23(土) 19:39:11 ID:5sJEeE+q]
- 俺は綾織で
- 576 名前:名前は開発中のものです。 mailto:sage [2008/02/23(土) 23:32:45 ID:3EN2w25Y]
- C++から汗のソース作れるけどね。
- 577 名前:名前は開発中のものです。 mailto:sage [2008/02/24(日) 01:02:43 ID:l0RmX92h]
- 568です、2008は持ってないので、VS2005 C# Framework2.0でやります!
DirectDrawはとりあえず使わないで、やります 動くものが出来たら別スレを立て・・・るまでもないですね、 適当にうpしていきます >>1さんに負けずにやっていきたいと思います
- 578 名前:名前は開発中のものです。 mailto:sage [2008/02/24(日) 03:56:21 ID:nHWrFw/U]
- >>576
全然意味合いが異なるのに何故得意気になって言ってるんだ? キモイヨー
- 579 名前:名前は開発中のものです。 mailto:sage [2008/02/24(日) 09:09:13 ID:ATsuTWws]
- >>576
C++コンパイラの仕組みを理解して無いだろ。 作れないコンパイラがあったら教えて欲しいわ。
- 580 名前:名前は開発中のものです。 mailto:sage [2008/02/24(日) 09:55:26 ID:lvcDUo5f]
- if(>>576)
{ std::cout << "作れないコンパイラがないなら正しいだろ。" << std::endl; }
- 581 名前:名前は開発中のものです。 mailto:sage [2008/02/24(日) 10:39:19 ID:pf6g1kUn]
- ソース見たよ。
他の人が言うように、初心者にしては上出来。 動くとやっぱり感動するね。 >556 とりあえずそれがいいんじゃないかな。ベストな解かどうかわからないけど、 グローバルにするよりは確実にbetter。 全体に関していえるけど、変数のスコープをできるだけ狭くしたほうがいい。 理由はバグを減らすため。またデバッグを楽にするため。例えばある変数の値がおかしくなっていたとき、 スコープが狭いと調べる範囲が少なくてすむ。広いと大変。 なおローカル変数、非staticメンバ変数、staticメンパ変数、グローバル変数 の順にスコープが広くなる。 グローバル変数はよっぽどのことがなければ使わないこと。 class global{ public: static std::string msg; static char c[64]; }; これは使用している各クラスで定義できないの?
- 582 名前:581 mailto:sage [2008/02/24(日) 10:47:13 ID:pf6g1kUn]
- あとデバッガはちゃんと使えてる?
以下のようにすると、VSでデバッグ時に画面下の「出力」欄に出力される。 要所要所で変数の値とかを出力すると楽だよ。 #ifdef _DEBUG // デバッグ時のみ出力 int value = 3; char buf[128]; sprintf(buf, "値=%d\n", value); OutputDebugString(buf); // デバッグ出力するWin32API #endif //出力欄 //値=3
- 583 名前:581 mailto:sage [2008/02/24(日) 10:54:51 ID:pf6g1kUn]
- >これは使用している各クラスで定義できないの?
例えば以下の部分ではローカル変数で十分だよね。多分。 void BattleField::battleProcess() { global::msg = party->getMember(0)->getName(); global::msg += "たちは にげだした!"; coms.getMsgCmd()->setMsg(global::msg); }
- 584 名前:1 [2008/02/25(月) 20:20:58 ID:D9lkRrNk]
- 土日は風邪で寝込んでました。
今日もこれから寝込むと思います。 目の前が見えなくなったのは涙じゃなくて熱の所為だったのかもしれません(ぁ 寝付けないときに少しずつ手をつけようと思ったんだけど 自分が何をやってるのかわからなくなってしまう感じで作業が進みませんでした。 一緒になにか作ってみるって名乗りを上げてくれた方、一緒にがんばりませう。 やっぱりライバルがいたほうがモチベーションあがるしね。
- 585 名前:名前は開発中のものです。 mailto:sage [2008/02/25(月) 23:38:57 ID:sR23oxXi]
- >>584
お大事に!!
- 586 名前:名前は開発中のものです。 mailto:sage [2008/02/25(月) 23:57:44 ID:8s3HJfM7]
- >>584
本当は、ロジックを真似した方が早いと思うんですが、 まったく同じじゃ意味がないですし、言語も違うことですから、 まずは C#でどれだけ出来るのか、ってことを意識しつつ、やっていこうかなと思ってます 物理層がやることって同じなんですけど、今は、FC DQII をプレイして、動きを調べています 主に、ビルダーとC#で、VC++はわかりませんが、よろしくお願いします
- 587 名前:名前は開発中のものです。 mailto:sage [2008/02/26(火) 02:39:50 ID:4hK7dCf/]
- >>584
お体お大事に 僕も今年の初めごろインフルエンザにかかって数日寝込みましてね 体調がすぐれないときは難しいことを考えるとgdgdになるので 回復に努めたほうがいいと思う… 寝付けないときは僕はようつべやニコ動を見てましたね 最近はゲームのプレイ画面などをキャプチャしてる人も多くて 検索すると同人ゲームや自作ゲーム、制作講座、開発過程なども ちらほらとアップロードされてるみたいです 手軽に見られてなかなか興味深いです
- 588 名前:名前は開発中のものです。 mailto:sage [2008/02/26(火) 14:11:57 ID:aeOOlTFX]
- やばい、俺スレ違いすぎる・・・
二年間学校でcとjavaを習って中途半端に覚えて RPG作ろうと思った俺が馬鹿だったぜ。 あとapiのサイト見てウィンドウの出し方とか ちょっとづつ勉強してるが大半イミフだぜ。
- 589 名前:名前は開発中のものです。 mailto:sage [2008/02/26(火) 15:41:39 ID:DQfrVq4A]
- プラットフォームAPI使うより、簡単なライブラリ探して作ったら?
- 590 名前:名前は開発中のものです。 mailto:sage [2008/02/26(火) 16:20:44 ID:MEOj2U2m]
- >>589
ID:DQおめ
- 591 名前:名前は開発中のものです。 mailto:sage [2008/02/26(火) 20:10:21 ID:DQfrVq4A]
- あり
記念に俺もDQ作るかなw
- 592 名前:名前は開発中のものです。 mailto:sage [2008/02/26(火) 22:07:55 ID:HLcSYJXY]
- MDXあぼーんされたしGDI+だとBitBltすらないからなー。
XNAに逃げるか、DllImport連呼か、C++/CLIか。
- 593 名前:名前は開発中のものです。 mailto:sage [2008/02/26(火) 22:57:31 ID:gUk7N6wJ]
- それでもまだ非C/C++の中では恵まれてるけどな
自分でラッパー書かなくてもSlimDX(非公式MDX)とかSDL.NETとか探せばいろいろあるし
- 594 名前:オワンワン mailto:sage [2008/02/26(火) 23:02:50 ID:CncrBCpj]
- ライバルがきましたよ。
ぼくはね、関数とかクラスとかポインタとか構造体とか 仮想関数とかローカル変数とかを一切使わないでゲームを作ります。 必要不可欠でないことをがんばっている1さんとは好対照ですね。 ま、さ、に、ライボー。 更新してないんでリンクは貼りませんが、進展したら貼りにきますよ。 よろしこっ。ぼく、おじさんだけど、、、なかよくしてね。ぶちゅー。 おれの、おれの屍をこえていけよ、わかうどよ。ふっふっふ。 「未来の人よ 僕を思い出してくれ 僕は 王者の滅びる時代に生きていた」 「未来の人よ 僕を崇めたたえよ 僕は あなたたちよりも未来の時代を生きていた」 だれだ!? タキシードのロングハットのコケティッシュな、、、ぼく!? 「不可思議という点において、この世界の不可解という点において、みな平等ではないかね」 、、、 「形而上の話をしてるわけではありません。形而下において、、、ふふふ、 僕は何百年先を生きているんだろう!ふあははー」 、、、 「ぼくはぼくはぼくは、、いや、結果がすべてか、結果をだせてない僕は、 まだ、天才ではないか、、、」 、、、 「はぁ、遠いね、境地は遠いね。凡人とは違って僕には見えているが、遠い」
- 595 名前:名前は開発中のものです。 mailto:sage [2008/02/26(火) 23:22:32 ID:oa0uM2zA]
- >>594ふむふむ、なるほど、ほほぉ〜。それでそれで!?
- 596 名前:名前は開発中のものです。 mailto:sage [2008/02/28(木) 19:08:36 ID:SwMCkkQw]
- いちはにげだした。
しかし(ry
- 597 名前:1 [2008/02/29(金) 00:27:49 ID:PbvqMElj]
- まだ全部直ったわけじゃないけど報告age
とりあえずdefineはconstに直しました。 デストラクタも仮想関数に変えました。(なんか上手く動かないって悩んでたことがあったけどこれが原因だったのか? コメントもこれからなるべくつけていきたいと思います。(全部つける前に心が折れそうです。 初期化リストも一箇所だけやってみました。 実はこれもっと先に知っておきたかったことだったかも。 引数無しのコンストラクタと引数ありのコンストラクタの二つ用意しなくちゃいけないって悩んでたんですよ。Orz 親クラスのコンストラクタも明示的に呼び出したいと思ってたし…。 ま、あとの祭りなんですが。 Orz スマートポインタ、っていうかboostなんですが、 じつは<>の意味が分からなくて手をつけられなかったんですよ。 <>でぐぐるわけにもいかず途方にくれていたんですが ようやくクラステンプレートと言うものだったことが判明。 コンテナクラスもなんとなくは理解できたのですが 今から組み込むのは結構大変そうだなぁ… とりあえず多重deleteはNULL代入で回避できそうっていうのは分かりましたが、 del忘れは回避できないですよね。 でもハンドルの開放し忘れもおんなじような問題がおこるので、 ある程度は仕方がないのかも、と割り切ってます。(いや、ダメだろ ***************************************************************** イベントアイテムを使ってイベントを起動できるようになりました。 アリアハンの右の女にゴールドオーブを使うとイベント起動します。 現状、はなす、とアイテム使用の両方同時に起動スイッチに指定することはできますが 起動方法によって起きるイベントを別々にすることができません。 …あ、警告レベル変え忘れてたOrz
- 598 名前:名前は開発中のものです。 [2008/02/29(金) 00:33:14 ID:PbvqMElj]
- おまけにURLも貼り忘れた… Orz
シャワー浴びてくるOrz p://sakuratan.ddo.jp/uploader/source/date72377.lzh
- 599 名前:名前は開発中のものです。 mailto:sage [2008/02/29(金) 00:40:35 ID:cTbpZwm+]
- :p
- 600 名前:名前は開発中のものです。 mailto:sage [2008/02/29(金) 11:44:13 ID:DrPXVtO6]
- むしろあれだけのコードをよくコメント無しでやってられたな。
今の俺はコメントだらけだよ
- 601 名前:名前は開発中のものです。 mailto:sage [2008/02/29(金) 12:28:22 ID:sp+Hir2Y]
- まだ11月に作り始めたばかりだから
>>1の頭の中にコードが入っているのだろう。 ただ、これからプログラムはどんどん複雑になっていくので、 コメントを入れるようになったのは良かったと思う。
- 602 名前:名前は開発中のものです。 mailto:sage [2008/02/29(金) 14:36:59 ID:jGuhamLn]
- 自分のソース見てるとどうでもいいコメントが多くて困る
- 603 名前:名前は開発中のものです。 mailto:sage [2008/02/29(金) 16:14:12 ID:l3/kMfiZ]
- MDXあぼーんなのか?
XNAはWinProcもフックできないし、 使い難くてしょうがないよな、、
- 604 名前:名前は開発中のものです。 mailto:sage [2008/02/29(金) 18:55:48 ID:P7uRmJkm]
- >>603
MDX2.0はベータの段階で消滅済み。 MDX1.1のランタイムは残ってるけどサンプルはなくなった。
- 605 名前:名前は開発中のものです。 mailto:sage [2008/03/01(土) 00:45:34 ID:w3ZGIR9q]
- >>603
SlimDX使え つか流れ読まずにスレ違いって…
- 606 名前:603 mailto:sage [2008/03/01(土) 01:08:55 ID:PBLPyAh9]
- スマソ、吊ってくる
- 607 名前:1 [2008/03/05(水) 00:07:57 ID:XbOvO3YX]
- 久しぶりのソースうpです。
tp://sakuratan.ddo.jp/uploader/source/date73110.lzh *街から出ちゃうと入れないかも。 入り口に立っている女に「はなす」かゴールドオーブを「つかう」とイベントが起動します。 話したときとアイテムを使ったときでイベントを分岐できて アイテムを使ったときにイベントフラグをオンにして それに連動してイベントが消えるようになりました。
- 608 名前:名前は開発中のものです。 mailto:sage [2008/03/05(水) 19:39:27 ID:/lpfwC1N]
- ここまで整理もせず手広く機能増やし続けられるのはある意味凄い
- 609 名前:名前は開発中のものです。 mailto:sage [2008/03/05(水) 22:09:51 ID:L493nIER]
- >>1さんハァハァ
- 610 名前:名前は開発中のものです。 mailto:sage [2008/03/06(木) 00:31:36 ID:RMi8Rb30]
- 真似して作ってみたがタイトル表示まで出来たら秋田
- 611 名前:名前は開発中のものです。 mailto:sage [2008/03/06(木) 00:58:35 ID:7dwVQ00B]
- >>610
DQ3のタイトル画面なら文字だけじゃねーかw
- 612 名前:オワン mailto:sage [2008/03/06(木) 03:01:49 ID:+3hA2EkN]
- 報告忘れてました。更新しました。インデントがおかしいのは
VC++のせいです。 ogawapc.myhome.cx/gameprogu2.htm
- 613 名前:名前は開発中のものです。 mailto:sage [2008/03/06(木) 07:41:01 ID:cGcDTNaF]
- <code></code>で囲んで
タブをスペース四つに置換すれば正常に表示されるはずなんだが。 おめーがタブとスペースごちゃ混ぜで打ってるのが原因だ。
- 614 名前:名前は開発中のものです。 mailto:sage [2008/03/06(木) 07:53:07 ID:cGcDTNaF]
- <pre class="code"></pre>のほうがいいか。
- 615 名前:名前は開発中のものです。 mailto:sage [2008/03/06(木) 15:15:17 ID:eBnb1Mw9]
- >>612
本人かどうかは知らんがもうやめて そんな糞コード真に受ける奴が増えたら世の中に良くない
- 616 名前:名前は開発中のものです。 mailto:sage [2008/03/06(木) 17:19:40 ID:htNDRL9Y]
- VCカワイソス
- 617 名前:1 [2008/03/07(金) 00:57:17 ID:rq1yy0In]
- 整理はちょっとずつ… じゃダメですよね Orz
実装を進めていくうちにコメントつけたり、無駄なコードを減らしたりはしてるんですがまだまだです。 せっかく見てくれる人がいるんだからもっと見やすくしなくちゃいけないのは分かってるつもりなんですが モチベーションと時間が… Orz static なメンバ変数を初期化で分からないことがありまして。 関数の戻り値を初期値でセットしたいんですが //DQI..hより class VisualEffect{ static int hBlendGraph; (略) //Effect.cppより int VisualEffects::hBlendGraph = LoadBlendGraph("GameData/EffectData/BlendGraph.bmp"); (略) これでコンパイルは通るけど、起動すると動きません。 なんか無限ループに入っちゃってるような雰囲気。 メイン関数で初期化してあげるべきでしょうか? それとも他に方法があるのでしょうか? ********************************************* レベルアップで呪文を覚えるようになりました。 tp://sakuratan.ddo.jp/uploader/source/date73357.lzh 警告レベルを最大にしたら警告いぱーい Orz がんばって退治しなくちゃな。。。
- 618 名前:1 [2008/03/07(金) 02:08:23 ID:rq1yy0In]
- 上のstaticの問題、解決しました。
c++の問題ではなくDxLibの問題でした。 DxLib_Init()を呼び出す前にGetBlendGraph関数を呼び出せないみたいです。 とりあえずエフェクト関連のクラスを初期化する関数を作って、メイン関数でDxLib_Init()後に呼び出す事にします。 現状のバグですが、フィールドで普通のアイテムや呪文が使えません。 ホイミを使ってもルーラを使っても しかし なにもおこらなかった と表示されます。 原因は分かったので直しておきます。
- 619 名前:名前は開発中のものです。 mailto:sage [2008/03/07(金) 02:11:20 ID:QhGOdilr]
- その hBlendGraph は main 関数よりも前の段階で初期化が行われるから
DX ライブラリの初期化より前に LoadBlendGraph が呼ばれることになる。 しかもどの翻訳単位から初期化されるかは決まってない。 準備が整う前に関数を呼び出したりしたら、上手く動きそうも無い。 基本的に static を多用するのは良くないよ。C++の本読んで勉強しる。。
- 620 名前:255 mailto:sage [2008/03/07(金) 07:10:26 ID:jWW/3mmy]
- >>617
そういう場合には、デザインパターンのシングルトンパターンってのが使える。 具体的にいうと、 class VisualEffect{ static int hBlendGraph = NULL; (略) としておいて static int VisualEffects::GetBlendGraph(){ if(hBlendGraph == NULL){ hBlendGraph = LoadBlendGraph("GameData/EffectData/BlendGraph.bmp"); } return hBlendGraph; } とすれば、VisualEffects::GetBlendGraph()を呼び出した時点で 1回だけ初期化が行われる。 でもゲームだと、1回だけとはいえメインループで重い処理 をやっちゃうとアレなので初期化関数でやるのが正解だと思う。
- 621 名前:名前は開発中のものです。 mailto:sage [2008/03/07(金) 10:56:57 ID:1WoBL1I/]
- >>620
static constじゃないのにクラス定義で初期化は不可能。 ポインタでないのにNULL判定をするのはおかしい(cppではNULL=0)。 そもそもこれをシングルトンパターンと呼ぶのが間違いな気がする
- 622 名前:名前は開発中のものです。 [2008/03/07(金) 12:38:13 ID:QLw1djJn]
- シングルトンってコンストラクタをprivateにしたやつでインスタンスが1つなのが保証されてるってやつじゃなく?
1つだけに限定されるから、static要素にする必要もないわけだおね。
- 623 名前:620 mailto:sage [2008/03/07(金) 19:49:28 ID:jWW/3mmy]
- >>static constじゃないのにクラス定義で初期化は不可能。
そうでした。Javaとごっちゃになってしまいました…orz >>ポインタでないのにNULL判定をするのはおかしい(cppではNULL=0)。 ハンドルもNULL判定するよね?if(m_hWnd == NULL)とか つか、LoadBlendGraphがNULL返したらどうするつもりなんだ、俺。 ごめん、このコード忘れて。 >>622 元がstaticだったからそのままにした。深く考えてなかった。忘れて。
- 624 名前:名前は開発中のものです。 mailto:sage [2008/03/07(金) 21:53:13 ID:hQbuz1ma]
- >621
>static constじゃないのにクラス定義で初期化は不可能。 constは関係ねーだろ。 静的オブジェクトが生成されるタイミングほんとにわかってんのかよ。
- 625 名前:1 [2008/03/08(土) 00:44:08 ID:D+4Cnx/D]
- 言いたいことはなんとなく伝わってきたので大丈夫です。
たしかにシングルトンパターンをイメージしてました。 全部staticでできてるクラスってシングルトンパターンと変わらない気がしませんか? 仮にインスタンス化しても全てのメンバ変数はどのインスタンスから見ても同じものになるから。 メモリの無駄遣いになりそうな感じはありますが。 やっちゃいけないstaticの使い方をしているところは確かにあります。 FieldMapクラスのms_xとms_yです。 いけない理由も分かってるつもりです。 どうやってstaticじゃないメンバ変数に変えようか悩んでて、そのまま忘れて放置プレイになってました。 今、手をつけてる箇所の実装終わったらそこ修正してみます。
- 626 名前:名前は開発中のものです。 [2008/03/08(土) 01:36:29 ID:0CP0oXDr]
- 1の熱情に感動した。
こまめにソースアップしてるとこも好感度高いよ高いよー。
- 627 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 09:21:15 ID:U6M1Sa0y]
- 619の言うように、staticメンバ変数の多用はよくない。シングルトンパターンも多用しないほうがよいよ。
理由は分かってると思うけど。581も参照のこと。 まずはstaticじゃなきゃ実現できないのかよく考えること。 おそらくstaticじゃなきゃいけない場合はほとんどないはず。 自分はC++職業プログラマだけど、staticメンバ変数を使うことはまずない。 面倒くさいけど、まだまだ規模が大きくなるんだから しっかりやっといたほうがいいよ。 大きくなればなるほど痛い目みるから。
- 628 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 09:41:50 ID:U6M1Sa0y]
- VisualEffectsクラスについてアドパイス(提案)
1.まずメンバ変数、メンバ関数を全て非staticにする メンバ変数の初期化はコンストラクタで行う。 2.VisualEffectsクラスのインスタンスをどこで作成するか考える。 プログラムの保守性の観点からは以下の順が良い。 (1)VisualEffectsのメンバ関数を呼び出してる部分で毎回作成する。 (2)VisualEffectsを使用するクラスのメンバ変数とする (3)WinMain()で作成して、VisualEffectsを使用するクラスに参照orポインタで渡す (4)singletonパターンを使う。(詳しくは後述) インスタンスの生成回数は以下のとおり (1) >= (2) >= (3) = (4) =1 まず(1)から順に試してみて処理速度に問題があれば(3)か(4)にすればいい。
- 629 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 09:51:02 ID:U6M1Sa0y]
- Singletonパターンを使ったVisualEffectsクラスの例
VisualEffects.h// ヘッダファイル作った方がいいよ。 class VisualEffects{ int GrHandle1; int hBlendGraph; // コンストラクタをprivateに VisualEffects(); public: void CaptureScreen(); void BlackOut(); void SpellFlash(); void EffectErase(); static VisualEffects& GetInstance(); // ここがポイント };
- 630 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 09:51:58 ID:U6M1Sa0y]
-
--VisualEffects.cpp--- // コンストラクタで変数を初期化 VisualEffects::VisualEffects(void) : GrHandle1(-1), hBlendGraph(LoadBlendGraph("GameData/EffectData/BlendGraph.bmp")) { } // 他のメンバ関数はそのまま。 VisualEffects& VisualEffec::GetInstance() { static VisualEffects instance; return instance; } 呼び出し方はこんな感じ VisualEffects::GetInstace().BlackOut(); 詳しくはググってみて。
- 631 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 09:56:59 ID:U6M1Sa0y]
- 念のためだが、620やメンバ変数/関数が全部staticのクラスは
singletonパターンとは呼ばない。やりたいことは似てるけど。
- 632 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 11:23:41 ID:e3SgUCNB]
- private:を書かないなんてキモいな。
あとコンストラクタでファイル読み込みなんてしない方がいいのでは
- 633 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 11:37:13 ID:d+vrDc9c]
- どっからでも使いたいからシングルトンにするんだったらグローバル変数と一緒
- 634 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 14:26:33 ID:eQ2FMe8O]
- >>624
タイミングの話じゃない そんなものハナから指定できないからな constならそこで初期値を与えてもコンパイルできるという話。
- 635 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 16:01:25 ID:njb2fD55]
- さすがにVisualEffectクラスにシングルトンパターンに適用するのは
やりすぎかと。 要件としては、 1)VisualEffectのインスタンスは複数あってよい。 2)ただし、複数のVisualEffectのインスタンスから 参照されるhBlendGraphは必ずひとつ 3)hBlendGraphは外部からアクセスできない な感じとして、 hBlendGraphを管理するクラスを a)VisualEffectのprivateな内部クラス(要件3) b)シングルトンパターン適用(要件1・2) として作るのがいいと思うがどうよ。
- 636 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 16:40:27 ID:U6M1Sa0y]
- >>635
よく分からないな。 要件1の「VisualEffectのインスタンスは複数あってよい」であればSingletonにする必要がない。 この要件であれば620のやり方(Proxyパターンに近い)が自然と思うけど。 hBlendGraphを管理するクラスを作る方がやり過ぎに感じる。 >>632 >private:を書かないなんてキモいな。 好き嫌いの問題。よく見る。自分は書くが、なくても気にならない。 >あとコンストラクタでファイル読み込みなんてしない方がいいのでは 一概にそうは言えないけど、今回についてはそう思う。原型をなるべく変えないためにこうしたが、 もうちょっとやりようがあると思う。
- 637 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 17:06:53 ID:U6M1Sa0y]
- FieldMapクラスのms_xとms_yをどう非staticにするかだけど、PlayerParty::DrawParty と PlayerParty::move で呼んでるFieldMap::getMsx()とFieldMap::getMsy()を引数で渡すようにすれば
解決すると思うよ。呼び出し側ではfm.getMsx(), fm.getMsy()を使えばいい。 とりあえず直して動かしたけど大丈夫っぽい。 FieldMapのコンストラクタでms_xとms_yを初期化するのを忘れないように。
- 638 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 17:44:56 ID:U6M1Sa0y]
- >>635,636
よく分からないこともなかった。b)に要件1が書いてあったので勘違いした。 そのやり方でも別にいいと思う。 自分ならVisualEffects::BlackOut()のループの前で毎回LoadBlendGraphする。 でSingletonは使わないで毎回インスタンス生成する。(628の2(1)の少し変形) ダンジョンや城から出るときに呼ぶ関数で、そんなに頻繁に使うわけじゃないからファイル読み込み時間はそんなに問題じゃなさそうだから。 問題になったらそのときにリファクタリングすればいいし。 まあ正解はないので ハカセは今まで出てきた中から、自分がいいと思う方法でやればいいかと。
- 639 名前:名前は開発中のものです。 mailto:sage [2008/03/08(土) 22:39:15 ID:b0Kr/BOB]
- また>1未満の屑がネット弁慶かよ
- 640 名前:1 [2008/03/09(日) 01:21:21 ID:ZtBr13OB]
- みんないろいろありがとう。
VisualEffectクラスはシングルトンで行くことにします。 ちなみにSpellFlashはじゅもんを使ったときのあの光です。 他にもいろいろな場面で使うことが予想されるので インスタンスを複数作る必要もないし ファイルの読み込みは一回で済ませるようにしたほうがよさそうだからです。 効果音担当のSoundEffectクラスを作ろうとかも思ってるんですが この二クラスを集約するEffectクラスとかにまとめたほうがいいのかな? 音関連もそろそろ実装してみたいと思う今日この頃。 効果音のファイルを用意するとしたら… 肉声しかないか!?
- 641 名前:名前は開発中のものです。 mailto:sage [2008/03/09(日) 03:38:41 ID:detWKevS]
- ttp://www.soundsnap.com/
ここなんかどうでしょう? ソース参考にさせてもらいます。 初心者なんで。
- 642 名前:名前は開発中のものです。 mailto:sage [2008/03/09(日) 07:06:58 ID:ijlbToFV]
- 単豚
- 643 名前:名前は開発中のものです。 mailto:sage [2008/03/09(日) 09:45:32 ID:jKvtfIDT]
- ソース流用させてもらいます。初心者なんで。
|

|