[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 03/28 14:30 / Filesize : 293 KB / Number-of Response : 980
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++でFCのドラクエっぽいRPGを作る



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






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 名前: [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 名前: [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 名前: [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]
ソース流用させてもらいます。初心者なんで。

644 名前:名前は開発中のものです。 mailto:sage [2008/03/09(日) 13:24:24 ID:tApCcfwl]
ソース拝借させてもらいます。貧乏なんで。


645 名前:名前は開発中のものです。 mailto:sage [2008/03/09(日) 14:24:40 ID:HWkAMpo4]
ソースかけさせてもらいます。トンカツなんで。

646 名前:名前は開発中のものです。 mailto:sage [2008/03/09(日) 16:53:37 ID:bez1/1Bt]
単屯のほうがいいな

647 名前:名前は開発中のものです。 mailto:sage [2008/03/09(日) 17:26:03 ID:llJV2/qF]
you,ドラクエオンラインにしちゃいなよ!!

648 名前:1 [2008/03/10(月) 22:47:54 ID:h96LME7o]
なんかとんかつ食べたくなってきた。
明日はとんかつにしよう。
カツ丼大好きだけど、明日はカツとキャベツを皿によそって、ソースとマヨネーズとレモン汁かけて食べる。

とりあえずソースうp
tp://sakuratan.ddo.jp/uploader/source/date73642.lzh

>>629-630のソースだとinstanceがローカル変数だから、
BlackOut()とかの変数からからinstanceが見れないっぽかったのでちょっと直して使ってます。
staticなローカル変数は関数が最初に呼び出された時にだけコンストラクタが呼び出される。
って言うのは勉強になりますた。

getInstance()されるたびに条件分岐が呼ばれるので効率がいいとはいえないかもしれませんが
気にならない程度だと思うのでよしとします。(これよりひどい条件分岐とかたくさん使ってるし)
こういうのって関数ポインタ使えば条件分岐無しでいけるのか、といまさらながら思いつきました。
サーバーサイドプログラムだとこういうの使って無駄を削らなくちゃいけないんでしょうね、きっと。

>>647
MOも興味ありますが、コマンド式のRPGを複数でやるのにそれほど魅力が感じられないので
いろいろ仕様も煮詰めなくちゃだし。
これが終わったら僕なりのオンラインドラクエを作ってみたいって思ってたりはします。
そういえばここの↓前スレの88さんは元気だろうか?
tp://pc11.2ch.net/test/read.cgi/gamedev/1198652802/l50



649 名前:名前は開発中のものです。 mailto:sage [2008/03/11(火) 03:13:27 ID:fYlzNlBT]
有能だが頑固な>>1だなw
でもまあ、今は完成させることを目標にした方がいいのかもね
がんばれ〜

650 名前:名前は開発中のものです。 mailto:sage [2008/03/11(火) 04:30:41 ID:tDxIwUFw]
>>1の成長っぷりはすごいなぁ
始めた頃は「自分より初心者かな!」と思ってたんだが
今じゃすっぱり追い抜かれてるわ

651 名前:名前は開発中のものです。 [2008/03/11(火) 11:52:00 ID:bjWYhTwI]
そうだお! 完成させるのえらいのだお!
>>1はようやるわー。
ソースの定期的なうpも好感度たかいよねー。

652 名前:名前は開発中のものです。 mailto:sage [2008/03/11(火) 15:12:26 ID:eMM3dXjR]
>>648 getInstance() の分岐が嫌なら createInstance() のようなメソッド用意してはどうでしょ。



653 名前:名前は開発中のものです。 mailto:sage [2008/03/11(火) 20:05:38 ID:Tpg7o3iz]
>>BlackOut()とかの変数からからinstanceが見れないっぽかったのでちょっと直して使ってます。

BlackOut()とかの変数からからinstanceを見る必要はないのでは?

staticなローカル変数を勘違いしてないかな?
ローカル変数だけど、一度生成したらプログラム終了まで生き続ける。
ハカセの書いてるように最初に通ったときに一度しか生成されないので、
bmp読み込みは1度ですむ。
多分629,630で問題ないと思うよ。

デバッグしたらわかるかも。

654 名前:名前は開発中のものです。 mailto:sage [2008/03/11(火) 20:19:22 ID:Tpg7o3iz]
う〜ん。やっぱりなぜ629,630で問題があったのか分からないので教えて。

655 名前:名前は開発中のものです。 mailto:sage [2008/03/12(水) 01:06:46 ID:dycjFj7Y]
>>1の言っている問題点は俺も理解できんが、
問題のあるソースなのは間違いない

656 名前:名前は開発中のものです。 mailto:sage [2008/03/12(水) 06:08:02 ID:6+05uqkx]
Visual C++で開けないんじゃ論外だろ
エラーでまくり

657 名前:名前は開発中のものです。 mailto:sage [2008/03/12(水) 07:15:12 ID:s7+SbL9p]
656 「パクリたいけど俺の環境じゃ使えないよぉ(´;ω;`) 無能だからどうしていいかもわかんねえし(´;ω;`)」

658 名前:1 [2008/03/12(水) 08:02:25 ID:YbQGwFh7]
BlackOut関数ではhBlendGraph変数を使いたいんですが、
hBlendGraphは普通のメンバ変数なので呼び出すにはインスタンスから呼び出す必要がありますよね?
hBlendGraphがstaticなメンバ変数なら大丈夫だと思うのですが、
全プログラムを通して生成されるVisualEffectsクラスはstaticなinstance変数のみなので
VisualEffects内のどの関数からもhBlendGraph変数が見れる必要があるのです。(使わない関数もあるけど)


ここまで書いて気がついたけど、BlackOut関数内でgetInstance()を呼び出せばよかったのかOrz
すまそ、吊ってくる。



659 名前:名前は開発中のものです。 mailto:sage [2008/03/12(水) 08:14:18 ID:5RY0OFRn]
悪いが658は意味不明だ。根本的な勘違いをしてる。でもうまく説明できる自信はないな。
とりあえず 655 の言うように問題のあるソースになってるので何とかしたほうがいい。

singletonはやめて、こうしたらどうだろう。
変更前の全てstaticな状態に戻し、今回追加した初期化関数を追加する。
WinMain など、適当な箇所で1回だけ初期化関数を呼ぶ。
ハカセの要望を満たせるし、理解しやすいと思うけど。



660 名前:名前は開発中のものです。 mailto:sage [2008/03/12(水) 08:29:14 ID:5RY0OFRn]
>全プログラムを通して生成されるVisualEffectsクラスはstaticなinstance変数のみなので

インスタンスが生成されるか、またstatic/非staticか、とは無関係に、
VisualEffectsクラスからメンバ変数のhBlendGraphは見れる。
hBlendGraphのstatic/非staticに関わらずね。

インスタンス(オブジェクト)とクラスの関係を誤解してるんじゃないのかな。

661 名前:名前は開発中のものです。 mailto:sage [2008/03/12(水) 08:43:56 ID:5RY0OFRn]
×VisualEffectsクラスからメンバ変数のhBlendGraphは見れる。
○VisualEffectsクラスのメンバ関数からメンバ変数のhBlendGraphは見れる。

662 名前:名前は開発中のものです。 mailto:sage [2008/03/12(水) 10:47:50 ID:GnKR/8yc]
勉強になる流れですね。
シングルトンは結構、難しい話で >>630 氏の手法はシングルスレッドでは
上手く働きますが、マルチスレッドでどうかという話を効いた覚えがあります。
www.fides.dti.ne.jp/~oka-t/cpplab-singleton-1.html
スレッドを考え始めると途端に複雑になるし、そもそも排他制御もしないと
まともに使えないだろうと、、あまり考えたくない部分ではありますが。

僕としては、生成だけではなく解放タイミングの制御方法も明確ではないので
static やシングルトンは、あまり好きではないですね…。



663 名前:名前は開発中のものです。 mailto:sage [2008/03/12(水) 15:41:42 ID:5RY0OFRn]
>>662
まあ630以外でSingletonを実装したとしても、またSingletonじゃなくてもマルチスレッドで同一オブジェクトを参照すると、
色々考えないといけないことが出てくるので面倒だね。

今まで幾つかSingletonを使ったり見てきたりしたけど、適切だと思う場合は少ないな。
楽だからって理由がほとんど。自分は使わないようにしようと思ってる。

660を補足すると、BlackOut()内のhBlendGraphは、thisという自分自身の持つメンバ変数であり、veなどの特定のインスタンスの
メンバ変数ではない。だからインスタンスがstaticか、とか一個しかない、とかは関係ない。
別にインスタンス一個もなくてもコンパイルできるでしょ。
これで分かるかな?

664 名前:662 mailto:sage [2008/03/12(水) 16:44:05 ID:GnKR/8yc]
>>663
どうもです。通常はシングルスレッドで組んでいるでしょうし
手早く済ませる手段として十分ありではないかと思います。
スレッドのことは、マルチスレッドで組む時に十分考えると
いいことですよね。

興味深い流れだったので思わず口を挟んでしまいました。^^;
すみません。通りすがりの者でした。

665 名前:名前は開発中のものです。 mailto:sage [2008/03/12(水) 18:02:31 ID:5RY0OFRn]
なんか自分中心のスレみたいになってきてしまってちょっと気が引けるが。。。

>>664
Singletonを使わないようにしているというのは、マルチスレッドだけが理由だけじゃないよ。
どちらかというと、Singletonはグローバル変数に近いというのが問題と思ってるから。

どこかで読んだ本で、「Singletonにするということは、インスタンスに対するアクセス範囲を考える義務を
プログラマが放棄したといえる」という趣旨のことが書いてあって、そのとおりだと思った。

まあ他人に使っちゃダメという気はぜんぜんないけど。データや状態を保持しないクラスの場合は問題は起きにくいと思うし。

あと、シングルスレッドで済めばいいけど、そこそこの規模になるとマルチスレッドを避けられないことが多い。
このDQでも、時間がかかる処理があれば、部分的であれマルチスレッドが必要になると思うよ。



666 名前: [2008/03/12(水) 23:42:49 ID:YbQGwFh7]
とりあえず自分が間違っていたことを謝罪します。すみませんでした。
>>629-630で、問題はなかったのです。
なかったのになぜかコンパイルが通らなかったのです。
どこか他の箇所に問題があったのだと思います。
なのに何か勘違いしてました。
昼ごろトイレで携帯でここ見ながら冷静に脳内コンパイルしたらどこが悪いかわからなかった。
…なんで問題があると思ったんだろう?

とりあえず三つの案をまとめてみた
tp://sakuratan.ddo.jp/uploader/source/date73735.lzh

で、>>628さんの案でいかせてもらおうと思いました。

僕の案だとif文を使う分若干負荷がかかるし、
フルstaticだとinit()関数を呼び出すのがきれいじゃないような気がするからです。

でも、マルチスレッドだと問題が生じる可能性がある、というのは勉強になりました。
今回のDQもどきではマルチスレッド化するならファイル読み込みを裏でやるくらいだと思いますが、
次回考えてるMOではどうしてもマルチスレッドは必要になると思うので。

もしマルチスレッドで使うならフルstatic案で、メイン関数でinit()関数を呼び出す方法が安全。
…でいいんですかね?



667 名前:名前は開発中のものです。 [2008/03/13(木) 01:18:07 ID:dKf8037F]
628案がいいよね、というか、それ以外選択肢ないよね。

668 名前:1 [2008/03/14(金) 02:22:18 ID:nm4je3x/]
ここ数日忙しくて、手をつけられませんでした。
もうちょっと忙しい日が続きそうです。
大規模なりファクタリングを考えてますが、時間が取れない時になるとめちゃくちゃになりそうだからやめておこうかな。
ちなみにリファクタリングのテーマはMVCモデリングです。
いままで全部ごっちゃにしていて、メインループが何箇所かに分かれている形になっています。
そのループの先々でFlipScreenをしていたりしています。
最低でもFlipScreenは三箇所以内に納める、というのを目指してやっていきたいと思います。
ちなみに三箇所というのは
オープニング画面
フィールド時
戦闘時
です。

ちなみに、今のままいくと、NPCを歩かせたりする時に壁にぶつかります。というかぶつかってます。

ちゃんとした時間を取れるまではエディター部分を造ってみたいと思います。

いまできてるのはこんな感じ。
tp://sakuratan.ddo.jp/uploader/source/date73970.lzh

エディターはWinAPIで作ろうと思ってます。

サイズが64*64で固定とか <- わりとなんとかなりそう
、読み書きできるファイル名が固定とか <- OS側で標準装備してるアレを使いたい。
っていうのはひとまずおいておいて

エクセルとかのように、メインウインドがあって、たとえば三つのファイルを開くとします。
そうすると三つのサブウインドウができ、それぞれにキャプションバーがあり、最小化などをサポートしてます。
この辺をエディターで実装したいのですが、どこかにいいサンプルがあったら教えていただけませんか?


669 名前:名前は開発中のものです。 mailto:sage [2008/03/14(金) 09:38:57 ID:KQLj6NoK]
>>668
今時C++でゲーム用ツール作るのは正直馬鹿げてるように思うが…
MDIで調べたら出てくるんじゃないか?


過去資産の無い人が本格的なマルチウィンドウのアプリ作るのはかなりリスクが高い


670 名前: [2008/03/14(金) 17:08:05 ID:jA7ObYp+]
MDIで調べたら「猫でもわかる〜」で該当のページを見つけました。ありがとです。
過去の資産がないので、これから作って行こうとか思ってます。
でもこの辺のってvistaになると使えなくなっちゃうんですかね?

671 名前:名前は開発中のものです。 mailto:sage [2008/03/14(金) 17:11:34 ID:/l3l2Hmf]
ツールならC#とかQt使うほうが楽だと思うよ
Qt なら C++ でいけるし。

672 名前:名前は開発中のものです。 mailto:sage [2008/03/14(金) 17:55:11 ID:gWW3WsZU]
API直書きでMDIは荊杉だろw

EEだとATLやMFCないし。
スレ的にはC++/CLIか。



673 名前:名前は開発中のものです。 mailto:sage [2008/03/14(金) 18:00:14 ID:uWexiA8m]
C++/CLIは化け物w
.NETならC#覚えた方が早い

674 名前:名前は開発中のものです。 mailto:sage [2008/03/15(土) 00:08:38 ID:B2Fh06BF]
>>673
同意

C++/CLIはC++アプリからドトネトへのスタブ作るための言語程度に考えておくべき(むしろよほどの理由が無ければ使うべきでない)
メインに使うとカオスなことになる。

675 名前:名前は開発中のものです。 mailto:sage [2008/03/15(土) 07:07:37 ID:XyBKRgw3]
っ /clr:pure

676 名前:1 [2008/03/15(土) 07:35:23 ID:kfxJ0YQU]
C++/CLIとか managed C++ とか MFC とかいろいろ新語が出てきて収拾つかなくなってる1です。

マップエディタやキャラクタエディタを作るにあたって
今までに作ったFieldMapクラスとか Characterクラスとかを流用しようと考えてました。
そうすると C# と C++/CLI を使った方向でやるべきですか?
それともあの程度のクラスなら流用などを考えずにやったほうが良いですか?



677 名前:名前は開発中のものです。 mailto:sage [2008/03/15(土) 08:33:15 ID:Tt8o4zXb]
はかせタンの気持ちが揺らいでますな

678 名前:名前は開発中のものです。 mailto:sage [2008/03/15(土) 09:59:24 ID:cUAdrkpt]
>>>629-630で、問題はなかったのです。
>なかったのになぜかコンパイルが通らなかったのです。
ごめん。細かい部分で間違ってたかも。(スペルミスはあるけど、そのせいじゃないよね?)

>>もしマルチスレッドで使うならフルstatic案で、メイン関数でinit()関数を呼び出す方法が安全。
>>…でいいんですかね?
staticメンバ変数に同時アクセスすることになるから安全とはいえないかな。やっぱり排他処理が安全かな。

>今までに作ったFieldMapクラスとか Characterクラスとかを流用しようと考えてました。
>そうすると C# と C++/CLI を使った方向でやるべきですか?
>それともあの程度のクラスなら流用などを考えずにやったほうが良いですか?
フリーソフトで使えそうなのないの?下手すると今までより大変な作業になるような気が。ちなみにエディタではどこまでやりたいの?ただ画像作るだけじゃないんだよね?


679 名前:名前は開発中のものです。 [2008/03/15(土) 11:49:06 ID:jofMxJus]
マップエディタならここのを使った方がいいぜー
www.hyperdevice.net/

DQ3レベルなら、イベントを手作業でやってもなんとかなる気がするし。


680 名前:名前は開発中のものです。 mailto:sage [2008/03/15(土) 13:05:17 ID:B2Fh06BF]
>>675
ネイティブとの混在だけが問題じゃないんだけど、本当に触ったことある?

681 名前:名前は開発中のものです。 mailto:sage [2008/03/15(土) 14:30:38 ID:bTNjkoWT]
>>679
エディタは優れていると思うのだが、出力形式がcsvと独自バイナリなのが微妙・・・

ttp://www.vector.co.jp/soft/dl/winnt/game/se442396.html
俺はこっちをお勧めする。
しょうもないバグ(負数チェック忘れで、マイナス座標編集で落ちる)があるが、
XMLなので使うテクスチャ名やレイヤサイズ、チップサイズ等を格納できる。

俺はこれで吐かせてからバイナリにして使ってる。

682 名前:名前は開発中のものです。 mailto:sage [2008/03/15(土) 18:11:34 ID:uFlsWkiu]
>>681
プラグイン対応してるから、自分の好きな形式で保存できたはずだけど。



683 名前:名前は開発中のものです。 mailto:sage [2008/03/15(土) 19:00:19 ID:fKb93Sld]
>>682
別に無理に進める気はないが、
普通はあのサンプルを見てプラグイン作る気なんかおきない

XML解析するほうが絶対に楽とだけ言っておく

684 名前:名前は開発中のものです。 mailto:sage [2008/03/15(土) 19:47:41 ID:B2Fh06BF]
抽象化ゼロ、ネイティブとなると互換性のことが心配だなw

685 名前:名前は開発中のものです。 mailto:sage [2008/03/16(日) 00:17:28 ID:hR3dUdLZ]
マップエディタって結局自前の方が早いと思うのだが

686 名前:名前は開発中のものです。 mailto:sage [2008/03/16(日) 00:21:17 ID:YYl25oBQ]
要求仕様が確定する前にこういうこと言うやつって
RPG作ったことないと思うんだけど

687 名前:名前は開発中のものです。 mailto:sage [2008/03/16(日) 01:27:03 ID:FviUyMQ5]
勉強がてら作ってみんのもいいんじゃね
自分なりにカスタマイズできるし、ふぁふぁふぁ

688 名前:名前は開発中のものです。 mailto:sage [2008/03/16(日) 02:02:51 ID:hR3dUdLZ]
>RPG作ったことないと

ばれたか
でも1もまだ完成させてないんだ。同類だよ

689 名前:名前は開発中のものです。 mailto:sage [2008/03/16(日) 02:46:15 ID:paBA3rB/]
>>1とか別にどうでもいいだろ
スレの意義保つだけの飾りだ

690 名前:名前は開発中のものです。 mailto:sage [2008/03/16(日) 09:15:56 ID:P7T70740]
ベギラマもえ!

691 名前: [2008/03/17(月) 07:22:54 ID:FniSO1dY]
エディタはRPGツクールみたいにマップエディットからイベントの設置まで全部、ですかね。
恐ろしく大変そうだなぁ…。
今考えたら、あえてマルチウィンドウにする必要もないのかな?

ただ部分的にマルチウィンドウにしたほうが楽な気はする。
ウィンドウ間の連動、と言うよりは他のウィンドウを見ながら作業ができる、みたいな。

692 名前:名前は開発中のものです。 mailto:sage [2008/03/17(月) 09:51:05 ID:C8pzDGvV]
正直ツクールのイベントエディタの出来はよくない
条件分岐の見通しが悪すぎる
その点ではカドワスのイベントエディタはよくできてる


まぁ俺ならスクリプトエンジン書いて終わりにするが…



693 名前: [2008/03/17(月) 14:09:13 ID:cE5AlQNt]
カドワス?
調べてみたらカードワースの事っぽい。(違ったらごめんなさい
名前だけは聞いたことがあります。

ツクールを例に出したのはそれしか知らないからですし。それもSFC時代のやつしか知らないです。
カードワースか〜。ちょっとやってみようかな。

694 名前:名前は開発中のものです。 mailto:sage [2008/03/17(月) 15:22:44 ID:63yXmlhQ]
1はあんまり周りに左右されずに作った方がいいよ。
カドワスのエディタはそこそこ良かったけれど、あれで巨大なアプリを作ろうとは思わない。
自分ならECMAScriptかPythonで書くことにするなー。

結局、マップとイベントを結びつけるのさえできれば、あとはテキストが楽っしょ。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<293KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef