乙
3 :
名前は開発中のものです。 :2009/12/04(金) 17:19:26 ID:vm4DXNCA
Ver3からPlayMovieToGraphで透明色が適用されないのとちょっとフレーム落ちと音ズレが激しいなあ もちろん確認のために2.25bでも試したが透明色やフレームレート落ちや音ズレなしで問題なし
DxLibの暗号化ファイル読み込みに対応した暗号化書き込みってなんでライブラリに入れないんだろう セーブとか実行時に暗号化して書きたい時って割とあるとおもうんだが・・・
5 :
名前は開発中のものです。 :2009/12/04(金) 23:18:48 ID:XUOEwrjE
前スレ
>>916 弾幕シューティングではないのだが・・・参考になったさ。ありがとう。
>>4 確かに使いたいときはよくある。でもそれってDirectXの機能じゃないからじゃ?
>>4 セーブデータなんて自分で暗号化すれば済むからでしょ。
8 :
名前は開発中のものです。 :2009/12/05(土) 12:30:22 ID:CQOWfBMw
ToyStudioでアニメーション作って、MQOで出力したんだけど、 ものすごい膨大な量のMQOデータが出てきたんだけど・・・ アニメーションを作るたびに毎回こんなのが出てくるの? そもそもこういう出力結果をゲーム内でアニメとして使えるの?
裏画面全体を拡大縮小したり回転させることとか出来ないかな? ゲームのエフェクトで画面全体をくるくる回したりしたいんだけど
動かないんだったら、描画したヤツを取り込んで一枚の画像にしちゃってまわせばいいんじゃない? 動くんだったら計算させて自前で回転描画すればいいだけだし。
ゲームってグローバル変数使ったほうが普通に綺麗に書ける気がしてきた
>>8 アニメーションxファイルで出せよww
MQOはモーションつかないから連番で出すしかない
シングルトンはついつい使っちゃうよなあ・・
使っちゃえよ
DXライブラリに関係なく GetSystemMetrics(SM_CXSCREEN); とかで
できました ありがとうございました
だめだ俺にはローグライクは早かったようだ・・・テトリスからやり直すぜ
俺もグローバル使う位ならスタティック使ってたけど 結局普通にグローバル使った方が楽なことに気付いた (全てスタティックが駄目というわけではないが) グローバルでも名前空間とか使えば局所性もある程度保てるんじゃないかなあ
環境変数や外部ファイルはグローバル変数なので使用禁止
ゲームに関してはあらゆる関数で共用するものが多いし、 クラスで雁字搦めにして書かない限りグローバル変数使ったほうが分かりやすい
いざ対戦機能とか、似たような機能を二つ以上配置することを考えると、 「やっぱグローバルやめときゃよかった」ってなる。
グローバルしか使ってないヘタレPGとしては、どういう恩恵があるのか自体想像がつかん。
最悪なのがグローバル変数代わりのシングルトン
>>22 のようなことを考えるとグローバルの方がマシ
画像復元の処理を追加してたんだが SetRestoreGraphCallbackに登録する関数で使う変数のために とりあえず読み込み用クラスのポインタをグローバルなポインタ作ってそこに渡して動作させてる 他に良い方法ない?
27 :
名前は開発中のものです。 :2009/12/06(日) 14:27:31 ID:vkleFuhi
文字がだんだん表示させる演出すると、 文字の後ろに・が一緒に表示されるという怪現象が……。 なんだこれ? まあ、たぶん俺のコードのどっか悪いんだろうが。
いけないことなんだろうなと思いつつ グローバルばかりでやってたがそうでもないのかな
それ文字1文字1文字ずつ表示させるって言う意味かな 全角だと1バイト分読み込んだ時に正しく認識されないから 全角の場合は2バイト分読み込ませればいいんじゃないかな
DXライブラリを使ってVC++2008EEでプログラムを作ったんだけれど、 配布するときにDXライブラリをインストールしていないPCでも 起動できるような配布の方法はあるのだろうか よくわかんないけどDXライブラリランタイムみたいなのがあれば、 それを一緒に配布するみたいな方法とかある? それとも配布するプログラムとは別にDXライブラリをインストールしてもらうしかないのだろうか。
>>30 よくわかんないけどたぶん上の[Debug]を[Release]に変えて
出てきたReleaseフォルダを配布すればいいと思う
DxLibはスタティックライブラリだから使うほうはべつになにもいらない ダイナミックなDxLibがあるのかわからんけど自作とかしたならその場合はDLLも配布しないといけない
33 :
名前は開発中のものです。 :2009/12/06(日) 15:43:02 ID:CJZjyivE
>>30 DXライブラリは関数の集合だから、ランタイムパッケージは必要ないんじゃないの?
プログラムが実行ファイルにされるときにすべてC言語からアセンブリ言語にされるはず。
相手に準備が必要なものがあるとすればDIRECTXなんじゃないかな。
34 :
名前は開発中のものです。 :2009/12/06(日) 15:43:31 ID:vkleFuhi
>>29 お、直った!
ありがとー。
STLのstring使ってるんだけど、itretorひとつ進めても、
2バイト文字だとふたつ進めたとこからやらないとだめなんだな……勉強になった。
iteratorだった。 IDEのサポートに頼りっきりはこれだから……。
>>31 Releaseの使い方もわかってなかったから、
配布ファイル自体の作り方もわかった。ありがと。(早速、フォルダを作成したら、画像ファイルだけは、出来上がったフォルダに手動で追加することになるみたい。)
>>32 ダイナミックなDxLibというのはよくわかんないけど、多分そこまで複雑な機能を使いこなしてないから、
DLLの心配はしなくていいととりあえず思う。
>>33 DIRECTXの準備が必要ということか。
これは、さすがにインストールしてもらうしかないということだね。
これでとりあえずプログラムの配布ができそう。ありがと。
別に[Debug]でもよくね? まあ普通は[Release]だろうが
39 :
30 :2009/12/06(日) 16:48:28 ID:L7OXdhxz
>>38 そういえばアレ何が違うの?
あとDXライブラリ使ったらReadmeに使ったって書かなきゃダメ?
>>40 そのままデバッグが入るか否か 少し重くなる
readmeは要らん ただしソースを配布するなら必須
DXライブラリって音のフェードインとかには対応してないっぽい?
自分で作れよ
ChangeVolumeSoundMem関数使えば簡単に実装出来ますよ。例えば /****** Zキーを押すとフェードアウトを始める *******/ /****** test.wavはサンプルプログラム実行用フォルダ参照 *******/ #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode(TRUE); if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1; int Flag=0, Vol=255, SoundHandle = LoadSoundMem("test.wav"); PlaySoundMem( SoundHandle, DX_PLAYTYPE_LOOP ); while( !ProcessMessage() && !ClearDrawScreen() && !CheckHitKey(KEY_INPUT_ESCAPE) ){ if( CheckHitKey(KEY_INPUT_Z) ){ Flag = 1; } if( Flag ){ Vol -= 2; ChangeVolumeSoundMem( Vol, SoundHandle ) ; if( Vol < 0 ){ Flag = 0; Vol=0; } } clsDx(); printfDx("Vol = %d\n",Vol); ScreenFlip(); } DxLib_End(); return 0; }
>>45 どうもありがとうございますー。
色々考えてみた結果、マルチタスクに手を出さないとダメっぽいということがわかったので、
なんとか実装するか。
DxLibはマルチスレッド非対応じゃないっけか
普通に出来るしマルチタスクとマルチスレッドは違う
すまんかった
なぁに気にすろな
51 :
名前は開発中のものです。 :2009/12/07(月) 13:02:56 ID:5mIc7NoF
本家で質問するわけにもいかないので、こっちで。
試験的に、ゲームのプレイ動画を撮ろうと思ったんだが、DXライブラリ3.xで作ったゲームを録画しようとしても全く録画できない。
画面が映らないというより、プロセスを正しく取得できていないような感じ。
ちなみに手元の2.25cだと、ゲームプログラムは弄らずにキャプチャー出来た。(3D機能は未使用)
に多様な状況になったひとっている?
自分の環境が悪いのか、キャプチャーソフトが悪いのか、ライブラリ側の都合なのか調べたい。
OS:WindowsXP SP3
キャプチャーソフト:アマレコ・ライト、Dxtory、DxRec
参考ページ:
ttp://www18.atwiki.jp/live2ch/pages/153.html#id_439db353
キーボードでAの処理からBの処理へと連続で 同じボタンでやるとします。 この場合あるボタンを押すと勝手にAだけでいいのにBまで処理されて しまいます。Aで止めて、もう一度同じボタンでBの処理をさせる にはどうすればいいの? お願いします。
>>51 WMEでやったらどうなる
範囲指定でやったらどうなる
というか仕様的なことならむしろ本家に行った方がいいと思うが
>>52 連続ってどういうこと?
押しっぱなしじゃなくて連打させたいという意味なら
・キーを押すとONになるフラグを作る
・キーを離すとそのフラグはOFFになる
・キーがOFFの場合しかキーを押したときに処理が行われない
というようにする
>>53 CheckHitKey関数しか知らないんで key=0;
if(CheckHitKey(KEY_INPUT_TAB)==1 && key==0) 処理A,key=1;
if(CheckHitKey(KEY_INPUT_TAB)==0 && key==1) key=2;
if(CheckHitKey(KEY_INPUT_TAB)==1 && key==2) 処理B, key=0;
こんな感じですか?
非効率なような気がします。いい案があればおしえてください。
ちなみにシューティングじゃないんで連打はないです。
>>54 なんでそうなるんだよ
bool key=FALSE;
int hoge=0;
if(CheckHitKey(KEY_INPUT_TAB)==1) {
if (!key) {
key=TRUE;
if (hoge==0) 処理A
else 処理B
hoge++;
}
else key=FALSE;
あとCheckHitKeyは効率悪いからやめておけ
↑より効率いいやり方ってそうないと思うが
あと、例だからかもしれないが、↑だと処理B→Aが続けて処理されると思うので
int state = 0;
int tab_push = 1;
〜〜〜〜〜〜〜〜〜〜〜〜〜〜
if(CheckHitKey(KEY_INPUT_TAB)==1 && tab_push = 0;)
{
tab_push = 1;
if(state = 0)
{
処理A;
state = 1;
}
else
{
処理B;
state = 0;
}
// ↑この辺はswitchなりなんなり(処理が2つだけじゃなくたくさんある場合とか)
}
if(CheckHitKey(KEY_INPUT_TAB)==0) tab_push = 0;
// ↑if(CheckHitKey(KEY_INPUT_TAB)==0 && tab_push = 1) としても変わらない
とここまで書いてすでに
>>55 でレスされてるのに気付いたが
ほぼ同じだが投稿しちゃう
あ、「↑より効率いいやり方ってそうないと思うが」
の↑は
>>54 を指すので
>>54 if (( btn ) && ( ! isPush )) {
switch ( step ) {
case 1 :
doA ( );
step ++;
break;
case 2 :
doB ( );
step ++;
break;
・
・
・
}
}
isPush = btn ;
みなさんありがとうございます。 制御する変数を使わないとやはり難しいみたいですね。 参考にします。
状況がよくわからんが一回の入力で連続して押したと判定されるのがいやということかな?だったら↓が汎用的だと思う unsigned count[256] = {0}; while(true) { //メインループ char buf[256]; CheckHitKeyAll(buf); for(int i = 0; i < 256; ++i) if(buf[i] == 1) ++count[i]; else count[i] = 0; //押しっぱなしならカウント数をインクリメントして保存、押されてないとゼロにもどる if(count[KEY_INPUT_XXX] == 1) DoSometing(); //カウントが1のとき、つまりボタンが押された最初のフレームのみ反応! // if(count[KEY_INPUT_YYY] % 10 == 0) DoSometing(); //応用して押しっぱなし中なら10フレームごとにイベント、とかできる(シューティングの等間隔のショット処理とかで使える) }
>>52 さすがにDXライブラリのサイトで
「○○というソフトを使っても動きません!」という質問はできないだろうw
DXライブラリ側に原因があるなら別だが。
WMEはMSのやつかな。
動画作成に関しては今日初めてやったので詳しくないんだ、すまん。
>>62 2.25で出来て3.xで出来ないならライブラリ側の原因である可能性が多いだろ
とりあえず色んな方法でキャプチャして、上手くいかなかったら本家行き
まあ、WME+SCFH_DSFでは問題なくキャプチャ出来たが。
一々全部のキーに対して押し続けたかどうか判断する必要あるのか 余程多くのキー使うのならともかく普通は押し続けの判断したいキーだけでいいんじゃないのか まあ今のマシンなら全部やっても負荷的には問題ないのかも知れんが
キー入力関連はゲームだとよく使うし、関数化しておくと便利ですよ。 「何フレーム入力されているか」が解るようにしておけば、ボタン関連の操作は「1フレーム目」または、「キーを離したフレーム」で処理すれば 連続で不必要な処理まで進んでしまう事がありません。 例えば本家のGetHitKeyStateAllを自分で使いやすいようにしたのが GetHitKeyStateAll_2関数です。こんな感じで使えます。 (→コードは次へ) この例ではエンターの入力時間によって処理を分岐しています。 キーの入力状態を格納する変数がint型なので _2関数をさらに「離された時マイナスのカウントをする」ようにすれば 離されてからのフレーム数も解ると思います。 ・・ところでコードを見やすいように字下げする方法無いんでしょうか;
/****** エンターキーをおした瞬間だけ四角形を描画する *******/ #include "DxLib.h" int GetHitKeyStateAll_2(int KeyStateBuf[]){ char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++){ if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++; else KeyStateBuf[i]=0; } return 0; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ int Key[256]; ChangeWindowMode(TRUE);//ウィンドウモード if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化 while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){ DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_RETURN]);//エンター入力カウント if(Key[KEY_INPUT_RETURN]==1)//今の瞬間押されたら DrawBox(0,0,640,480,GetColor(255,255,255),TRUE);//画面全体を白い四角で表示 ScreenFlip(); } DxLib_End(); return 0; }
実際の入力と、返ってくる値は切り分けた方が便利かもね
MakeGraphでウィンドウサイズより大きい空のグラフィックを作成して、そこにマップチップを敷き詰める処理をしたいのですが グラフィックハンドルを直接指定して描画処理をする方法がわからなくて困っています。 GetDrawScreenGraphを使っていったんウラ画面に描画したものを、空のグラフィックにコピーしようとしたのですが ウィンドウサイズより大きいところに描画されたものはコピーされないみたいでダメでした。 どなたかこの問題を解決できる方はいませんでしょうか?
描画先にグラフィックハンドルを指定したらそこへ描画できるって話をうろ覚え。 ウィンドウサイズ以上にできるかどうかは知らん。 しかしマップチップ敷き詰めたとしても、どうせ表示サイズ以上には表示できないんだし、 普通に毎フレーム描画でいいと思うが。 まぁ全マップを拡大縮小回転とかガンガンやるならちとずれそうで怖いが。
>>70 ありがとうございます、いろいろ調べてきます!
2Dアクションゲームを作ってましてとりあえずマップ全体をメモリに描画しといて
スムーズなスクロールをしようと思ってました。
その目的なら止めた方が良いと思う。 普通に毎フレーム描画でいくべきだと。 よほどヘボなPC使うか、プログラムがヘボでないかぎり スムースさに変わりはない。
別にその方法で間違ってない ウィンドウサイズ以外の描画がしたくないならカメラ座標に映らない座標のオブジェクトは描画しなくていいだけだし、 確かdirectXの仕様で画面外は省略されてた気がする DXライブラリならオリジナルの描画関数作ってDrawRotaGraphなりに飛ばしてやるのがお勧め
えーとね。 キャラクターの表示はできる? それをドット単位で動かせる? それができるならマップもできよ。 マップったって、結局マップチップというキャラクターを並べて表示してるだけだからね。 ドット単位で表示ずらせばいいだけ。 んでもって、画面表示されない位置のマップチップは描画しなければいい。
>>74 ,
>>75 キャラクタの表示もドット単位の移動もできています。
自分の頭の中では
1,ウィンドウサイズより一回り大きいグラフィックハンドルにマップチップを敷き詰める
↓
2,そこから必要な場所だけを切り取って表示する
という流れしか考えられません(´・ω・`)
しかしこれだと1のステップがクリアできなくてダメだし
簡単にアルゴリズムをアドバイスしていただけないでしょうか?
書き込んだ瞬間に何故かひらめいた マップチップを敷き詰めるはじめる座標を(-32-[主人公の座標.x]%32,-32-[主人公の座標.y]%32) にしてあげて、主人公の座標から必要なマップチップの情報をウィンドウサイズより一回り大きく取り出してあげて それを描画すればいいんですよね!!
その通り
おめでとう。それが解れば大丈夫だ。
皆さん大変おさがわせしました。 今プログラム組んでみたら上手くいきました:) ありがとうございました、これからもよろしくお願いします。
あ、そうそう、君が
>>73 で示したサイトにもあるけど
「主人公の位置」じゃなくて「カメラの位置」で考えてね。
基本的に主人公の位置とカメラの位置は同じだけど、
マップ端に行った時は違ってくるから。
DxLib使えるだけじゃ無理だと悟った なんかC++&DxLibがちょっと使えるレベルの人間にふさわしい本とかないすかね
何作りたいのかにもよるが アクションゲームアルゴリズムマニアックスとか?
>DxLib使えるだけじゃ無理だと悟った 俺だってC++とDxLibがちょっと使える程度だが、ちょっと使える程度のものを作るには不自由ないぞ。 C++&DxLibで何がしたいのか次第でしょ。
特定ジャンルのゲームというより、共通の基礎的な部分を勉強したい 最終的にはシレンっぽいのを作りたいんだが、その前になんか根本的な部分が抜けてるような気がしたんだ
試しにシレンっぽいの作ってみたら何が足りないかわかんじゃね 作りたい物だったらモチベーションも保ちやすいし勉強にも身が入る わからなさ過ぎると嫌になるかもだけど
>共通の基礎的な部分を勉強したい プログラムの基礎を勉強したいのか、 プログラムはわかるが、ゲーム作りの基礎を勉強したいのかでまた違ってきそうだね。 ちなみに俺は独学でゲーム作りしてきたから、ゲームは作れても基礎が全然できてねぇ;; 俺も勉強しなおすかな……。
プログラムの基礎に不安があるなら、C++だったらeffective C++とかを 読んでみるといいかもね。あとはデータ構造、基本的なアルゴリズム、 デザインパターンあたりがわかると、汎用性があるかな。 でもまあ、趣味でやるなら勉強と思ってやることはないと思うぞ。 問題を解決しようとして見つけた情報の中で、便利そうなのがあったら その周辺を重点的に調べる、で結構いろいろできるようになる。 ところでDXライブラリって、core以外のソースは公開されていないよね? 掲示板ちょっとみたら、ソース公開に関する質問はスルーされていたので、 全て公開するかは未定ってところかな。
eff c++はもう読んだし、デザインパターンもある程度知ってる 知りたいのはアニメーションの統一的な制御法とか、膨大(になりそうな)画像やデータファイルの生成・管理法とか この辺がうまくできなくてコードに直接埋め込んじゃってるからどんどんスパゲッティになっていってわけわからなくなるんだと思う(たぶん)
うんゲームって極論すればプログラム自体はどうでもいいんだよね データの設計や管理などの方がずっと重要
>>90 今書いてるコードがスパゲッティになるかどうかは、ゲームを完成させるまで分からない。
幾つもゲームを作りながら、「この書き方だと後々こういうケースにハマって困る」というのを学んでいく
そうやって最適化されていくもんだよ
そこら辺に落ちてるゲームの作り方的な例は最初から最適化されてることが多いが、
何故そのように最適化されてるのか述べてるものはほとんどない
そういう意味も考えながらだと上達が早いと思う
ぶっちゃけ、デザインパターンようしらんが、 stlとboost使った自作のデータ管理クラスでなんとかなってるよ。 配列の番号とかいちいち覚えてられねーよwwwってことで。 ファイル名と画像なら表示されてるレイヤとか指定すれば色々操作できる仕様。 ただ、俺ゲームどころかまともに作るのすらはじめただから正解かどうかはわからん。 基底クラスのデータ管理で使ってるのは、unordered_map。
>>85 同じにおいを感じるッ!
ゲームの設計に多少時間をさくのがいいんじゃないかな。
シーケンス制御とか、どのクラスがデータを持つのかとか。
俺もとりあえず動くもの作ってみてあれこれ機能つけたしてくってしてたけど
ちょっと規模が大きくなるとワケワカメになってきたから
丁寧に設計してみようと勉強&作成中。
「ゲームプログラマになる前に覚えておきたい技術」って本、高いけど
その辺の要求に答えてくれてる気がする。
あ、DxLib使ってないけど、読めばより使いこなせるようになると思うよ。
95 :
名前は開発中のものです。 :2009/12/09(水) 01:41:52 ID:OFLUsKk5
おいしくない創作料理を作るようにクソゲーは作ることに意義がある
俺もデザパタなんて必須のものかね 俺は使わずにやれてるし、ある程度使わずにやってみずして必要性実感できるものかね デザパタ学んでからやるべきものかね ある程度C++使ってから見てみると多少参考にはなるけど
口より手を動かせ
俺の状態 適当に作る ↓ 設計に無理があって、どこかで詰まる ↓ 作り直しになる ↓ 最初よりマシになるがそれでも設計に無理があってどこかで詰まる ↓ 作り直しになる。しかも作り直してる最中にまた詰まることがなんとなく分かる。 だが、具体的にどう詰まるのかは分からないし、その解決策も現スキルでは分からない。 ↓ どうせまた作り直すことが分かってしまうとモチベが下がる。 ↓ 今のところ、この繰り返しでいずれゲームの作り方が身につくと信じて 程ほどに考えて、手を止めすぎないようにしている。
決して他人にアドバイス出来るような身の上ではないけれど、1つだけ。 途中で良い設計が思いついたり、飽きてしまうこともあるけれど、 まずはどんなミニゲームでもいいから、とりあえず完成させるべき。 昔の電子ゲーム(ゲーム&ウォッチ)みたいな単純なゲームなら 悩んだり飽きたりする前に、それこそ勢いだけで完成しちゃう場合も。
101 :
名前は開発中のものです。 :2009/12/09(水) 13:02:55 ID:zYgTW+cQ
ちょっとした作業を自動化するバッチ処理をスクリプト言語で 書いてみたりすると案外プログラム書けて俺スゲーと思うはず ゲームって作りたいもののイメージが先行して それを実現するために要求される技術が高すぎるからorzになりやすい
俺もなんとなくC++のサンプルが載ってるとこからコピペで動かしながらゲーム作ってて そろそろちゃんと基礎からやっとくかーとか思って言語の基礎から説明してくれてる解説サイトを見てみたら C言語に関しては勉強する部分があんまり残ってなかった
eff c++的な本やデザパタ本の境地に地力で達していると 読んだときにニヤニヤする
DXライブラリで"あaいiuうeえお"という文字列を あ あa あaい あaいi と一文字ずつ表示させていく方法について教えて下さい
1文字づつ読み込み、 その文字がASCII(1バイト)文字か、そうでないか(2バイト)を関数で判断 それからstringまたはchar型の変数aに代入 →1バイト文字なら、DrawFormatString(a,%s) →2バイト文字なら、Forループと文字幅関数を組み合わせて文字を横に表示 とかやった記憶がある。
超初心者です。 新規プロジェクトからDXライブラリを使う場合 どのようにつかったらいいの? 単にプロジェクトに追加すべきファイル_VC用の内容をコピーして 新規プロジェクトで作ったフォルダーに入れただけではリンクでエラーが でます。新規プロジェクト作成からDXライブラリを使ったコンパイルまでの 流れを易しく教えてください。
設定したつもりで、下のようにエラーでます。 なぜなのか分かりません。 1>リンクしています... 1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __exit は既に MSVCRTD.lib(MSVCR90D.dll) で定義されています。
109 :
108 :2009/12/10(木) 12:26:42 ID:o5AOUra2
単に今まで人が書いたソース(DX経由)を上書きしたり消したりしていましたが、 単にそれを新規プロジェクトに移したいだけなんですけど、 よく分からないです・・・。
おそらく プロジェクト→設定→C/C++タブ→カテゴリをコード生成にする 使用するランタイムライブラリをマルチスレッド(デバッグ)にする (このとき左の方の設定の対象がWin32 Debugになっている場合) それをやったら左の方の設定の対象をWin32 Releaseに変えて、 使用するランタイムライブラリをマルチスレッドにする →OKボタンを押せばおk
111 :
108 :2009/12/10(木) 13:01:44 ID:o5AOUra2
>>107 >>110 アドバイスから先程できました。
>>110 さんがいってる通り、プロジェクトのプロパティは毎回
設定しなおさなきゃならないんですね。一度やったから継続
されるものだと思っていました。ありがとうございました。
今までの疑問が解決されました。
描画領域のクリッピングってできないんだろうか
出来る
115 :
108 :2009/12/12(土) 00:31:17 ID:E1BPSoBb
画面の最大化ってどうしてます? ChangeCallback使ったらの画像ハンドルはすべてグローバルにしなきゃならないの?
画像管理クラスみたいなのを作って そいつにフルスクリーンにされた、という情報を通知してやるとか
最大化ってやっぱフルスクリーンの事なのか。
自分好みのサウンドノベル作ろうと思ったのですが、ノベルって60fpsもいらなくてフレームレート下げたいと思ってます。 しかしどのようにやればいいのかよくわからず困っています。 何か調整する関数などないでしょうか?
フレームレート下げる理由はなに? 画像更新の回数を減らすため? もしそうならフレームレート関係なく、画像更新しなきゃ済む事でしょう。 キー入力処理だけループさせて適当にSleepでもはさんでおけばいいんじゃない?
なるほど!ありがとうございます
わざわざフレームレートを下げる必要があるのでしょうか? サウンドノベルでも画面の切り替わりであったり、 何らかのエフェクトであったり、後から60FPSで滑らかに表示させたくなるかもしれないので、 60FPSで作っておいて損はないと思うのですが。 もし60FPSにするなら、1フレーム(ループ1周)の時間を計っておき 1/60秒(16.6666...ms)になるまで待機させます。 30FPSなら1/30ですね。 しかしSleep関数は指定した時間「以上」待機してしまうので、 正確にFPSを制御したいなら、少し工夫が必要です。 大した工夫ではありませんが、前回の誤差を次回で修正するような作業が必要です。 モニタは60FPSが一般的で、裏画面描画なら、何もしなくても60FPSになります。 ですから、試してみて待機関数が正常に動作していると勘違いしがちですので、 お気をつけて
グルグル回しっぱなしの方が楽だな。 カーソルの点滅とか地味に動かすところもあるのにそこだけ描き換えるのも面倒。
下手に部分描画頑張っても画像崩れ対策とかが面倒だしな 最近のPCの性能にまかせて60回更新余裕です
まぁまぁ。 CPU使用率とかメモリアクセス減れば電気代節約にもなるだろうし(?) 色々挑戦する分にはいいんじゃないかな。
ゲーム中の状態異常としてFPS強制低下を組み込もうと考えた事はあるわ
俺のゲーム、30fpsだ
すいません。 DXライブラリのド初心者です。>< 2Dアクションでキャラが歩いてる感じの表現をだしたいのですが。 どうすればいいでしょうか?? 詳しいサイトを教えていただけるだけでもうれしいです>< おねがいします><
>127 RPGの歩いてる感じであれば上のサイトでも書いてありますが、 2Dアクションとなると少し違うかも知れませんね。 歩いてる感じといっても、描画だけできればいいのか、 地面とのあたり判定を求めて描画するのかなどで 回答は色々変わってくると思いますが、とりあえず描画だけすればいいんですかね? アクションゲームは初めて作るゲームとしてはとても難しいと思いますよ。 特に斜め坂、曲面大地とか作らないといけなくなると マップ管理とかも結構面倒です。 で、描画だけすればいいのであれば、 いくつか歩行グラを読み込んでループ描画すればいいのではないでしょうか?
ありがとうございます。 基本はRPGにしようとおもっています>< ただ、戦闘がめんをアクションみたいにしたいとおもっています。 テイルズシリーズみたいなかんじです>< RPGの要領で画像分割で挑戦してみたのですがなにかいわかんがありましたので 迷惑かもしれませんがご教授おねがいいたします><。
131 :
名前は開発中のものです。 :2009/12/19(土) 02:46:33 ID:5USgcct8
3Dゲームを作りたいのですが
質問のレベルがDXライブラリを使うとかどうとか以前の問題な気が
133 :
名前は開発中のものです。 :2009/12/19(土) 02:53:29 ID:5USgcct8
3Dのゲームを作りたいです。 僕が作るのは主観視点の剣劇アクション。 山や森、遺跡を冒険するのです。 グラフィックはXBOX360くらいを目指します。 DXライブラリを使えばできますか?
グラフィックはもう少し現実的な目標をだな…
135 :
名前は開発中のものです。 :2009/12/19(土) 03:04:45 ID:5USgcct8
グラフィックはよく研究してるます!
>>133 >グラフィックはXBOX360くらいを目指します。
DXライブラリではできないのでDirectXを使いましょう。
XNAを使うのがいいでしょう
Unity3Dとか?
141 :
名前は開発中のものです。 :2009/12/19(土) 14:48:51 ID:EBmq0OgA
仮にDirectXでFPSを作るとしたら政策時間は何時間くらいになるのか。 DXライブラリで作る場合と比べてどれくらいながくなるのか
>>141 人にもよるし作るモノにもよるので何とも言えない。
DirectXで作る場合はDXライブラリに相当するライブラリを自作することになるのでそれだけの期間が必要になる。
なんで最初から作る話になってるんだ DirectXでやってるやつは自分で自前のライブラリぐらい作ってるだろ
自分でライブラリ作ってるくらいの経験あるなら ゲーム製作時間の見当ぐらいだいたいつくだろ。
145 :
名前は開発中のものです。 :2009/12/19(土) 15:34:09 ID:FRLZB9mk
>>130 今年のHSPコンテストでテイスズオブに近い戦闘システム再現した作品あるぞ
機能の低いHSPでさえ出来るのだからDXLibでもやれると思ってもいいだろう
画面分割に関してはDXLibでは良くわからない、自分はSlimDXで開発しているので
SlimDXはDirectXとほぼ同じようなプログラミングなのでデバイスやビューポート調整して簡単に画面分割できる
ありがとうございます〜〜>< 普通のRPGの戦闘画面よりかはむずかしいのでしょうか 少し、HSPのコンテストのほうをしらべてみようとおもいます>< ありがとうございなした><
ニコニコのランキングに上がってるDXライブラリ使った動画見て感動した
まさに神言語!! だとおもった。
>>147 2Dのみか3Dを使うのか分からないけど、戦闘画面作るだけなら難しくない
RPGのHP,MPパラメータにしても2Dスプライト重ねるだけでいいし、画面分割の必要性も無い
しかし、RMB再現するって言ったらリアルタイム衝突判定とか移動のAIも必要になってくる
こっちの方が難しいかもね、かなり頭脳巡らせないと
えええ。これDXライブラリなのかよ。 各種設定処理を作るのにDXライブラリが便利なのはわかるが キモの部分もDXライブラリなのかなぁ。
DXライブラリ以前に画像の加工のアルゴリズムだろこれ
メッシュで板ポリに分割して頂点動かしてるだけでしょ アイデアは面白いけどDXライブラリだからどうというようなものでは全くない
キャラ歩かせるのも一苦労の俺からするとなんでもすごいわ
いやすごいのはすごいんだけどDXライブラリ関係ないw 画像を指定した位置に表示することさえできれば何使ったっていいわけだ
>>148 ニコ動ランキングってバトーキン?
MMDのモデルを取り込んで、動かしたりしてかなり有名になったみたいな
どんなゲーム作るつもりなんだろう
>>161 何一人話違う方向行ってんだよw 152を見れ
しかし俺もバトーキンさんの動画も見た。マジで、どこまで出来る神ライブラリとおもた
DXライブラリは本当にすごいと思うが 実質管理人さんが一人で開発サポートしてるのが心配。 これ管理人さんが投げたらそれで終わりだろ。しかもサポートは大変そうなのに無料だし。
それはフリーソフト全般に言える事だし、しょうがないでしょう。 管理人さんが投げ出すのが心配なら、投げ出さないように 自分ができる事をやりましょう。
>>163 そのへんは市販のライブラリやソフトでも同じだと思うよ。
ゲーム用のツールや3DCGソフトで言うと、Hexagonとか
TrueSpaceとかの例もある。
HUMANが作ってたDigitalLocaとかもそうだし。
>>152 その動画で「ヨーグルトきのこ健康法―ケフィアの奇跡」を
購入した人がいるの見て、ちょっとウケた。
これ普通に動かして遊んでても結構楽しい。
良く分からんけど、DirectXかnVidiaのサンプルであった
マウスの動きで波紋が起こるサンプルみたいな事を
やってるのかな。
でもDXLibってピクセルシェーダー使えないし、テクスチャ
領域を直接いじれなかったような気がするけど
1マス=1ポリゴン(四角)でバネのマスにしてるのかな。
そういえばDXライブラリ3Dってのあったけど投げ出して終わってしまったな・・。 確かにたった一人のやる気次第ってのはある意味怖いね。 知名度が高くなるほどプレッシャー的なものも増えるだろうし
DXLIBってオープンソースじゃなかったのか
いままでfps気にしてない(だいたい70fpsくらい)で ゲームつくってたんだけどfpsを60にすると目に見えて アニメーションが劣化するんですよね。 これってある程度防ぐ方法ってありますか?
大抵グラにこだわってるゲームは見た目凄いだけで実際触ってみるとツマンネになる
>>168 2Dか3Dかによってもやり方が変わってくるけど、アニメーションを調整するしかないかな。
60fpsでアニメーション劣化するってwww 何フレームで更新してんだよww 1フレームごとアニメーション更新してれば60もあれば十分すぎるだろ
>>169 気持ちは痛いほど分かります。ただ、辛口の他人がやる場合、取っても
もらえないんですよ。
>>170 やはりコマ数ですか.
>>171 レミングスみたいに並んでアニメーション
させて動かしてると、明らかにぎこちないんですよね。処理落ちかもね?
>>172 ためしにひとつをアニメーションさせてみて滑らかなら、大量にしたことによる処理落ちじゃないかと思う
>>170 のとおり、コマ調整したほうがいいと思う
2Dなのか3Dなのか、 2DだとしてもFPSが違ってもゲームスピードは一律になるような処理にしてるのか、とか 状況によって違うと思うんだが。
WaitTimer(14); てやってるんじゃあるまいなww
>>174 2Dです。
>>175 そんなことしたら、操作できなくなるので分かると思います・・・。
うーん、うまく動かないですね。人の作ったプログラムは分からないこと
が多いので今回でDXライブラリから卒業しようを思います。これからは
友人と同じように自分で一から組み立てます。
レスしてくれた人ありがとう。
2Dで70FPSで動かしたってのは、 1フレーム1コマ、1秒間に70コマもの超なめらかアニメーションさせてるって事?
モニタのリフレッシュレートと合ってないだけだろ
70FPSってモニタが70Hzじゃないと表示できないんじゃないの
垂直同期信号待ちを切れば、動作は可能だね。 見た目は60FPSだけど。
処理落ちかもねとか言ってるけど処理落ちかどうかの確認はしてないのかよ?
ちょっと待てwww それくらいでDXライブから離れるのかwww なんか解決方法あるだろうに 自作でDXいじれるなら、今回のことくらい解決できそうなんだがw
>>168 >>172 >レミングスみたいに並んでアニメーション
どう考えても処理落ちです
本当にありがとうございました
70FPSに戻してみろ 同じようにカクカクだから
ライブラリのせいにするなよw
普段人の書き込みについて何か言ったことは無いのですが、さすがに
>>176 には頭にきました。
自分が技術力無い事をライブラリのせいにしないでください。
> WaitTimer(14);
なんでこれ書いたら操作不能になるの?
70FPSから60FPSにすると目に見えて劣化する?
ある程度経験がある人から見たら「は?何言ってんの?」と思うでしょうね。
2chにまともなDXライブラリのスレはここだけ。
制作者さんが見てもおかしくない。
そしてDXライブラリ愛用者が集まるこの場所で、自分の技術力無いこと棚にあげて
ライブラリのせいにしないでほしいですね。
>>151 さん
ありがとうございます。
RMBというのがよくわかりませんが><
とりあえずいまめざしているRPGはおいといて、
簡単なアクションか格闘ゲームをつくってみたいとおもいます><
DXライブラリのアクションについてくわしくかかれているサイトがありましたら
おしえてほしいです><
あと、ゲーム製作にくわしいかたは、初めはどのようにして知識をつけられたのでしょうか??
ご教授おねがいいてします><
長文すいませんでした><
D><ライブラリ
>>189 作者さんの解説ページって書いてるけど、
それ作者とは関係ないですよ。
URL見たら全然違うのがわかるはず
>>187 スペル間違いですLMBでした
テイルズオブシリーズの戦闘システム、リニアモーションバトルのこと
ゲーム作りにしても何にしても、これといった学習方法は無いが
まずは、ウィンドウ作成して絵を表示出きる様にする、そのあとは
背景を表示する、背景をスクロールさせる
背景の上にキャラを表示する、キャラを移動させる、
背景とキャラの移動・衝突判定を出きる様にする(特にRPG)
ここまでが基本じゃないのかな
この後は、攻撃・弾丸の衝突判定とか、敵キャラの移動アクションとか難しいところに入る
自分は格闘ゲーは作らない上得意ではありません、今取り組んでるのはTPSアクションシューティングです
テイルズの戦闘で一番しんどい所は素材の用意 格ゲー並にドット打たないといけない 素材さえ用意できれば処理は難しくない
>>192 少し大きめのサイズで3Dで作ってアニメ調にしたものを連続bmpにした後、リサイズで小さくするとまるでドット絵みたいになった
素材とかそれでいけるんじゃね?
だれがモデルングしてだれがモーションつけるの? 大して手間は変わらん気がする
モデルングワロタ
>>193 ファルコムのキャラの作り方がその方法だったかな
3Dモデリングやモーションツールって大抵はbmp吐き出せるものなの?
うちはそういうの自作しちゃったけどね
今時ドット打ちは効率悪いし古いからね
2Dだと解像度高ければベクタグラフィック使う手段もある
>>152 再生数すっごいことなってんなw
PSDなどのレイヤー使えるファイルと連携できると・・・!
>>193 モーションつける必要もあるけど、αチャンネルがないと
作業しにくいので、メタセコとかのモデラーでなく
統合型ソフトでレンダリングしないと厳しいかも。
レンダリングした画像を、下絵にしてキャラクター用の
ドット打つのだと餓狼とか…。
そのまま使うのだとSFCのドンキーコングとかDSのASHとか
色々あるけれど、ブラー表現とか極端なデフォルメとかの
一部のアニメ的な表現は3Dでは非常にやりにくいし、
モノによっては素でドット打った方が早い部分はあるかも。
具体的に言えば、メタルスラッグのキャラみたいなのは
3Dではやりにくい。大幅に崩れる表情や徐々に溶ける服、
燃えていく様を別々にモデリングしないといけない。
リアル寄りでもそのまま下手に取り込めば、ビキニ空手や
キャプテンサワダになる罠もあるのでケースバイケースかも。
Ozawa-Ken方式が楽でいいんでないだろうか。 超直感的なインターフェイスでポーズ付け出来るし。
別にアマチュアだからいいって言うならいいが 3Dやベクターグラフィックではいかにも素人って感じのゲームしか作れんよ なんかもっさりだったり安っぽかったり 特に3Dアニメーションは市販レベルまで行けてるのを見たことが無い それに比べてドット絵ならきちんと描ければプロレベルの見た目にかなり近づける ドット絵自体が数年前の技術ということもあるが、情報を省いて見る人に補完させてるっていうのも大きい それにドット絵はああ見えて3D背景やエフェクトなど何でも合うしな 問題は高度なドット絵を描くのは適当な3Dを作るよりずっと難しいということだが
3Dやるのは機械とか建築物がいいんじゃない。 俺はヘタなドット絵ぽちぽちやってるが……。
俺も
俺なんか棒人間でやってますよ
ゲーム用の仮グラフィック置いているところってないかな。 最終的には自分で描くにしても動作確認用を用意するのも結構手間。 2、4方向に歩くパターンとか棒人間でも大変。
そういうのはどっかからぱくってくればいいんじゃないの 個人的利用だろうしね
RPGツクール用素材と、それを代用出来るゲームならなんとかなるかなあ。
ツクール用という手があったか。 thx すぐに手頃なのがみつかった。
>>152 こんなかんじにフォルダにあるデータ中で
画像データだけを取りだすのってどうやればいいの?
DXライブラリの範囲外だったらすみません
>>208 いろんなやり方あるけど”画像データだけ取り出す”っていうのなら、それはDXlibでやることじゃないな
C++でやることだ。
描画はDXlibでいいと思うけど
>>208 LoadSoftImage関数じゃないかな?
こういう画像処理系のソフトはDXライブラリ使わなくてもいいような気はするけど・・・
多分だが208は フォルダの中にあるexeやtxtを無視してjpgやbmpファイルだけを リストに出したいとかそういう意味じゃないか?
スレ違いでしたか、スマソ 212でやってみる みんなありがとう!
214 :
名前は開発中のものです。 :2009/12/22(火) 01:35:27 ID:BnLx0tn2
やっぱり皆VC++なの? bccの人っていないのかな
bccなにそれおいしいの状態
>>207 ツクール以外でも使えるかどうか、ちゃんと確認しとけよー?
ツクール用として配布してる作者さんは、大抵ツクール以外の用途を想定していないw
>>216 いや、動作確認用だから問題ないだろ。
>>214 俺はBCC使ってるよ。
けどそんな事聞いてどうするの。
>>217 ああそうか、仮グラか。最初のレス見落としてた。
そういえば、大学時代に、自分のゲームで使ったグラフィックとかをサークルの共有財産として使いまわそうぜ!なんて話があったなあ。
今でも残っているのだろうか。
dmcでも使えるようにしてくれー
>>214 bccを選択する理由が思いつかないんだけど?
不便を押してまで使い続けるんだから、相当劣悪な環境なんだろうなあ。
VC++2008EEが無償であるのにbccを使い続ける人って・・・
224 :
名前は開発中のものです。 :2009/12/22(火) 13:37:26 ID:BnLx0tn2
VC++で開発する場合ってDXライブラリ使うための設定ってアレ毎回する必要ある? インクルードに変えるとか、ライブラリに変えるとか、あのへん。 俺もVC++にしたいんだがBccDevの方がシンプルな気がして。 元々bcc入れてたっていうのもあるんだけど。 あとVC++でビルドした実行ファイルの場合、.NETのライブラリがないと動かないとか言うし 簡単そうってことでbcc使ってる
>>224 >VC++で開発する場合ってDXライブラリ使うための設定ってアレ毎回する必要ある?
一度だけでOK。
>あとVC++でビルドした実行ファイルの場合、.NETのライブラリがないと動かないとか言うし
動くよ。
ハッキリ言ってbcc使うメリットなんて一つも無いよ。
226 :
名前は開発中のものです。 :2009/12/22(火) 14:13:19 ID:BnLx0tn2
>>255 そうなのかぁ。やっぱVC++覚えるかぁ。
公式テキストみたいの買いに行ってみるわ。
>>226 設定方法はDXライブラリの公式ページに書いてあるし、デバッグ方法も「VisualC++2008 デバッグ」とかでググれば出てくるし、本は必要ないよ。
俺BCC使ってるけど、VC++が無料になった今、BCC使うメリットは別にないと思うなぁ。 移行するのがめんどくせぇからしてないけど。 まぁ、VC++使ってるだけで優位に立ってるつもりの人はどうかと思うが。
229 :
名前は開発中のものです。 :2009/12/22(火) 14:58:45 ID:BnLx0tn2
>>227 あ必要ないの?
うん確かにBCCのときも公式ページに沿ったんだけど。
よく分からないけどbccでコンパイルしてできた実行ファイルとVC++でできた実行ファイルって違うんだよね?
VC++の方は色々と専用のライブラリ的なものがくっついてできているとかいないとか。
だから配布とかするとき公式テキストでもあったら便利かと思った
>よく分からないけどbccでコンパイルしてできた実行ファイルとVC++でできた実行ファイルって違うんだよね? 違うね。 >VC++の方は色々と専用のライブラリ的なものがくっついてできているとかいないとか。 基本的には実行ファイルだけだよ。 まあ、外部DLLを使えばそれも配布は必要になるけど、それはBCCも同じことだし。
231 :
名前は開発中のものです。 :2009/12/22(火) 15:29:45 ID:BnLx0tn2
>>230 あそうなんだ。じゃあVC++覚えてみるわ。
実行ファイル配布先の環境に何かがインストールされてないといけないとか
そのへんでだいぶ勘違いしてたみたい
自分の場合は、VCにライブラリとして登録するんじゃなく ソースファイルのところに一緒に(ディレクトリは分けるが)置いてるなあ。 昔はそんなんだったよね? 違ったっけ?
俺もだ 何となくVCに設定するの嫌なんだ
昔はBCCの方がコンパイルも実行速度も速かったけど、無償のバージョンは現行のVCに対して実行速度で劣るからな・・・ ちなみに、BCCも商用の奴つかえばかなりイイぞ。コンパイル速度は相変わらずだし実行速度も申し分ない 商用の奴は体験版をインストールしてごにょごにょすれば・・・コンパイラだけ使えるw
パスを通すのがいやなら、DLLにして実行ファイルに添えるだけという方法も
VCじゃなくてプロジェクトの設定に追加してる これが一番スマートだと思う
環境変数とVCとVSの統合環境をごちゃごちゃにするのはやめた方がいいぞ。
VCとVSの違いがわからん 関係がわからんともいう
>>234 昔フラッシュで体験版がごにょごにょすれば普通に製品版と変わらず使えるのを思い出した
ところで3D関係対応したらしいけどつかった香具師いるかい?
ノ RTS作ってる。まだ地形の当たり判定までだが てかフリーでモーション付きxファイル出力できるマトモなソフトが無いのがちょっとあれだが・・
>>224 それはDLLを含めたりしてるんじゃないのか・・。
同じ生成物を作っているんだという事を考えれば自分の言ってることが変だと気づくはず
>>226 本なんか買う必要ある??
とりあえず最初はプロジェクト作って実行出来りゃそれでOKでしょ。
複雑な操作を知りたいなら慣れてからでOK
>>238 VisualStudioっていうのはマイクロソフトが提供しているコンパイラ群のこと。
Cだけじゃなく、いっぱいある。公式ページ行けばわかる。
VisualC++ってのはその中のC++のコンパイラのこと
ってか皆なぜVC++毛嫌いする?
プロジェクトとか設定とかを理解しようとしていないだけじゃないの?
>>240 3Dで動かそうと思って試したら、自分の使ってる
3DCGソフトのx形式の書き出しがどれも酷かったので、
とりあえずSDKをDLしてコンバータ作ってる。
x形式は方言が酷すぎて、ソフトによって内容が全然違うから
あまり管理人さんに負担をかけるわけにもいかないし。
市販ソフトでも、アニメーションセットつきで
DxLib(とDxLibModelViewer)で正常に読めるx形式を
書き出せるものはないような気が…。
vmdで個別に読ませるのが一番良さそう。
ゲーム作る前に泥沼に嵌っている予感。
244 :
名前は開発中のものです。 :2009/12/23(水) 01:16:20 ID:jpOdJMlm
>>242 別に毛嫌いしてるわけじゃないけど、VC++でDXライブラリやっている期間より、
コマンドプロンプトでちまちまコンソール作ってコンパイル実行してた期間の方が長いから、
なんかすっごい複雑というか、その意味で敷居高く感じんるんだ。
実際Cの本なんかで「この本が終わったらVC++などに進むのもよい」なんて書いてあるぐらいだから。
あくまでもコレ俺の場合だけど。
とりあえず猫と猫と性格の合う人間は変化を嫌うのだ〜。
VC++が便利だとは思うよ。
245 :
名前は開発中のものです。 :2009/12/23(水) 01:22:30 ID:jpOdJMlm
めんどくさいってこれ位1分あれば出来るだろ・・。 プロジェクトなんか毎日作るものじゃあるまいし。 みんなそんなことで嫌がるのか・・
まぁなんやかんやで色々面倒なことが山積みだよ。 VCに限らず新しい環境を導入すれば。 慣れてしまったらそういう手間は忘れてしまって何が難しいんだよ一瞬だろwwとか思うけど。
>>244 BCCってデバッグどうやってんの?
>>245 スケルトンプロジェクト作ってないの?
毎回、新規プロジェクト作成してたらめんどくさいだろうね。
VC++だとMakefile書かなくて済むのが助かる 入力補完も便利だし、折りたたみとかスマートインデントとかも地味に効果的
BCCの悪いところ ・最適化性能が低い。 ・準拠している言語仕様が古い。 ・WindowsXP以降のOSに正式対応していない。 VC++の良いところ ・コンパイラは最新の言語仕様に準拠し、最適化性能も高い。 ・エディタが高機能。(検索、入力補間など) ・デバッガが高機能。(ステップ実行、呼び出し履歴ウィンドウ、ビジュアライザ、ウォッチウィンドウなど) ・ツール類も開発し易い。 ・.NET Frameworkにも対応している。 個人的に思うのはこんなところかな。 無理にVC++使えとは言わないけど、BCCは性能とか開発効率とか考えるとありえないな。
x形式は結局独自な物になり易いし、その手間もかかる ここで投げ出す人多数
メタセコとKeynote最強
VC++の悪いところ(数年前) ・コンパイラは最新の言語仕様に準拠し・・・てない、最適化性能もウンコ ・エディタが高機能だけどバグだらけ。(特に入力補間など) ・デバッガが高機能。だけどかゆいところに手が届かない ・.NET Frameworkにも対応している。でも.NETの実装がウンコすぎて涙目 こんなイメージが残ってるんじゃないかな
俺VC6使ってるけど途中でいきなり落ちることあるw
今現在の悪いところはないのか?
>>254 VC++6は1998年の製品なので賞味期限がとっくに切れてます。
>>250 に書いた「VC++の良いところ」はVC++2005以降ですよ。
もちろんVC++6で有名だったハングアップするバグも修正されてるしね。
自分で作ったはずなのに しばらくすると何がどうなってんのか分からなくなる
それは設計段階での失敗だな
みんな言語は何使ってるの? C?C++? C#は少なそうだけど。
C++だなあ
better CとしてのC++
俺は.emacs系エディタ使ってるからVCのエディタ使わない。 バグは実行画面見たらどこがバグってるか大体分かる。
C++を使ってて、python勉強中
265 :
名前は開発中のものです。 :2009/12/23(水) 14:20:01 ID:jpOdJMlm
>>248 デバッガについては確かにリッチから程遠い。BCCディベロッパーはコンパイラのみよりはもちろんマシだけど。
でもそういやVC++だってコマンドラインからコンパイルとかってできるんでしょ?
vcc ファイル名 とかって入力するのかな。C#とかだったらvsc ファイル名とかだった気が。
266 :
名前は開発中のものです。 :2009/12/23(水) 14:22:57 ID:jpOdJMlm
>>246 >>248 プロジェクト作るのは必須ではないの?
スケルトンプロジェクトとかすまんイミフだ。
ね、なんか分かるでしょ、コマンドライン一本槍で来た奴にとってVC++がハードル高く感じるの。
このへんよ、このへん。
コマンドはcl
268 :
名前は開発中のものです。 :2009/12/23(水) 14:24:50 ID:jpOdJMlm
>>267 あ、clか。ていってもコマンドラインからやるのって皆まずないんでしょ?
269 :
名前は開発中のものです。 :2009/12/23(水) 14:26:36 ID:jpOdJMlm
要するに「5.」の作業を毎回しないで済む方法があるってこと?
>>266 スケルトンプロジェクト=全てのプロジェクトの雛形となるプロジェクト
新規プロジェクトを作成する場合はこのプロジェクトをコピーして使う。
つまり設定が必要なのはスケルトンプロジェクトだけになる。
>>268 めったに使わないし、cl.exeの存在すら知らない人も多いよ。
PC初心者なら分からないでもないけど、プログラマーがIDEのハードル高いってどうよ?
プロジェクトテンプレートが簡単に作れれば便利なんだろうがこのへんよくわからんな
272 :
名前は開発中のものです。 :2009/12/23(水) 15:26:42 ID:jpOdJMlm
>>270 そうか一度設定したプロジェクトをコピーするのか。
そうすればめんどい設定も毎回しないですむと。
とか言いつつコピーの仕方も地味に聞いちゃえ。
あれでしょ、コピーって名前をつけて保存しなおすってことでしょ?
IDEのインターフェースは分かりやすく作られていると思うわけ。
ただ、なんかやっぱ複雑に感じるわ。操作の仕方とかじゃなくて概念的なもの。
上の人も書いてるけどテンプレートのことなのかもしれないよなあ。
とにかくVC++使うけど。だって使いたかったわけだし。
とりあえず色々設定した空のプロジェクトtestとかを作って マイドキュメント→VisualStudio2008→Projectにあるtestフォルダを丸々コピペして 使うだけだと思う スケルトンナンタラって呼び名は知らなかったけど
スタートアッププロジェクトの概念を知らなくて 他人のサンプルを起動出来ずに1年以上放置していたのもいい思い出
一般的なIDEというのは総じてゴテゴテしてるし、 「俺が考えた作業手順」とか「俺が考えたフレームワーク」を押し付けてくるので、 その文化になじむまで苦労するってのはよくある。
>>272 すみません、「スケルトンプロジェクト」が思ったより一般的な呼び方じゃなかったようですorz..
>>273 の言うとおり、単純にフォルダごとコピーして使うだけです。
「コピーの仕方」とか言われてもコピペして、プロジェクトファイルのリネームくらいしかしてないなあ。
ちなみにVisualStudioにはこれをIDEに登録できる「プロジェクト テンプレート」という機能があるので興味があったら調べてみて。
VCで、 一発操作といえる範囲で、サクラエディタ(などの外部エディタ)でソースファイルを開く操作はできる?
278 :
名前は開発中のものです。 :2009/12/23(水) 20:48:41 ID:jpOdJMlm
開発環境の諸々はあるにせよDXライブラリは俺的に救いの神だと思った WinAPIやろうとしたらウィンドウ出すにもスゲェ苦戦した 勘違いかもしれんけど、なんか何種類もコードの書き方あるでしょ それまで「bcc32 ファイル名」でコンソールやってた俺にとって「ハァ?」の連続。 それがDXライブラリならあんなにも簡単にウィンドウが出てキャラまで動いたし。 皆はDXライブラリ使ってどういうゲームを作ったことある?どのへんまで行った? 最近ニコニコのプログラミング系の動画にハマってるんだが(東方のRPGなど)、 なんかマザー2みたいなのできるかな〜とか思ってる俺は楽観すぎるんだろうか? JAVAでドラクエそっくりのを作ったっていう動画もアップされてたけど、あれはまた特別な才能なのかな?
画像表示できて音鳴らせてキー入力拾えれば何でも作れるさ
ウィンドウズプログラミングはとっつきにくいよな まあでもウィンドウの生成と描画の仕方覚えてしまえばあとはUpdate-Draw繰り返すだけなのはDxLibもWinAPIも同じだ
一つのプロジェクトでいくつものゲーム作るのは俺だけだろう 大作を作らないというのもあるが
>>278 わかるわかる。
俺もWindows環境でのプログラムなんてちんぷんかんぷんだったが
DXライブラリに出会った途端にゲーム作れるようになった。
まぁ、細々と作ってるだけだからしょぼいけど、来週のコミケで出すぜ。
ウィンドウなんてオマジナイをコピペすれば誰でも作れるよ! とか言われてやってみようとしたけどサイトによってオマジナイの構造が全然違って 検索してみつけたコードをオマジナイに合成出来なかったのはイイ思い出。
DirectXも全然わかんね 半端なC言語の知識から始めるにはDXライブラリが神に思えた
286 :
名前は開発中のものです。 :2009/12/23(水) 22:47:56 ID:jpOdJMlm
そもそもCって開発経緯からいってライブラリが充実していないのは当然っていわれているけど 実際Cの外部ライブラリってそんなに色々と種類あるものなのかな? Cの流行とともに色々なライブラリが開発されたみたいな話は読んだけど コンソール作っているぶんには標準ライブラリで足りる俺だったし ま、何であれDXライブラリはしっくり来るというか自然なんだと思う 乱数とかさ。Cのrandなんて乱数とは呼べませんね、DXを知った今
>実際Cの外部ライブラリってそんなに色々と種類あるものなのかな? なんというかあまりにも井の中の蛙すぎるんだが。 演算各種から圧縮、グラフィック、サウンド、通信、暗号化、 あらゆる目的に応じて大量にあるり、 自分一人で全て使おうと思ったら人生が終わるレベルだぞ。
>あるり あり
STLですら使いこなせん
290 :
名前は開発中のものです。 :2009/12/23(水) 23:06:54 ID:jpOdJMlm
>>287 おお早いレス、ナイスタイミング。
そうなのですか。いやあ標準ライブラリすら使い切れないうちにDXを知ってしまったもので。
>>自分一人で全て使おうと思ったら人生が終わるレベルだぞ。
ええ、それはそう思うんですが、ライブラリはもちろん自作したりしませんが、
せめてRPGで使うようなキャラ画を自分で書きたいと思っています。
フリーで検索してみても皆どのへんから借りているのかピンと来なかったですし。
やっぱりキャラ画ぐらい自分で描こうっていう人が多いのかな?
プログラムの話から素材の話にとんでいるのが意味不明。
>>287 フリーの暗号化ライブラリでいいの無い?
SSL
294 :
名前は開発中のものです。 :2009/12/23(水) 23:23:19 ID:jpOdJMlm
>>プログラムの話から素材の話にとんでいるのが意味不明。 確かに。乱数を使ってみた、とか言い訳してみる。
落ち着くんじゃポルナレフw
296 :
名前は開発中のものです。 :2009/12/24(木) 01:10:15 ID:wnCzv5Vo
冬休みか
>>292 そういうのは他のスレで聞いた方いいよ。
新しく作ったプロジェクトでLoadGraphScreenが使えない・・・ というか画像と読み込んでくれない。 どうすればいい?
>>298 状況不明でソースないので良く分からんけど、
ライブラリへのパスが通ってて、LoadGraphScreen()だけが
使えないのであれば、画像のパスの指定を間違ってるんじゃ
ないだろうか。
新旧のプロジェクトで、ディレクトリ構造変わってるとか。
>>300 LoadGraphScreenだけが使えないのかが気になるところ
もしそうなら、マイドキュメントのVisual Studio 2008→Projects→自分のつくったプロジェクト名→自分の作ったプロジェクト名ってところにvcprojって拡張子のがあると思うんだがそこに画像おけば読み込まれると思うんだが
試してみてくれ
というよりvcprojのあるフォルダに画像な 書き方微妙ですまん
読み込みました! あとLoadGraphScreenだけが使えない訳ではなく、画像を読み込む関数が使えませんでした。
そうか画像系は全滅かなって意味で聞いてみた Dxlib自体使えないかそれともって意味だったから とにかくよかったな がんばれよ
このスレ見てbccからVC++にかえたんだけど、ライセンス認証ってしたほうが いいのかな?あと、25にちとかでるけど
タダなんだから認証くらいやっとけ
認証しても有料になったりしないよな。 150万とかきいたけど。 あんしんした ありがとう^^
やっちまったな・・
それ本当にMicrosoft Visual C++ 2008 Express Edition だよな…?
使ってるときに上にそう書いてるから間違いないはず。 なんだ? ちょっとこわくなってきたじゃないか;; \(^o^)/
詐欺師が名刺に詐欺師って書くわけないって婆っちゃが逝ってた
おまいらプログラム組みながら聖夜をすごしたのですか?
俺は1日プログラミングは休憩してアニメ見ながら過ごしたよ。しにたい
「人多いし、クリスマス特価でモノは高いし、別の日で良くね? そもそも仕事だし」 「じゃあそれで」 悪かったな
むしろリアル誘いに振り回されてプログラム出来なくなることの方が苦痛 毎回断るのもアレだから2回に1回くらい安く済みそうなときは行く
Xファイルってのが詳しくわかってないんだが、アニメーションデータをいくつも組み込めるのか? もし組み込めるならお勧めソフトを教えていただきたいでござる
Rocdebone2がいいでござるよ .xも対応して複数のアニメーション組み込めるでござる
>>319 メタセコイアでモデルを作成
そのファイルをRocdebone2でモーション作成
って流れでいいのだと思いますが、メタセコイアのほうでボーン作らないともしかして動かせられない?
Cyberdeliaってツールだとメタセコイアで適当に作ったファイルで.xファイル出力できるけど、DirectXVierwerでエラーが出る・・・
Rocdebone2のインターフェースがごちゃごちゃしててわかりづらいから、ちょっと勉強してみる・・・
>>318 >もし組み込めるならお勧めソフトを教えていただきたいでござる
有料でも良いなら「Maya」「Softimage」「3ds Max」のいずれか。
無料が良いなら「メタセコイア + (Keynote or Toystudio)」「Blender」「Mod Tool(商用利用は不可)」のいずれか。
>>321 いまToystudioさわってみましたが、使いやすくてびっくり
だけど出力ファイルがDXライブラリに対応してるのはxファイルだけとは・・・
8 名前:名前は開発中のものです。[] 投稿日:2009/12/05(土) 12:30:22 ID:CQOWfBMw
ToyStudioでアニメーション作って、MQOで出力したんだけど、
ものすごい膨大な量のMQOデータが出てきたんだけど・・・
アニメーションを作るたびに毎回こんなのが出てくるの?
そもそもこういう出力結果をゲーム内でアニメとして使えるの?
まさにこれと同じような感じなんだが、xファイルとしては出力できないのでしょうか?
>318 X形式の仕様としては、1つのファイルに複数のアニメーションを 組み込めるんだけど、実際に書き出し機能が標準であるソフトは 市販とフリー併せても、RokDeBoneとTOYSTUDIO、エルフレイナ ぐらいしかないかも。 BlenderやSoftImage(とmodtool)用のプラグインでは公開して くれている人がいるけど、XNA用とかに特化したデータを 書き出すのでDXライブラリでは読めなかったと思う。 (これは各ソフトやDXライブラリの問題ではなく、そもそも x形式の自由度が高過ぎるので互換性が低いことが原因)。 RokDeBoneとかで書き出したxデータが、DXライブラリで 読めるかは試してないので読めるかもしれないけど keynoteやRokDeBoneで、ある程度のモーション作るのは モーションレイヤーやミキサーないので結構大変な気がする。 けっきょく、DXライブラリで使える複数アニメーションつき xファイル形式が欲しい場合はツールかプラグインを自作する しかないんじゃないかな。 でもモデルデータと、モーションは分けている方が何かと 融通は利くと思うよ。修正後の差し替えとかの点でも。
あと、3DゲームつくりたいのならEASY3DライブラリまたはSeleneでもいいでおじゃるでやんす 逆転の発想
>>320 DxLibModelViewerで確認してみた?
>>322 ToyStudioには無償版と有償版(5000円)があって、残念ながらXファイルをエクスポートできるのは有償版だけなんですよね・・・
まだ仮対応らしいけどMMDのPMDを使うか、FBXからMV1に変換して使うとかも検討してみて。
>>323 >>344 モーションひとつ作るのだけで大変そうですねえ・・・挫折しそうだorz
エルフレイナというやつ、まだチェックしてなかったので見てみました
使いやすそうですけど、やはりフリーだとxファイル出力ができないのですね・・・
>>322 での出力もできないというのも、シェア版にしないといけないみたいですね
RokDeBoneが現状自分の最後の望みみたいなので、ボーンの作り方等読んでがんばってみます。
親切にレスありがとうございます(つA`)
>>325 3Dゲーム以外も作ってみたいのでDXライブラリがんばってみますw
ちょっとRokDeBone2が出力したXファイルとFBXを試してみたので報告しておきます。 RokDeBone2付属サンプルの「glow.sig」を編集してXファイルに出力。 これをDirectXVierwer、DxLibModelViewerで読み込んでアニメーション表示OK。 MSサンプルの「dude.fbx」をDxLibModelViewerで読み込んでXファイルに出力。 これをDirectXVierwer、DxLibModelViewerで読み込んでアニメーション表示OK。 しかし、これをRokDeBone2で読み込むと原因不明のエラー。
DXライブラリの拡大縮小機能を使って 擬似3Dを今まさに作ってる俺には手が届かない話題だな。
一方通行なわけか
332 :
328 :2009/12/26(土) 13:42:22 ID:UrPNO9E9
>>328 の続きです。
ModTool7.5でFBXを出力、これをDxLibModelViewerで読み込むと強制終了する。
公式のFBXViewerでは正常にアニメーション表示できているのでDxLibModelViewerのバグかもしれないが、ModTool7.5のエクスポータにも色々と問題がありそう。
メタセコイア(Keynote)でFBXを出力、これをDxLibModelViewerで読み込むとエラー。
メタセコイア(Keynote)でXファイルを出力、これをDxLibModelViewerでアニメーション表示OK。
PMD(モデルデータ)をDxLibModelViewerで表示OK。
しかし、Xファイル出力するとデータが壊れることがある。MV1出力は問題なし。
VMD(モーションデータ)をDxLibModelViewerでアニメーション表示OKだが、データによっては読み込めない場合もある。
エラーメッセージも表示されないし、今のところ原因不明。
まだまだ不安定ではあるもののMMDが結構良さげな印象だった。
乙。報告あるとのちのち使う人がいたとき参考になるからな
C++スレから誘導されてきました。 今学習に使っているのは14歳から始めるC++ゲームプログラミングで、 現在サンプルを触ってみている状態です。 void TekiControl::move(float jx, float jy){ list<CharaData>::iterator it; it = tekilist.begin(); (*it).anim->draw(0, (*it).x, (*it).y); //子機発射処理 ※この部分を指定秒数ごとに実行したい float dy = GameFrame::IdouHosei(8); podsally( (*it).x+64, (*it).y+32, 20, 0,-dy); podsally( (*it).x+64, (*it).y+32, 10, 0,-dy); podsally( (*it).x+64, (*it).y+32, 20, 0,dy); podsally( (*it).x+64, (*it).y+32, 10, 0,dy); podmove(jx,jy); //子機移動 } 子機発射処理のみを指定秒数で実行するようにしたいのですが、 どのような方法があるでしょうか? できればvoid TekiControl::move(float jx, float jy){ 内で 処理できるようにしたいのですが・・・。
move(){ static before_time; if(before_time - now_time() > 指定病数){ before_time = now_time(); IdouHose(); } }
引き算逆だった
これは//子機発射処理 の上に記述していいんでしょうか。 move(){を中にまた使うということですか? nowtimeの初期値はGetNowCountなどの取得で合っているでしょうか。 IdouHose(); とは何のことでしょうか。 質問ばかりですいません。 現在改造しながら勉強しているのですが、ここがどうしてもできないもので…。
改造とかしないで基本からやったほうがいいぞ
その本持ってないんで適当です。 GetNowCountが最大値超えた場合とか考慮必要。 void TekiControl::move(float jx, float jy){ list<CharaData>::iterator it; it = tekilist.begin(); (*it).anim->draw(0, (*it).x, (*it).y); static unsigned int before_time; if((GetNowCount() - before_time) > 指定秒数*1000){ before_time = GetNowCount(); //子機発射処理 } float dy = GameFrame::IdouHosei(8); podsally( (*it).x+64, (*it).y+32, 20, 0,-dy); podsally( (*it).x+64, (*it).y+32, 10, 0,-dy); podsally( (*it).x+64, (*it).y+32, 20, 0,dy); podsally( (*it).x+64, (*it).y+32, 10, 0,dy); podmove(jx,jy); //子機移動 }
本に載っている内容はとりあえず一通りやりました。 次は改造かな、と思ったのですが…
>>339 これでできました!ありがとうございます!!
10時からやっていたので本当にうれしいです。
本当にありがとうございました。
342 :
名前は開発中のものです。 :2009/12/26(土) 17:54:19 ID:E9OJHMux
3Dゲーム創りたいんだけど、最近3D対応したばかりのDXライブラリより EASY3DとかSeleneのほうがいいのかな? ここで聞くのは野暮だと思うけど、2DゲームでDXライブラリを使って良かったので、 3D機能についての現状を知りたい。
>>341 もう解決してるけどそういう「何フレーム化に一度」の処理は、1Fごとに++するTimeみたいな変数を作って、
if (Time%60==0)みたいに使ったほうが良い
特にGetNowCountは音ゲー作るかFPS計測する時など1ミリ秒のズレも許されない時以外はあまり使うべきではない
>>342 俺
DXlib 3D使ったことない
Selene 使ったことない
Easy3D HSP版だけ使った
HSPで3Dは楽だし結構いろんなことできるしよかったよ
ただ演算多くなる場合は断然cが速すぎ
>>342 基本的な機能は揃っているし十分3Dゲームを作れるよ。
ニコ動でDXライブラリを使って作られた3Dゲームが公開されているので一度見てみるといいよ。
しかし、Seleneと比較するとやや機能不足な点もある。
シェーダー、ポストエフェクト、GUI、物理エンジン、スプライト(パーティクル)など。
特にシェーダーが使えないというのはレンダリングの品質に大きく差が出る。(PS3とPS2ぐらい違う)
逆に言えばDXライブラリの方が扱いが簡単なので、3D初心者ならこっちの方が向いてると思う。
あと、空間分割とかないな
無いものは自前で実装すりゃいいけど、その頻度が増えると
DXライブラリで無理して作ってる感じになる
ならSeleneとか他の3Dが充実してるライブラリ使ったほうがいい
もしくはDirectX直
どの程度のものを作るかによるってことだな
>>332 FBXならBlenderが良いよ
X、FBX,、PMD+VMDの話題は前にも見た気がする
>>346 そこらへんがDXライブラリじゃ駄目といわれる所以だよね
出来なくても無いけど2Dほど簡単ではないし、それならちょっと頑張って他のライブラリ使ったほうがずっと天井が高い
結局このライブラリは3Dに関してはまだ遅れているってことなのかな つい最近対応したばかりだから仕方ない話だといえばそれまでなんだけど
349 :
332 :2009/12/27(日) 01:02:13 ID:bc5V7EbG
>>346 >X、FBX,、PMD+VMDの話題は前にも見た気がする
情報ありがとう。
前スレ見てなかったけど、Blenderの出力したFBXは問題ないようですね。
ただUIが独特で個人的には使いにくかったので・・・
あとToyStudioの出力したXファイルも問題ないみたいなのでこっちも良いかも。
350 :
346 :2009/12/27(日) 01:27:46 ID:GGjOngEr
>>347 つっても、あくまで現時点ね
>>348 が言うように、3D対応されたばかりで機能が足らないのは仕方ない
個人的には期待してる
PMD化するのは手間だけど
PMD+VMDは3Dを扱う敷居がぐっと下がる
モーションが連番で別ファイルになってるのも、使ってみればかなり便利
最終的にはMV1にしてもいいしね
3D機能の充実は時間かかるだろうけど、作者にはがんばってもらいたい
でもあまり機能が充実しすぎるとお手軽ライブラリじゃなくなるのよね。 高機能で簡単、というのはただ単に高機能というだけよりよっぽど作るのが難しい。 DXライブラリはお手軽なところが受けてるだろうから、あまり機能追加しすぎて複雑にならないことを祈る。
DXライブラリの3Dライブラリは、安定するまでに2年くらい必要だろう 同程度のライブラリでDrakGDKを使ってれば良いと思う。 C言語の初級からでも扱える3Dライブラリで難易度が低い これで3Dの技術を身に付けて、 2年後くらいにDXライブラリ3Dを始めるのもよい 3Dは表面化されない小さいトラブルが多い。 そして、わけのわからん専門用語も出てくるし....
353 :
名前は開発中のものです。 :2009/12/27(日) 17:13:24 ID:z8YG6h4b
今サンプルを参考にちょろっと創った感じだと、現時点でもかなり簡単に ある程度のレベルのものは創れそうだよ。 少なくとも64以上のものは簡単に作れるだろうし、努力しだいではPS2レベルのも出来るんだろう。 本格的に目指すのでない限りは更新速度や質問できる環境などを考えると、 DXライブラリでぜんぜんいいと思った。 まだ3Dモデルを動かすとこまでしかやってないけどね。
直接質問できる環境は大きいよな しかし管理人さんって何者なんだろうな
作者って14歳の中のひとなんだろうか…
クラスとか使ってC++に最適化されたDxLibも作って欲しいわ
Dx. まで入力したら入力補間で命令がズラっと出るという夢をみた。 いや、まぁ自分で改造すればいいのかもしれんけど…
358 :
名前は開発中のものです。 :2009/12/27(日) 19:16:58 ID:z8YG6h4b
これってブラーとか鏡(レンダリングした結果をテクスチャに)とかはまだ実装されてない?
すいませんこのソフトってオブジェクト指向を理解してないと利用できないのでしょうか?
自分はHSPから移動してきたので 変数は全てグローバル変数で管理して 各ファンクションもサブルーチンとしてしか認識していなかったが 普通に作れた
>>358 「ブラー」はモデルを半透明にして重ねて描画じゃダメ?
「鏡」は3Dに限らず描画先を指定できないと思うので無理そう。
>>360 C言語の知識だけで十分だよ。
まあ、14歳でも使えるらしいので。
ガチで99%の変数をグローバルにして ゲーム完成させたらソースコードが12000行とかになって悶絶した クラス使わないなら関数化は必須に近い・・・ VCの左画面様様だわ
俺もHSPから移行組だったからグローバル当たり前が染み付いていたけど アクセス制限が邪魔なら全部publicでもいいからクラス使った方が 変数名とか関数名の管理が楽だぞ
>>358 >ブラーとか鏡
今試してみたら3Dでも、SetDrawScreen()でテクスチャにも
レンダリングできたよ。管理人さんが昨日直してくれたバージョンだと
DrawExtendGraph()でも表示できた。
ずらしたり拡大縮小すれば、DirectXの本とかに良く載っているAAや
被写界深度の表現も出来そうな感じ。
できないのはテクスチャをロックしてピクセル単位でいじること
じゃないかな。つまりブラーや鏡とかは可能だけどレンダリングした
画像にポスト処理とかはできない…と思う。
ただこのへんの処理やソートとかは、DirectX直接いじる時と同じで
自分で実装しないといけないぽいので、その意味では既出のように
低レベル(ハード寄り)なので2D機能よりは敷居高い部分あるかも。
すみません。 このエラーは何が原因なんでしょうか? LINK : fatal error LNK1104:DxLib_VC2005用.exe' を開くことができません。
良い感じにPMDの問題報告→修正されてきてるな
>>366 DXライブラリのエラーではない、以上。
変な場所で実行してるんじゃなければ、
exeファイルのパーミッション確認しとけ。
わかりました。ありがとうございます。
>>362 14歳より歳いってて、Cは授業で少しくらいの自分がいまいち理解できないとちょっと悲しくなるタイトルだと思うんだ。
俺なんか14歳以下どころか猫以下だぜ・・・
あの猫高知能すぎだよな…
>>365 SetDrawScreen関数は任意のテクスチャを描画先に指定できないと思うんですがやり方があるんでしょうか?
あんなレベルの猫や猿が標準だったら今頃世界から人間滅ぼされてるよな・・・
俺は逆にグローバル関数出来るだけ使わないように拘ってたが 色々面倒になってグローバルも積極的に使うようにしたがな
間違えた ×グローバル関数 ○グローバル変数 まあどうでもいいことだけど
最新(掲示板)の奴、ウィンドウの拡大縮小すると変にならね?
>>377 掲示板(2009/12/27(Sun) 13:35)に投稿されているバージョンで試してみたけど確かに挙動が違う。
ウィンドウの拡縮が反映されてないね。
ifってeles使わなくてもifで固めればeles使う必要あるのかな?
日本語からじゃない?
スレチって所からだな
>>379 とりあえずマジレスするが
まずスレチな
次にelseな
elseを使わないと想定していないエラーが起きる場合もあるから
else ifって形にするべき
すいませんでした。 else ifのところのelseをぬいてもおなじように動いたので、 いるのかなと思って C言語のすれにいきます。
ですよね、些細な疑問にマジレスありです。 すっきりしました^^
友蔵心の俳句
387 :
365 :2009/12/28(月) 17:40:27 ID:3r1xx2ry
>>373 試したことはないけどpng等から作ったテクスチャとか
「任意なテクスチャ」には無理だと思う。
たぶんテクスチャにレンダリングしたい時は、描画可能な
テクスチャを専用で作らないといけないはず。
具体的には、SetDrawValidAlphaChannelGraphCreateFlag()等で
指定してから、MakeGraph()で作ったテクスチャになら
レンダリングできる。
あとはそのテクスチャを普通にDrawGraph()とかで描画できるけど
UVやビルボードに使えるかはまだ試してないので分からない。
このへんを含めてリファレンスには載っていない関数も
かなり多いので、Dxlibのソースや公式掲示板の過去ログ
とか見ると使い方も含めていろいろ発見あるかも。
388 :
373 :2009/12/28(月) 18:48:57 ID:yuCthtY8
>>387 ありがとうございます。
SetDrawScreen関数はMakeGraph関数で作成したグラフィックも指定できるんですね。
リファレンスに書かれていない機能だったとは・・・
ほうほうそれは知らんかった なんで隠すんだろうな
関係ないスレだろうけど、ぐぐって検索したらここが見つかったのでここで書く。 「ゲームプログラマになる前に覚えておきたい技術」のシングルトンが変 普通シングルトンといったらpublic static getInstance()内部で初回呼び出し時に インスタンスを作成するのに、別にインスタンス作成のためのpublic static create()というメソッドがある。 そして、クラス外部のどこかでcreate()を呼び出してインスタンスを作成している。 二回createしたら落ちるだとさ。つまり複数インスタンスをcreateするコードをかけてしまう。 これでは、実行時に落ちるとはいえ、コンパイル時にエラーを検出できない。 たとえば、複数のプログラマが、コードの一部分を分担してそれぞれ作っているときに それぞれがcreate()していると、コードを分けている段階では問題なくても 一つにマージしたときにエラーが発生するというシナリオが起きてしまう。
あの本は結構適当だからな
セガの限界です 教育担当者ですらその程度 だからあそこまで落ちぶれた
まあシングルトンなんか使う時点で…
シングルトンは普通に使うだろ
とりあえずシングルトンにしとけばオブジェクト指向っぽいしどこからでもアクセスできて便利と思ってる奴が多すぎる グローバル変数だと意識して使うのは勝手だけどさ
SEGAはプログラマが悪いんじゃなくて企画が悪いんじゃね?
宣伝が悪い
つまりなにもかも悪いのか
ChangeFontType(DX_FONTTYPE_ANTIALIASING_EDGE); ↑でフォントを変更すると異常に重くなる。 これ以外で文字も目立たせる方法ってあります? たくさんの色つかってる背景なので、文字が目立たなくて見にくい
CreateFontToHandle
VC++確かにべんりだーー。 {}のつながりがわかるじゃないか。 bccのときはこめんとひっつでした。 ただぎょうがわかればいいな〜〜
一度VC#やVB触ったらVC++なんかゴミにしか感じられなくなるけどな
VC#やVBも機械語と比べたらゴミにしか感じられないけどな
>>402 メニューの[ツール]->[オプション]->[テキストエディタ]->[C/C++]->[全般]
で行番号をチェック
VC#やVBってVC++より遅いんだろ? それにVC#はガベジなんちゃらというので急に重くなるそうじゃないか アクションとかシューティングに向くの?
その通りだからC++でやりなよ
>>407 .NETのガベージコレクションは優秀だから重くなることは無いよ
Xbox360では多少難あるけどね
実行速度遅くて困るなんてことは今の時代のPCスペックじゃ有り得ないそ
Javaのゲームも余裕で動く時代だし
アクション、シューティングもネットブックで動かせたよ
勝手に動いたガベコレが2フレームくらい時を止めても困る
今時そんな細かい処理速度が表に出てくるほどのゲームを作るのは大変だぞ
そんなカツカツの高負荷のゲーム作るんだったらそもそもDXライブラリなんか使うべきじゃないしな
それはともかく
>>403 は単にIDEの出来だけを言ったつもりだった
VC#()笑 VB()爆
413 :
名前は開発中のものです。 :2010/01/01(金) 17:46:25 ID:+lDteCCN
ゼタセカンドでさえ遅れるのを許されない設計の場合 まず ・設計を改める 削れる処理はないか。 もっと速い処理はないか。 特に算術演算はコンパイラでさえ最適化しきれない「なにがやりてーんだタココラ」って効率の悪いコードになりがち。 セオリーから外れてないか。 ウェイトを「カウントアップ」でやろうとしてないか。 などを見直し、それでもダメだ!1ヨクトセカンドでも遅れるのは許されぬ!ってとき ハードウェアとダチ公になる のだ。 遅れるってのは結局「OSのスリープに頼っているから」である。 OSのスリープはもちろんOSがやることなので「今は特に眠くないです。」といったらスリープしてもらえない。 そこをハードウェアとダチトモコレクションすることで、強制的にスリープするのだ。
格闘ゲームだったら体力が0になったとき義塾大学になるのはもちろんだが、 気絶などのステータスもある。何のモーションのとき何が何でキャンセルできるのか そういうことも常に演算する対象だが、これを if(cancell_OK == 1) とかやってるやつは基本がなってない。 char cancell_OK, cancell_NG, cancell_only_special・・・・・・・ などと延々必要になるではないか。 ステータス管理の変数は1つにまとめろ。それは可能である。 というふうに、効率の悪いコードになっているのを改めることでだいぶ良くなる。
>ステータス管理の変数は1つにまとめろ。それは可能である。 へぇ〜どうなるの 40文字以内で教えてください
>ウェイトを「カウントアップ」でやろうとしてないか。 これについて教えて下さい
結局のところ、格闘ゲームにおけるステータスってのは0か1しかない。 分かるだろ。の
>>414 cancell…
ステータスはビット演算でやってもいいが可読性が著しく低いから、
boolの配列作って0〜nの数字をそれぞれステータス名でenumしてる
スパゲッティどころか脳髄の如く絡まってるコード持って自慢げにメモリ使用量が〜〜とか言ってる奴いるとぶん殴りたくなる
というかぶん殴る
カウントアップウェイト 信じられないことに、いまだに良く見るんだが for(i=0, i < During; i++) のこと。逆も然り。 for(i=During; i !=0; i--) のような これ数えてる間、CPUがずっとそれに占有されるだろ これじゃウェイト、スリープの意味がない。
>>419 これ駄目なの?普通に使ってた
代わりにどう書けばいいの?
ウェイトやスリープってのは、 「何もしないんだから、その間他の処理をさせよう」 ってのが基本だ。また、そうでないとウェイトしてる間他の何の処理もできないから 極端に言えば画面が停止することになる。 普通は、OS越しに駆動するゲームだったらOSに用意されるスリープ命令を使う。 OSがない組み込みなどで動かすゲームなら、割り込みを使う。
?
ループ処理の話かと思った
unsigned long stat; #define CANCEL_OK 0x00000001 ,,, if (stat & CANCEL_OK) ... else if (stat & CANCEL_NG) ... とか書くのかな >boolの配列作って0〜nの数字をそれぞれステータス名でenumしてる みたいなほうが好きだ ただ例にあげてるとおりに格闘ゲームだとするとキャラクターの1フレームごとの変数の数が増えるのをきらうのはわかる
425 :
名前は開発中のものです。 :2010/01/01(金) 19:28:11 ID:DuVCrQzJ
>OSがない組み込みなどで動かすゲームなら、割り込みを使う。 GBAとかMSXとか古いゲーム機の時のことでしょ 懐かしいな
時間軸で考えると、 例えば「1時間後に働けよ」というのがスリープの考え方。 「じゃあその1時間何をするか」。 1時間、ずーっと1,2,3,4,5,6,7,8,・・・・と声に出して数え上げるとする。 これじゃ、なんか用事があっても何も出来ない。 「じゃあ本でも読むか」となれば、別の処理(本を読んで知識を得る)が出来る。 どっちやっててもシステム時間として1時間は過ぎるが 片方は「実質的に意味のあることを何もしてないのにパワーだけ食う」 片方は「実質的に何もしないんだから別のことをする」 どっちが効率的か分かるだろう
また、ループも for(i=0; i < During; i++){ Plus += Exactly; } ではなく、 if(During == FuckingAss){ Plus += Exactly; Plus += Exactly; Plus += Exactly; Plus += Exactly; Plus += Exactly; Plus += Exactly; } などとしたりすることがある。 基本的にコッチのほうが速いからだ。 CPUとコンパイラにもよるが。
でも1000回のループとかだと、1000行書いてたらさすがにソース長くなって鬱陶しいよね
大体何回までのループなら
>>427 の↓のパターンで書いてもいいの?
デッドライン、つまりここまでに必ず処理終えろ!っていう最終期限が決まってるシステムでは forループではなく、こういうふうな展開したループもどきが使われることも多い。 難点は、見た目素人っぽいこと それ以外は何してるか分かりやすくていいのだが 「こっちのほうが速いよ」ってことをなかなか認めてもらえないのが難といえば難 これを、デッドラインまで繰り返す デッドラインが決まっているということはおおよそのアタリがつくし、 そんなに長いループにもならない。なってはいけない。
まあこういう小ネタは 「もっと軽くしたい」ってときの最終手段なので 根本から遅いのであれば設計を見直したほうがいいよ
>ID:+lDteCCNが考える中で じゃあWindowsのDXライブラリで たとえば1フレーム50ミリ秒にするのにSleepを使わない最適なメインループはどういうの 公式のサンプルがいいのなら「それ」といってくれればいいです
マジレスするとDXライブラリ使うような環境でこんな事を考える必要は無い
>boolの配列作って0〜nの数字をそれぞれステータス名でenumしてる これ具体的にどんな感じで書けばいいの?
俺やったら、スリープはCPUに直結する。 例えばPowerPCはタイマユニットを持っているので これに値を入れてカウントさせる。アンダーフローと同時に割り込みが入る。 その割り込みでタスクを駆動させる。 こういうハード寄りもいいとこのタイマ管理ってのはアプリで使うもんじゃないというし、 まあそれもそうだろうが実現する場合これが一番いいのだ。 ハードウェアのタイマクロック計上はタスクじゃないので、一切影響を及ぼさない。 普通OSのスリープは多かれ少なかれCPUのパワーを食うが 俺のやるタイマは一切食わない。割り込み処理のオーバーヘッドは微々たるもの。
>>435 全然わからんからサンプルソースで説明しておくれ
wwwwww DXライブラリのスレでPowerPCwwww 面白いヤツだなお前
PowerPCは例えだし サンプルといっても、やりたい事を記した関数しかないのだがw 割り込みはソフトウェアじゃない。 割り込みは、ベクタ方式の場合ベクタベースからオフセットしたところにプログラムカウンタが来るだけだから 別にソースで表すもんじゃない。 また、PowerPCならベクタじゃない。
割り込みベクタとか。正月でやっぱらったロートルPGが集まるスレはここか?
やっぱらったって酔っぱらったなw 俺も飲んでるがなww
でもハード寄りプログラムは面白い。 普通あんまり使わないウォッチドッグタイマ どうしても更新したいのに処理が終わらなかったとき これで強制的に更新したりできる たまにはハード寄りのオブジェクトを作ってみても面白い
>413で間違えて書き込んだのか知らないけど ここは主にDXライブラリやそれに関する話をするスレなので DXライブラリに全く関係ないPowerPCの話はやめてほしい あとゲームではあまり意味の無い、 >427のような時期尚早な最適化を進めるのはどうかと思う 今のVC++の無償版には最適化機能が付いているし
考え方はx86系統でも同じなのに・・・w
>>434 横レスだが、たぶんこんなかんじじゃないの
enum StatusSet{
Stat_POINSON,
Stat_PARALYSIS,
Stat_DISEASE,
Stat_CURSE,
Stat_NUM
};
bool phys_stat[Stat_NUM];
for(int i=0;i<Stat_Num;++i) phys_stat[i] = false;
あとはif( phys_stat[Stat_POISON] )とかでもswitchで振り分けてもいいし
STLのbitsetは役に立たないかな?使ったことないけど
>>444 意図してたのはちょっと違った
enum StatusSet{
JUMP,
WALK,
DASH,
ATTACK,
};
bool stat[5];
if (stat[JUMP]) { 〜〜 }
という。
#まあjumpとかwalkは色々やるべきなのでintで管理すべきだが……
ID:+lDteCCNみたいなオナニーはブログででもやってくれ
私はステータスはビット演算派だ。
可読性が指摘されているが、
やり方が悪いくせに可読性が低いと決めつける奴に進歩はない。
#define JUMP (1 << 0)
#define WALK (1 << 1)
#define DASH (1 << 2)
#define ATTACK (1 << 3)
unsigned long stat;
if (stat & WALK) { 〜〜 }
↓ジャンプアタック
if (stat & (JUMP | ATTACK)) { 〜〜 }
-----------------------------------------------
Cをアセンブラ視点で見られるかどうかは重要だと思うが、
今は最適化のレベルが上がっているので、
>>427 のようなロートルな話は意味がないと思う。
なんかコンパイラを優秀な最適化屋と思ってるのがいるが、 logとビットシフトでは10秒も差がある。
言ってることの半分もわからないけど DXライブラリと無関係なのはわかる
まあこいつプログラム板ゲ製板どこにでも湧くキチガイなんだけどな
どうせたいがい描画がボトルネックになるから細かいことを気にしてもほとんど意味がない
>logとビットシフトでは10秒も差がある。
実際に表に出てくるパフォーマンスっていうのは「積み重ね」じゃないからな 細かいことはIOや描画の桁違いのコストで吹き飛ぶ
コミケ終わったとたん速度はえ〜〜〜w
>>405 ありがとです
行表示できました
まだ、便利な機能があればおしえてほしいです。
>logとビットシフトでは10秒も差がある。 10秒って・・・・・・Z80とかクロック4Mhzの時代の話ですか?
457 :
ひらしょ :2010/01/02(土) 13:50:19 ID:xqJ6LKWH
流れさえぎってすまないが、ゲームプログラマになる前に云々の著者です。 シングルトンがああなのは、getInstanceの速度をあげるため。 if一回減らせる。描画APIラッパとかだとここ重要。 create二回で死ぬのも「二回呼んじゃダメ!」と言いながら assertで死ぬわけで、意味のある死に方。 ゲームにおいては、 間違ったコードを書いても動き続けることは重要ではない。 間違った、あるいは非効率なコードを書いたら すぐわかるようにしておいて、出荷までに直すべき。
平山さん?SE-GA-♪
うわ、こんなスレまで見てんのかよ 老いぼれセガ社員必死だな Seleneスレ荒したのお前だろ
ここは有名人の集うインターネッツですね
証拠うpまだー?
>>457 は
>>390 の書き込みに対してか
>>390 はassertが何のためにあるのかも知らないただのプログラム初心者だな
スレ違いでチラシの裏にでも書くような内容を堂々と書くくらいだしな
>>459 Seleneの現行スレ、過去スレ見たけど全然荒れてないぞ
あと、お前はアンチSEGAのスレにでもいけ
3.01きたな
>>457 ゲームならその仕様で良いだろうね。
”ゲームプログラマになった後の〜”の執筆もよろしくお願いします
ちょっと相談なのですが、座標はfloat型で取得していて、 マップは20×15で通れるところが0、通れないところが1で2次元配列読み込み済。 自キャラは32×32の場合、DXライブラリのサンプルにあったマップとのあたり判定の例に従って float oldX,oldY;//移動前の座標 int key = GetJoypadInputState(DX_INPUT_KEY_PAD1); oldX = (*it).x ;//移動前のX座標 oldY = (*it).y ;//移動前のY座標 int x1 = (*it).x , y1 = (*it).y; int x2 = (*it).x+32 , y2 = (*it).y+32; //右下の座標(どこで使うか考えている) printfDx("%d,%d,%d,%d\n",x1,y1,x2,y2);
float df = GameFrame::IdouHosei(4); if(key & PAD_INPUT_UP) (*it).y = (*it).y - df; if(key & PAD_INPUT_DOWN) (*it).y = (*it).y + df; if(key & PAD_INPUT_LEFT) (*it).x = (*it).x - df; if(key & PAD_INPUT_RIGHT) (*it).x = (*it).x + df; if((*it).x<0) (*it).x=0; if((*it).x>608) (*it).x=608; if((*it).y<0) (*it).y=0; if((*it).y>448) (*it).y=448; x=x1/32; y=y1/32; if(map[y][x]==1){ (*it).x = oldX ; (*it).y = oldY ; } (*it).anim->draw(0, (*it).x, (*it).y); こんな感じにすると若干思っているのとずれるんですよね…。 当たり判定なので左上の座標と右下の座標を取得するところまでは考えたのですが、 どのようにしたら実情にあったマップとのあたり判定になると思いますか?
とりあえず見難いから->使っとけよ 移動させてから戻すんじゃなくて、二次元配列のマップチップなら移動先が0かどうか判定するほうがいいんじゃね
>>467 >こんな感じにすると若干思っているのとずれるんですよね…。
ちょっと分かりづらいので、何が原因でどういう風にずれるのか詳しく教えて。
>>469 うまく言えないのですが、ぶつかるべきところでぶつからないで食い込んで止まったりする、という感じでしょうか・・・。
あと、通行可のはずのところに入れなかったり。
マップに入れるところ、入れないところを作りたいのですが。
何でもそうだが、 条件判定は少なければ少ないほどよい。 っていうか現場でifififififififififififififififif重ねる奴は怒られる。 switch-caseで済む場合もあれば ビットシフトで済む場合もある 俺はswitch-case大嫌い 下に来るまでクロックを食いながら来るからだ だから個人的にはビット演算以外認めない ビット演算なら、立てておけば何が来ても一瞬だからだ
ビット演算が嫌いだったり何らかの理由でどうしてもswitch-caseにしなければならないのなら ステータスに数字を割り振って、その値が指すものに直に飛ばしてもよい 擬似テーブル方式だな 内心嫌だった とにかく、ifififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififif重ねるのは見た目にもよくないし 実行速度的にも良くないので絶対に改めるべきだ。 単純なswitch-caseも絶対に避けるべきだ。10項目あったら10項目めに来るまで最低11クロックかかる。 11クロックもあったらシェーダを3回も回せる。 じつにもったいない話だ。
まず x=x1/32; y=y1/32; ↓ x=x1/20; y=y1/15; じゃないか? その上でマップに当たった場合、 ギリギリまでキャラクタを移動させる処理が足りない。 それをやらないと、キャラクタがブルブル震える。 あと変数の名前をもうちょっと考えてやろうな。 配列の引数に渡すセル番号の値がキャラ座標と同じx,yはひどい。 規格が違う。
とりあえずマップが格子状ならキャラクターのx,yも同じ値で管理すべき 実際の位置は表示部分で考えるか、滑らかな動きがいいなら別途キャラクター表示x,yを用意して補正してやる
>ちょっと相談なのですが
という言い回しだったので「アルゴリズムを提案してほしい」ということかと思ったのに、実は「バグを見つけて下さい」ということだったとは・・・
>>473 で解決だな。
お前ら馬鹿か 自キャラは32×32だから/32でいいだろ 出鱈目教えんなよw それと if(map[y][x]==1){ (*it).x = oldX ; (*it).y = oldY ; } となってるが それはキャラの左上しか減り込みチェックしてないから int x2 = (*it).x+32 , y2 = (*it).y+32 は int x2 = (*it).x+31 , y2 = (*it).y+31 に変えて map[y1][x1], map[y1][x2], map[y2][x1], map[y2][x2] をチェックしてやらんといかん 他も変えるべき個所はあるがとりあえずここまで
間違えたw >map[y1][x1], map[y1][x2], map[y2][x1], map[y2][x2] をチェックしてやらんといかん はなかったことね 取りあえず4隅をチェックするということ
あとね、ID:WXd0Gz3I のことやろうとするとね、結構大変だから、俺もやったけど 引き返すなら今のうちかも、特に初心者は ある程度慣れた人ならできるだろうけど 俺の場合は下行くか上行くか左行くか右行くかによって場合わけで上の人が嫌いって言ってたswitch-caseでやったけど まあ上手いことやればswitch-case使わなくてもできるんだろうけど 俺の場合は上行った場合は左上と右上の2隅チェック、 右行った場合は右上と右下の2隅チェック、以下略 ってやってったと思ったんだけど
初心者が誤解するとアレだから一応言っておくけどswitch-caseは基本JMPだから。
あたり判定みたいに右下と左上のみの判定じゃ難しいみたいですね。 なんとなくそれっぽい動きができればそれでいいのですが…。 switch-caseも一度考えてみます。
>>480 スレ斜め読みのおいらが答えると、まず、floatは辞めよう。
一度、float型で、単純な計算をさせると分るけど、floatは精度的に難がありすぎる。
使うなら、intかdoubleを。(特に今回は浮動小数点が必要なさそうだからintで十分)
あと、値が何を示しているのか?をきっちりと考える事。
(x2が、自キャラがギリギリ外れてる位置なのか?ギリギリ入っている位置なのか?)
可能なら、それぞれの名前をx1=>x_top x2=>x_under y1=>y_left y2=>y_rightとか、
ちゃんと意味する名前に・・・。
また、無意味なマジックナンバーはさっさと定数に。
static const int SQUARE_SIZE=32;とかにする。
さらに、一般的にキャラと通路がほとんど同じ大きさだと、
将棋みたいなマス目管理じゃないと、操作不可能になりやすい。
(何か絶対の理由が無ければ、キャラの処理的な大きさは7割で処理していっても問題無い。)
めんどくさいんで、人の書いたモノの紹介で濁すけど、
今回は、基本ただの四角形と四角形の判定辺りで行ける。
http://marupeke296.com/COL_main.html の その4 のはじめの所を読めば問題解決するだろう。
482 :
名前は開発中のものです。 :2010/01/03(日) 18:04:43 ID:smx+9BoV
宇宙船を舞台にしたFPSゲームを作ろうと思っています。 次のような要素を実現したいのですが・・・ @エイリアンを倒した数によって、ヒロインのおっぱいが大きくなる。 Aステージをクリアしたあと、ヒロインのおっぱいを揉める。 @に関しては、おっぱいの大きさごとのモデルを作るのではなく、DXライブラリの プログラムで、おっぱいだけを大きくしたいです。 Aに関しては、プレイヤーの動きに応じてちゃんとおっぱいがもにもにするようにしたいです。 DXライブラリで可能でしょうか?
3D? おっぱい以前に,さすがにFPSならDXライブラリじゃなくてもっとちゃんとした3Dゲームエンジン使った方が結果的にずっと楽だよ
,,, ,,,,,, : .と お 大 お エ _ = ~~ ``ヽ_,=''~´ ´~ヽ : は こ き .っ イ _= ~ ヽ : 思 が く ぱ リ ~=、 ミゞ、 , -彡 ヽ. : わ ま .し. い ア ~=、、、Cl~evj <e~}6)_ 、、、ミ : ん し よ を .ン ミ.~~ /', ゚ ;'7 ミ7ヾ~- 、 : か い う の ≡ (','゚, '.人 ゝ | ヽ : ね な 命 `= `ー' iノ' | / | ん で ~ーノノノノノ'′ て _ ∩ピタ (; ゚д゚) し | | | し ⌒J ( ;´゚д゚) ・・・・・・・・・ c(,_U_U ガク ( ;´゚Д゚) おっぱいは何のためにあるんだー c(,_U_U _,,..-―'"⌒"~⌒"~ ゙゙̄"'''ョ ゙~,,,....-=-‐√"゙゙T"~ ̄Y"゙=ミ T | l,_,,/\ ,,/\
485 :
名前は開発中のものです。 :2010/01/03(日) 20:05:43 ID:wq7ATXDp
>>482 3Dメッシュの1部分の頂点座標を変更することが出来れば可能ではないだろうか
DXLibではメッシュの中の1点の頂点情報を変更する関数が見当たりませんでした
直DirectXではLockVertexBufferで頂点情報を抜き出し、一部変更してからUnlockすれば書き換えできる
その他知る限りだとDarkBasicのSET VERTEXDATAがそれらしき機能かもしれない
自分はボーンの使い方わかないので、頂点書き換え方式でキャラのモーション作ってます
シェーダでやったほうが1000倍ラクだと言っておく
おっぱいシェーダw
究極のおっぱいシェーダーをダウンロードできるところを教えてください おっぱいはTonnyかべっかんこみたいなのが好みです
makeしたら負けやと思う で
490 :
名前は開発中のものです。 :2010/01/04(月) 15:41:04 ID:7VFKyHz5
>>486 HLSLで頂点シェーダやったけど、メッシュ全体の平行移動しかわからない
一部分の頂点座標を動かすってoffset引数使うとまでは調べられたが情報全然ありません
どうやってやるのでしょうか
スキニング
3Dゲーム作ってるんだけど、キャラクターモデルの大きさとかって影響あるの? ビットマップと違って3Dはラスターデータだから、データの重さにはあまり影響ないように思うんだけど。 テクスチャの大きさが影響するとか? もしそうなら、大体どれくらいの大きさのモデルが基準になるんだろう。
サンプルを参考にゲームを作り、1面、2面…とバラバラにcppを作ったのですが、 これを一つにまとめて、クリアしたら次の面にいくようにしたいのですが、どのような方法がありますか?
ポリゴン数の話でなく、オブジェクトのサイズの話の方なら
3DCGソフトによって座標系や単位もバラバラなので関係ないよ。
ただ作業上の手間はあるので、サイズは統一しておいた方が
良いとは思う。
Dxライブラリの場合は、メタセコに合わせているので市販の3DCG
ソフトから直接xで書き出した場合は、極小で表示されると思う。
3DCGソフト側で適正なサイズでモデリングするか、メタセコ経由
してサイズを調整するのが無難かも。
>>493 switchとかでもできるけど、シーン(面)ごとにクラスに分けてるなら
基底のクラス作ってそっから各面を派生させたほうが楽かも。
シーン遷移(シーケンス遷移)やstateパターンとかでググるといいかも。
質問者のレベルを考えると if ( scene == SCENE_TITLE ) Title(); else if ( scene == SCENE_PLAY ) Play(); でも良い気がした。
関数ポインタなんてどですたい
モデルの大きさは1以下にしたほうがいいとか どっかに書いてあった気がする 浮動少数点の精度がどうたらこうたらで
void model_load( char *file,int zx, int zy){ 〜略〜 mapmodel_h = MV1LoadModel(file) ; 〜略〜 } //グローバルスコープ int mapmodel_h; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ 〜略〜 model_load("newmap2.mqo",5,6); これのmodel_load関数のどこが間違ってるの?デバッグ中に「モデルファイル newmap2.mqo が読み込めませんでした」とか怒られる ちゃんとファイルを置く場所も間違ってないのに・・・
それはね、ほら、あれだよ
ファイルを置く場所が間違ってないなら、そのファイルが問題なんじゃないだろうか。
試しにDxLibのサンプルのファイルに置き換えてみるとかどうだろう。
あと念のため、
>>301-302 も見てみてね。
・・・回答ありがとう。解決したよ・・・ たった今、もの凄い恥ずかしいミスをしている事に気づいた。ぅゎー
うまくいかないのでやり方を教えてほしいのですが、 story.cpp内のdraw関数では、 switch(nowstage) { case 0: DrawGraph(0,0,img[0],FALSE); (nowfstageは現在プレイ中のステージ。クリアすると+1されるようになってる img[0]には画像が読み込まれている) という宣言がしてあって、 void ShootGame::drawGameClear(){ slgmap.draw(); jikicnt.move(); bakucnt.move(); GameFrame::drawGameClear(); int key = GetJoypadInputState(DX_INPUT_KEY_PAD1); if(key & PAD_INPUT_B)story.draw(); // if(key & PAD_INPUT_B)setGameState(GAME_MAIN); } とした場合、該当のキーを押している間は画像が表示されるのですが、キーを離すと表示されません。 まずキーを押したら画像が表示されて、その後キー入力で画像を切り換えて何枚か表示させた後、 またキーを押したらGAME_MAINに戻るようにしたいのですが、どうしたらいいですか?
enum { START, FIRST, SECOND, END, }; int draw_state = START; drawGameClear(){ int key = GetJoypadInputState(); if(key & PAD_INPUT){ draw_state++; } } some_function(){ if(draw_state == START){ // hyouji sinai } else if(draw_state == FIRST){ // 1maime hyouji } else if(draw_state == SECOND{ // 2maime hyouji } else if(draw_state == END){ // GAME_MAIN ni modoru } }
あ、キーを押した瞬間だけ検知するロジックが必要だな
bool before_key_state = false; bool now_key_state = false; chk_key(){ before_key_state = now_key_state; if(GetJoypadInputState() & PAD_INPUT){ now_key_state = true; } } chk_key()を毎フレームかコールバックでやってるなら キーが押されたときに実行して以下の処理で検知とか if(!before_key_state && now_key_state){ // ima osareta }
こうか。。超適当 chk_key(){ before_key_state = now_key_state; if(GetJoypadInputState() & PAD_INPUT){ now_key_state = true; } else{ now_key_state = false; } }
508 :
名前は開発中のものです。 :2010/01/07(木) 15:40:47 ID:4ItCtcBu
上記のchk_key関数を作ってGameClear内に呼び出すようにしたのですが、 方法が悪いのか、やはりキーを押している間しか画像が表示されません。 現在このような形にしています。 bool before_key_state = false; bool now_key_state = false; はすべての関数の外で呼び出し、 (int cstate = STARTは外で呼び出すと2回目から画像が出なくなったので、中にしました) void ShootGame::drawGameClear(){ int cstate = START; chk_key(); int key = GetJoypadInputState(DX_INPUT_KEY_PAD1); if(key & PAD_INPUT_B){ cstate++; } if(cstate == START){ slgmap.draw(); jikicnt.move(); bakucnt.move(); GameFrame::drawGameClear(); } else if(cstate == FIRST){ story.draw(); } else if(cstate == SECOND){ story.draw(); } else if(cstate == END){ setGameState(GAME_MAIN); }
509 :
名前は開発中のものです。 :2010/01/07(木) 15:43:45 ID:4ItCtcBu
if(cstate == START){ 以下をsome_function関数にして、 void ShootGame::drawGameClear(){ int key = GetJoypadInputState(DX_INPUT_KEY_PAD1); chk_key(); if(key & PAD_INPUT_B){ cstate++; some_function(); } } というのもやってみましたが(当然ですが)できませんでした。 chk_keyの中身は、 void ShootGame::chk_key(){ int key = GetJoypadInputState(DX_INPUT_KEY_PAD1); before_key_state = now_key_state; if(key & PAD_INPUT_B){ now_key_state = true; } else{ now_key_state = false; } } というような形になっています。
510 :
名前は開発中のものです。 :2010/01/07(木) 15:52:30 ID:4ItCtcBu
キーを離すと「cstate = START」の状態に戻っていると思います。 if(key & PAD_INPUT_B){ }内の cstate++;の前後に if(cstate == START){ を入れるというのも試してみたのですが、 やはりうまくいきません
そりゃ cstate はローカル変数だからな それじゃあその関数呼ばれるたびに cstate = START; がセットされるわな int cstate = START; を static int cstate = START; に変えるか あるいは cstate をメンバ変数にするかしないと あと、キー押し続けチェックは彼とは違ったやりかたになるけど chk_key(); int key = GetJoypadInputState(DX_INPUT_KEY_PAD1); if(key & PAD_INPUT_B){ cstate++; } の部分を以下に変えたらどうか static bool holdDownB = true; int key = GetJoypadInputState(DX_INPUT_KEY_PAD1); int pushB = key & PAD_INPUT_B; if (pushB && !holdDownB){ cstate++; holdDownB = true; } if (!pushB) holdDownB = false;
ありがとうございます。 確かにintでは値の保持ができませんね…。気が付きませんでした。 静的変数にしなくてはいけなかったんですね。 あとキー入力の部分もありがとうございました。 考えていた通りに動かすことができました。
DxlibをC#で使ってる解説サイトとかないかな?
>>513 C#版は一部の関数が使えないこと以外はC版と同じ。
readme.txtに書かれていること以上に解説することがないから解説サイトもないよ。
static変数使うと初期化がうまくできなくなりがちなんだよなあ
>>515 別に静的変数を使わなくても実装できるよ。
せっかくC++使ってるんだしクラス化してみたら?
↓みたいな感じで。
// ジョイパッド管理クラス
class Joypad
{
private:
enum
{
MAX_BUTTON = 28 // DXライブラリは最大28個のボタンに対応している
};
int PressedCounts[MAX_BUTTON]; // 各ボタンの押されたフレーム数を保存しておく
public:
void Update(); // ジョイパッドの入力状態を更新する
int GetPressedCount(int InputType, int Button); // ボタンが押されたフレーム数を取得する
};
// 使用例:-------------------------------
// ジョイパッドの入力状態を毎フレーム1回だけ更新する
joybad->Update();
// パッド1のBボタンが押された
if(joybad->GetPressedCount(DX_INPUT_KEY_PAD1, PAD_INPUT_B) == 1)
{
// 何らかの処理
}
態々クラス化する程のことか 少なくとも手間は普通にコーディングした方が全然掛からないが
ならその方法で良いんじゃない? クラス化はあくまで一例でしょ 君のいう普通がどんななのかは知らないけど
スクリーンのある位置のpixelが、 何色を表示しているかわかる方法ってありますか?
ある
ある。
GetPixelですか?
なんでそれを聞く必要があるの?リファレンスにも書いてあるし自分で試すことも出来るのに
>>523 言いたいことは分かるけど、おまいさんに突っ込む資格は無いだろうw
>>520 ,521,523,524
なんとか出来そうになりました
ありがとうございます
ワロタ
できそうってまだできてないのw
ゲームプログラマになる前に覚えておきたい技術を買ったんだけど 難しすぎるだろこれ DXライブラリのサイトのほうがどれだけわかりやすいか これは勉強する本じゃなくて、もう理解してる人が確認する ためのもんか?
少なくとも入門書レベルなら、他人に教えてあげられるくらいの実力は要ると思う。 それでもプロとしてみるなら初心者だろうね。
何をやってるかはわかるんだけど、自分の力だけではコード書けない 結局サンプル見ながらそれを打ち込むだけ こんなんじゃ意味ないでしょ? 買うのまだはやかったなー
とりあえず一番最初の倉庫番チャレンジしてみたらどう? 自分は昼から始めて夕方までかかった orz
>>532 最初は意味わかんなくて、できる人のソースをコピペ。
次に少しずつソースを読解できるようになり改造していく。
そしてやっと自力ですべて書けるようになる…のが
普通の流れだと思うよ。
ひらしょー本は、初心者に構造的に説明しようと誠実に書いて
くれている結果、冗長で読みにくくなった部分はあるとは思うけど
必要なことは抑えてある本だと思うので、まずは本に書いて
ある事が分かるように勉強していけばいいんじゃないかな。
何が分からないかにもよるし、教え方の手腕の問題もある
だろうけど、すぐに理解できちゃうような内容しか書いて
いない本だとお金出して買う価値もないと思うし、
ゲーム関連技術がもし簡単に書けちゃう内容だと、こんなに
解説本も出ないと思う。
将来使うはずだと無理矢理クラスを使って書いてるけど 今のところ決定的にcに比べて便利だと思うところはないなぁ 確かに変数と関数を一塊にできるのは気持ちがいいのだが・・・
listとか両方で実装してみると大分ちがわね?
>>532 Chapter13(I部 2次元のゲーム)までは頑張れ。
>>535 継承、カプセル化、ポリモーフィズム、演算子のオーバーロード、STLあたりを理解できるとメリットを感じられるようになるよ。
最初はコピペ、それを改造、ってのはごく普通の流れだろうな。 俺も昔は雑誌に載ってたプログラムをぽちぽち打ち込んでたもんよ。
俺も昔はラジオを録音してたもんよ
今は3Dゲーならudkとかunityとか、2D紙芝居なら吉里吉里とかnスクとかがあるから、 趣味でゲーム作る程度ならプログラムまで手を出す必要はないよ。
俺の場合は最初はソース呼んで理解するところから入ったがな コピペがあまり意味あるとは思えん そっから自己流のアレンジで打っていったがな まあある程度コピペっちゃあコピペだけどな まあコピペは動作確認には必要かも知れんがな あとポリリズムとかは使ってったけどカプセル化は結局面倒になって公開しちゃえーて戻ったけどな 結局グローバル変数使いまくりに戻ったし、まあ使いまくりって程でもないが カプセル化やろうと思えばできるけどだってアクセサ通すと速度落ちそうな気すんだもん、それが気になってな 小規模の個人レベルであまりカプセル化のメリット感じられんのだが ポリポリなんちゃらは俺もlistで重宝してるな まあポリポリ使うより天麩羅使う方がすっきり書ける場合もあるしなあ
そりゃあ、ポリリズムなんて使ってたらな。
Javaなんかと違ってC++はクラス作るのが面倒なんだよな 場合によってはかえってミスしやすくなったり保守性が下がったりする
質問なんですが、画像でいうLoadGraphのように文字列を先にhoge[数字]読み込んでおいて、 DrawString(x,y,hoge[数字],Cr) ;のように呼び出して使う…ような感じになる方法ってありませんか? あと、文中に改行も含めたいのですが・・・。 できれば1行ずつ表示されると嬉しいです。
外部ファイルを読み込みたいのか? それなら龍神録にサンプルが載ってる。csv用だけどtxtにも転用できるはず
やりたい事がはっきりしてるんだから、自分で作ればいいだけでは。
547 :
名前は開発中のものです。 :2010/01/10(日) 18:52:06 ID:RHOGN5ub
内部の別のクラスでTEXTの内容を変数に格納しておいて、 それをDrawString(x,y,hoge[数字],Cr) ;で呼び出したいんです… char hoge[1]="AAA"; DrawString(x,y,hoge[1],Cr) ; みたいな形です。
普通に読み込んで、文字列の位置を計算をして出力
何を言っているのかわからないし 何をしたいのかもわからない
画面に複数行の文字を表示したいんです。 通常はDrawString( 250 , 240 - 32 , "Hello C World!" , Cr );って書くと Hello C World! と表示されると思うんですけど、このHello C World!の部分を、 改行を含む、変数を入れたいんです。
#include <string> using namespace std; string str[10]; str[0] = "AAA"; DrawString(x,y,str[0].c_str(),Cr); 文中に改行を含めたいってのはたぶん\nとか文中に入れたいんだと思うから C++ splitとかでググってなんかフォントの縦幅とかなんたらやればいいんじゃないかな…
何言ってるのこいつ?
sprintf(str, "Hello C world!\n"); DrawString(x, y, str, Cr);
for(i = 0; i < numof_lines; ++i) DrawString(x, y + i * font_size, str[i], color);
>>544 そういう関数は用意されてないので自作するしかないよ。
改行文字を検索して文字列を一行ずつに分割、forループでY座標をずらして描画すればいいんじゃない?
DrawFormatStringの関数の デフォルトのフォントの大きさってどれくらいなの? 書いてないから分かんないよ
作者が悪いみたいな言い方で気に入らねえなあ。 コードみりゃ書いてあんだろ、16だ。
話の流れとは全然関係ないんだが、画面サイズを2パターン用意したら、なんかすげぇ面倒なことに(笑) 「なんとなく」ってだけで実装するもんじゃねーなあ。 単純に拡縮するだけなら簡単なんだろうけども。
ルートレイヤ(固定サイズ)に描画→スクリーンに拡大描画でいいじゃん
16 : 9 って今後は用意すべき?
561 :
558 :2010/01/11(月) 01:11:32 ID:HJnYHrsQ
>>559 それは
>>558 の3行目で否定してる「単なる拡縮」だw
もともと800x600でゲームを作ってたんだけどさ、
とある理由により、小さいウィンドウのバージョンを作らなきゃならなくなったんだ。
でもそのまま縮小すると、特にドット絵なんかは見てられなくなるし、
元が800x600用(あくまで縮小版はオマケ)なので、縮小版を基準にして800x600用に拡大するのも納得いかず。
そんなわけで、それぞれの画像の大きさを変えずに、ゲームの中身を変えようと思ったのが色々と失敗だった(笑)
>>560 主流が16:9になるか16:10になるかは別として、今後は4:3のモニタは減っていくだろうからなあ。
とはいえ現状ではモニタ側で4:3に対応(レターボックスや引き延ばし)してくれたりするし、作りやすい方でいいんじゃない?
今すぐ用意すべき
ドット絵が汚くなるってのは補完してるからじゃなくて?ニアレストネイバーでやれば綺麗に縮小されないかな
>>563 ドット絵は無理じゃない?
あとクリティカルな部分はともかく、1つの画像ファイルでなんとかしたいよね。
ペイントでキャラの画像を作る。保存をするとふちの部分の色が変わるのは何でだろう(´・ω・`)
ペイントの拡大縮小は補完処理が働くから確実にドット絵が汚くなるよね
565は拡大縮小してるとは言ってないけどね。
>>565 色が劣化する形式で保存してるんじゃないの?
文字の回転ってどうやってやるんですか? △の記号を90度回転させたものがほしいんだけど・・・・
>>565 画像をRGBにすれば解決する サイズは大きくなるがな
文字入れられるだろ それ回転すればいいだけ
>>572 それはやれると思ってたけど
変だったんで。
結局、文字を回転させる方法はないのか?
よくゲームである
△(90度回転)6 △(90度回転)な感じにしたい。
>>574 方法はいくらでもある。
そして、いくらでもやってる人がいる。
以上
>>575 でもやり方は知らないんでしょ?
知ってる人お願いしますね。
>>561 そうか、ワイドもあったか
ゲームやるならドットバイドットでやりたいよね
580 :
565 :2010/01/11(月) 12:24:49 ID:b9O3GovE
色々試したらできました ありがとうでした。
581 :
名前は開発中のものです。 :2010/01/11(月) 15:35:07 ID:C8nZ8yZZ
|> <| こういうことだろ?
<| |> だと思ってた
(゚д゚ ) <| y |>
オブジェクトのy座標が-0.2のときそれを描画ルーチンにわたすと 0の位置に描かれそうな気がするんですけど (つまり-0.9〜0.9が同じ位置に表示されそう) DXLibにそのままわたすとどうなりますか? あと固定小数点のたとえば int y100;の1/100が1ドットとするとき int y_for_draw; if (y100 < 0) { y_for_draw = (y-99) / 100; } else { y_for_draw = y / 100; } でfloorになる?これは一般的にどう書かれる?
言っている意味がよく分からない。もっと要点絞ってくれ
>>586 >オブジェクトのy座標が-0.2のときそれを描画ルーチンにわたすと
>0の位置に描かれそうな気がするんですけど
>(つまり-0.9〜0.9が同じ位置に表示されそう)
>DXLibにそのままわたすとどうなりますか?
C言語では小数から整数への変換は小数切捨てになる。
「型キャスト」で調べてみて。
>でfloorになる?これは一般的にどう書かれる?
ならない。もっと言えばコンパイルすら通らない。
「y_for_draw = (y-99) / 100;」は小数点以下を切り上げしていないので。
一般的かどうかは分からないけど、固定小数点数を浮動小数点数にしてmath.hのfloor関数を使った方が簡単だと思う。
>>587 質問は2つです
1つめはDXLibでたとえば描画ルーチンのXY座標に(-0.3, -0.9)をわたしたときと(0.1, 0.9)をわたした時が同じ場所になってしまうのでは?
2つめは
たとえば、キャラクターの座標の内部的な整数の変数(たとえばint x_naibu, y_naibu;(前質問ではint y100;))が
100移動すると「1ドット」動いたことになるとすると、
描画ルーチンには基本 (x_naibu / 100) を x座標としてわたすことになりますが、
もし x_naibu が -99 でも 99 でも (x_naibu / 100)はゼロになってしまいます。
これを解決する一般的なやりかたが知りたいという話です。
書き込みに間違いが
y_for_draw = (y-99) / 100; は y_for_draw = (y100-99) / 100;
下は y_for_draw = y100 / 100;
>>535 最初はそんな感じやね
C++実用レベルは理解しなきゃいけないこと多くて投げ出しがち
でも使い続けることをおすすめする
何よりまず慣れることが大事、慣れれば勝手にクラスありきになる
次第に理解が深まってゲーム製作には大いに役立つ
C++はタブーとイディオムがある程度わかってくればいいんだがそこまでがしんどい
>C言語では小数から整数への変換は小数切捨てになる。
ありがとう
>「型キャスト」で調べてみて。
型のサイズの順位とか知らないことがたくさんありました。
>>でfloorになる?これは一般的にどう書かれる?
>ならない。もっと言えばコンパイルすら通らない。
ちょっと間違えました。
>>589 のようにしてコンパイルはとおってますが、何か穴があるかもと心配でした。
ちなみにdoubleを使ってたらたとえば加算する数値をきっちり1.0にすることができないことによる不具合を味わったことがあり、
固定小数点なら100を加えるときっちり1ドットだけ動くのが確定している利点があると思うんです。
>>592 誤:y_for_draw = (y100-99) / 100;
正:y_for_draw = (y100+99) / 100;
やりたいのはこういうことじゃない?
固定小数点数にもデメリットはあるし、個人的には浮動小数点数を使った方が良いと思うんだけどなあ・・・
・表現として分かりづらい(ソースコードが見づらい)
・扱える数値の範囲が狭い
・浮動小数点数を扱う標準関数やその他のライブラリが使用できない
ふと思ったんだけど -0.5 の小数点以下を切り捨てってのは 普通は 0 になると考えるのか -1 と考えるのか。
>>593 >誤:y_for_draw = (y100-99) / 100;
>正:y_for_draw = (y100+99) / 100;
いえ、修正後を再掲すると
if (y100 < 0)
{
y_for_draw = (y100-99) / 100;
}
else
{
y_for_draw = y100 / 100;
}
で、"y100"が 0〜99 のときは描画ルーチンはゼロの座標をわたしたくて、
y100が -100〜-1 のときは「-1」の座標、-101のときは「-2」にしたいので
それにはこれで合ってると思います。
ちなみに固定小数点は今回だけのミニゲームで試しにやってみようって感じです。
次からはまた浮動小数点使うようになりそうです。
>・表現として分かりづらい(ソースコードが見づらい)
「y100」って感じの変数名で意外と解決されそうだったり^^;
俺も全く同じことしてたわw 変数名の付け方も マイナスは考慮してなかったけど y100は表現的にある程度解決できてもそれ以外、それに関わる他の変数とか範囲とかがややこしくなってくるんだよねえ >・浮動小数点数を扱う標準関数やその他のライブラリが使用できない キャストすればいいんじゃないの?
>>595 ごめん、勘違いしてたみたい。
floor関数の動作なら
>>595 で大丈夫そう。
>>596 >キャストすればいいんじゃないの?
誤差を無くすために固定小数点数を使っているのでそれをやると駄目だと思うんだけど・・・
「y100」という変数名が分かり易いというのはかなり疑問を感じるな。
最初に見たとき「y+100」か「y-100」の書き間違いかと思ったし。
あと小数第2位までしか扱えないのはかなり精度が低いと思う。
アクション性の高いゲームだと誤差の影響が出そう。
そもそも固定小数点使ってるのは誤差を無くす為だったのか まあ y100 というのは苦肉の策でそのまま yを使うよりはまだ分かり易いだろうということと、 そら他人からみたらあれっとは思っても自分で使う分には若干間違い減らす可能性が上がるかなといった程度だろ あくまで少数第2位までを使うのは表示上の問題だけじゃないの? 表示する場合は整数しか扱えないが内部的には小数で記憶しておきたいという そもそも別に少数第2位までしか扱えないわけではないと思うがなあ ただ座標の値を少数第2位まで持ちたいってだけで 計算まで少数第2位までしか使えないってわけじゃないでしょ
log.txtを勝手に生成されるんですけど 生成しないようにするには可能?
>>599 SetOutApplicationLogValidFlag(FALSE);
601 :
名前は開発中のものです。 :2010/01/13(水) 11:54:25 ID:e0BJb6Ws
2.25bなんだが、 vista で CheckHitKey( KEY_INPUT_RSHIFT ); がうまく動作しない。 XPだと動く。RSHIFTだけ動かないんだよな。 なんでだろう?
603 :
名前は開発中のものです。 :2010/01/13(水) 13:01:04 ID:b/PQw5gR
質問です。 画像などをロードするとっきって、パスをいつもちまちま指定しないといけないのでしょうか? 例えば、画像をロードする場合、 Load("Data\\img\\hoge.png"); みたいな感じではなく、単に Load("hoge.png"); のようにロードできたら楽なのになぁと思った次第です。 ファイルが増えるに従って、管理がしやすくするためにパスも長くなっていきますし……。 もちろん自分でパスをセットしてくれる関数を組むのもアリなのですが、 VC#みたいに、リソース追加&ファイル名指定でさっくり使えたら楽だなと思ったので……。 リソースからの読み込みができる関数はみつけたのですが、 IDでの指定なので、どのファイルがどのIDなのか覚えるのが面倒となってしまい使いにくいorz
>>603 自動的にDataフォルダを検索してhoge.pngを探してロードするってこと?
win32APIの関数使えば出来なくも無いと思うけど多分労力に見合うほどのメリットはないと思うよ
何回もロードするもんでもないし
>>601-602 俺は601じゃないけど、2.25bをまだ使ってる。
で、601の様な現象知らなかったわけだが、602の解決してる時点で9月だよな。
俺が持ってる2.25bはタイムスタンプが5月だし、公式でDLできる2.25bも5月のものだ。
602の示してるレスで公開されてるtestバージョンはバージョンアップされるたびに上書きされてるから、
(今落として確認したが)つい先日のものになってるな。
2.25bバージョンの最新って管理人さん持ってるかなぁ……。
>>603 >IDでの指定なので、どのファイルがどのIDなのか覚えるのが面倒となってしまい使いにくいorz
IDをファイル名と同じにするとか分かり易い名前に変えてしまえばいいだけでは?
最近バージョンだと何か問題でもあるのか?
608 :
名前は開発中のものです。 :2010/01/13(水) 15:49:43 ID:Yyh3OrXE
DXライブラリが最新バージョンだと動画をLoadGraphで読んでPlayMovietoGraph使って表示したとき透明色が適用されない (といっても透明色にするにはエンコード方式は古いMicrosoft Video 1くらいしか使えない諸刃の剣)
俺が過去に作ったゲームを最新のDXライブラリでリコンパイルすると透過色が無視されるてるなー。
孔明の罠
611 :
名前は開発中のものです。 :2010/01/13(水) 17:47:10 ID:b/PQw5gR
>>604 その通りです。
ロードする際に使った文字列を、ハンドル代わりにつかっているので、
メリットとしては、指定をいちいちしなくてすむので楽になります。
たとえば、
Draw("hoge.png");
とかで、色々操作できるような設計にしています。
Win32APIの関数でできるのですか。
直接MSDNから探し出すスキルがない残念スキルですが、調べてみようと思います。
>>606 おおなるほど、これは盲点でした……。
>>611 良い方法じゃないかもしれないけど、マクロと
stringかsprintf系の関数使って文字列つなげば
一応Load()には、ファイル名渡すだけでもすむよ。
//--------------------------------------
#define HOGE_PATH "..\\iData\\img\\"
void Hoge::LoadData(const char* data_name)
{
char path[255];
sprintf(path, HOGE_PATH "%s.png", data_name);
Load(path);
}
//--------------------------------------
みたいな感じで(エラー処理とかは省略)。
ちなみにHogeのコンストラクタ内とかで、APIのFindFirstFile()
とか使って、フォルダ内の任意の形式のデータ名を列挙して
読み込むようにすれば、Hogeの生成時にpngの形式だけ自動で
読み込むとかも可能。
ただスクリーンショット取れるゲームとかでない限り、画像
データの名前や数は変わらないはずだから、ハードコーティング
するよりパス含んだデータ名を列挙したテキストとかを作って
おくのがいい気もする(もちろんこれも手動では作らない)。
そうしておけば、画像の数とかに変更あってもプログラムの方は
何もいじる必要ないし。
なんというレベル・・・
俺はstd::mapを使ってるな。値を画像ハンドルにしてる。 キーを文字列にすれば分かりやすいし。
同じファイル名が来ることはないのか
画像ファイル名一覧(分割するなら分割数なども)を
外部のテキストファイルに置いて、それを読み込む手法は便利ちゃ便利だし美しいな。
ツクール系や画像ビューワなどのアプリを作りたいというなら別にしても、
結局、その画像を使うにはプログラムの修正が必要だったりするわけで、
そこまで外部化するメリットが無い気がする。
それならファイル名をプログラム側で固定してしまうというのも十分アリじゃないかな。
「趣味で!」「勉強のため」というなら好きにやるべきだし、そういうこだわりは重要だと思うけれど。
>>615 拡張子無しとか、拡張子を固定するとか、
あとは最初はbmpで次はjpg…みたいに読み込む優先度を決めておくとか。
617 :
616 :2010/01/14(木) 02:42:40 ID:Y9GNPZz3
送信してから思った。 最近は個人レベルのゲームプログラミングでも、 ゲームの内容を外部のスクリプトファイルで定義するスタイルが増えてきてるみたい。 全部をスクリプト化しろとは言わないけど、 例えばメニュー画面の挙動とか、何らかのキャラクターのアニメーションの仕方とか、 そういう部分的にでも外部に出しちゃう作りにすれば活かせるかもね。 まあ、非常に手間ですが。
外部ファイルにパスや必要な情報書いて読み込み、 それをクラスに格納して処理、コンテナに追加して保持、分割も自動でやってる ハンドルはアドレスをクラスに用意したポインタのメンバ変数に格納して 再ロードしても画像ハンドルへのアクセス先は変わらないようにしてる SetRestoreGraphCallbackに↑で書いたコンテナから再ロードする関数登録 ハンドルの情報が消えてしまうときって、それまでに画像読み込んで取得したハンドル全て消えるよね? 何が消えるかよくわからなかったから 描画関係全て再設定させてるんだけど、皆さんは再ロード処理どのようにしてますか?
>>618 >ハンドルの情報が消えてしまうときって、それまでに画像読み込んで取得したハンドル全て消えるよね?
まずこれがよく分からない・・・
リファレンスに全部書いてあると思うけど。
621 :
名前は開発中のものです。 :2010/01/14(木) 12:57:05 ID:GEhjs3wb
ドラクエとかマップとかキャラ動かすプログラムは1個つくったら 流用が基本だよな あとはちょくちょく改造 現にSFCのドラクエ3ってSFCドラクエ6の流(ry
622 :
618 :2010/01/14(木) 12:59:53 ID:DPt8d+Sq
ごめん、書き方悪かった 何が消えるってか何が初期化されるのか、 ハンドル以外にもあったようなのでそれもききたかった (DXライブラリのスレだったかな?カメラがどうとか) ってハンドルは全て消えるよね・・・ で、リファレンスに全部書いてあるのか 見落としてたっぽい、すまねえ見てくる
623 :
名前は開発中のものです。 :2010/01/14(木) 13:11:27 ID:GEhjs3wb
ffshowの取り込み機能使うと紙芝居のような連番のjpgが作れる (例:0.jpg〜1000.jpg (画像の形式:jpgにフレーム番号の桁数は0に設定)) (画像の形式はpngやbmpとかできるけどファイル容量が馬鹿でかくなる) プログラムテストで使う大量の連番JPG1個ずつくるのめんどせーって人はおすすめ
俺も各クラスの画像にはハンドルのポインタ渡して ウィンドウ⇔フルスクリーンにするときとか再ロードする場合は一括でやれるようにしてる
めんどくせーのでエスパーすると ハンドル情報が無効になった場合の対処でよろしいアルか?
626 :
618 :2010/01/14(木) 21:00:02 ID:DPt8d+Sq
いやもう、まじでわかりづらくてすまん
>>624 と同じやり方だし、これはこれでいいかな
カメラもライトもモーション状態も全部復元できた
つーわけでスルーしてくだされ
更新通知はオブザーバーパターンかな
WinSockを使ってオンラインのゲームを作りたいと思っています。 非同期通信にした後、 ウィンドウメッセージをどうやって受け取ればいいのでしょうか
通信とウィンドウズメッセージ処理は別スレッドで
bccとvc++以外のコンパイラで使いたい場合はDLL化するしかないかな?
C#用のDLLが使える 普通のCインターフェイスだから
632 :
628 :2010/01/16(土) 16:27:15 ID:rUwaGg5H
開発環境はVisual Studio 2008 Express Editionです。 >通信とウィンドウズメッセージ処理は別スレッドで これは、マルチスレッドにする、ということでしょうか? あと、ウィンドウメッセージを受け取るにはPeekMessage関数を使うのでしょうか?
まだ、はやい
どうにかgifアニメを表示できないでしょうか?
ばらして一つ一つ表示すれば
コマごとに読み込んでハンドルを配列に入れて回しながら表示してみろ
みんなアニメーションの抽象化ってどうやってんの?
>>637 デザ・・・と言いたいところだが、キチガイ扱いされるので言わない^^b
アニメーションの抽象化ってなに。
14歳に乗ってたな
ありがとうございます! gif自体がDXライブラリで表示できないみたいなので ばらしてbmpに変換して表示させます。
ソフトによってはgifアニメを書き出す要領でアニメーション用にずらっと並べた形で排出してくれるものもあるから要チェック
Giamっていうツールで分解してみます。 gifが表示できたらなあ・・・
gifの表示だけは諦めた方がいい と思ったけど何年か前にライセンス切れたとかだったっけ?
gifアニメ、 PlayMovie()で出来たはず。
>>645 うおおおおおおおおおおおおおおおおおおおおおお
できたあああああああああああああああああああああああああ
ありがとおおおおおおおおおおおおおおおおおおおお
playmovieが使えるのか、初めて知った
でもgifアニメ表示する利点というか利用価値が思いつかない
これは作者も知らないと思う、osの機能だから。
本当にありがとうございました。
ただのビューワを作ろうかと・・・
できないと諦めかけてたので
>>645 さんありがとう!
>>645 APIの旅からの帰還
お待ちしておりました
全員敬礼!
#define MAX_MOVIE_NUM (100) // 同時に持てるムービーハンドルの最大数 と、DxLib.hの中に書いてあったのですが、 この(100)の値を変えても100以上読むことができません 変更を適応する方法とかありますでしょうか・・・
ライブラリの改造で事足りました スレ汚しすまそ 以下スルーお願いします
俺は言われるとスルーできねえ太刀なんだよ どうしてくれんんだてめえ
キレやすそうだな。
真面目なかたなのね
太刀だけにキレやすいってか うまいこと言うじゃねーか
だれうま
おれうま
きみのためならうま
かゆ・・・うま・・・
昨日、この屋しきから逃げ出そうとした研究いんが一人、射さつされた、て はなしだ。 夜、からだ中 あついかゆい。 胸のはれ物 かきむしたら 肉がくさり落ちやがた。 いったいおれ どうな て May 19, 1998 やと ねつ ひいた も とてもかゆい 今日 はらへったの、いぬ のエサ くう May 21, 1998 かゆい かゆい スコットーきた ひどいかおなんで ころし うまかっ です。 4 かゆい うま
MV1GetFramePositionでフレームの座標取れた人いる?
>>663 何かそれと関連するような書き込みみた
MV1Frame系の根本辺りにバグでてるのかもよ
試してないから憶測な
SetWindowStyleModeのあと ドラッグ&ドロップが効かなくなるのは仕様ですか
#include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ char Key[MAX_PATH]; char File[MAX_PATH]; int open; bool flag=false; SetAlwaysRunFlag(TRUE);//アクテイブでも動作 if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK || DxLib_Init()==-1) return-1; SetDrawScreen(DX_SCREEN_BACK); SetDragFileValidFlag(TRUE);//ドラッグ&ドロップ許可 while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(Key)){ open=GetDragFilePath(File); if(open!=-1){ clsDx(); printfDx("%s",File); } DragFileInfoClear(); if(Key[KEY_INPUT_Z]==1){//zキーでスタイル変更 if(flag==false){ flag=true; SetWindowStyleMode(2); SetDragFileValidFlag(TRUE);//ドラッグ&ドロップ許可 } else{ flag=false; SetWindowStyleMode(0); SetDragFileValidFlag(TRUE);//ドラッグ&ドロップ許可 } } if(Key[KEY_INPUT_ESCAPE]==1)break; ScreenFlip(); }
DxLib_End(); return 0; } //ソースここまで スタイル変更のあとはどんなことやっても無駄でした。 なにか解決方とかありますでしょうか・・・
SetWindowStyleMode(2); SetDragFileValidFlag(FALSE); SetDragFileValidFlag(TRUE);//ドラッグ&ドロップ許可 SetWindowStyleMode(0); SetDragFileValidFlag(FALSE); SetDragFileValidFlag(TRUE);//ドラッグ&ドロップ許可 ほい
670 :
名前は開発中のものです。 :2010/01/25(月) 14:54:28 ID:RTDsX0xD
同じプログラムでもBCCとVCでコンパイルすると微妙に絵画スピード違う? BCCの方が重いんだが
絵画? 描画? まあ、別のアルゴリズムでビルドされている以上、違いがあってもおかしくはないな。 もしかすると最適化の設定とかもあるかもしれない。
描画の速度は同じだと思われるが最適化の性能はコンパイラによって大分違う っつっても今は両方同じくらいだと思うが 古いのは効率悪い
CPU メモリ グラフィックカード MMX 他のソフトが動作してないか などなど 条件を一致させるのは至難の技
>>669 ありがとうございます!
無事ドラッグ&ドロップがスタイル変更後も効くようになりました
なんだかくやしいです
隠し関数一覧とかないの? リファレンスに機能の半分くらい乗ってなくね?
そんなあなたにおすすめ、DxLib.h
既に見ながら発掘してるけど、使い方分からんのが沢山あるし。
678 :
名前は開発中のものです。 :2010/01/26(火) 03:09:22 ID:p39VC7Ub
LoadSoundMem("ファイル名"); SetSoundCurrentTime(時間,サウンドハンドル); PlaySoundMem(サウンドハンドル,DX_PLAYTYPE_LOOP,*2 BGMを最初から再生するかというフラグ); *2 TRUEで最初から再生(デフォルト) FALSEで途中から再生できる int bgm; bgm=LoadSoundMem("a.wav"); SetSoundCurrentTime(5000,bgm); PlaySoundMem(bgm,DX_PLAYTYPE_LOOP,FALSE); a.wavの5秒後から再生する(BGMファイルの曲の長さ仮に5秒以内のファイルなら最初からになる ・・・と思う)
>>677 内部用の関数だったり、試験的に実装した関数なんかが多いから、
公式リファレンスが無いのは仕方ない。
仮に第三者がリファレンスを作ったとしても、
内部用関数である以上、いつ仕様が変更されてもおかしくないわけだし。
…以前、DXライブラリのWikiを作ろうとした人がいたけれど、あれどうなったのかなあ。
DxLib.hにはしっかり丁寧にコメントが書かれてるし、実用レベルでそんなに困ることはないと思うけどな。
コメントを読んでも意味がわからない関数は、たぶん今の自分には関係ない関数だと思っていい。
680 :
名前は開発中のものです。 :2010/01/27(水) 02:10:49 ID:+9fTCg9n
まあ PlayBeep()なんて 誰得な関数もあるしな
それってBeep音鳴らすの? だとしたらエラーの警告音とかに使えそうじゃない?
エラーが発生したなら、素直にOSへ投げた方が良さそうだしなあ。 Beep音に限らずね。 逆に、ゲーム内で「エラー」の演出をしたいというなら、 それ専用のサウンドファイルを用意するべきだろう。
SetDrawBlendMode( DX_BLENDMODE_ALPHA, 128); LoadGraphScreen( 30, 10, "a.bmp", TRUE); SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0); をやると一気にfpsが小さくなるんだけど、それを避ける方法ある? 丁寧に教えてください。断片じゃ分からないんで。
ハハッ 公式見てこいよ 根本から間違ってる
ハハッワロス
宣言 int LoadGraphScreen( int x , int y , char *GraphName , int TransFlag ) ; 概略 画像ファイルを読みこんで画面に表示する 要するに、ハードディスクから画像を”読み込んで”表示するわけだ。 毎フレーム、データ読み込んでたら重くなるの当たり前。
違う! αブレンドのやり方はそれでいい! 一つ訊きたいが、fpsがどうとか言ってるって事は、ある程度形は出来てるんだよな? アクションかシューティングか、何作ってるのか知らないけど。 てことは、キャラなりなんなりを毎フレームに表示させてるんだよな? そのキャラを表示する時に LoadGraphScreen を使って表示してるのか!?
君はさ、学校に通う時、 朝、本屋へ行って教科書買って、学校行って勉強して、終わったら教科書捨てて、 次の朝、また本屋で教科書買って、学校行って勉強して、終わったら教科書捨てて、 また次の朝、本屋で教科書買って、学校行って勉強して、終わったら教科書捨てて…… ってやるか? やらないだろ? 毎フレーム LoadGraphScreen を使うってのは毎日教科書買ってるようなもんなんだよ。
>>688 キャラはDrawGraphで表示してる。
オプション画面に切り替えた時、点数などを表すボードみたいものに
LoadGraphScreenを使ってる。だから、ゲームには影響ないんだけど。
オプション画面に切り替えた時fpsが一気に下がって気になって今回
聞きました。
>>690 オプション画面に切り替えたら画面停止でもすんの?
プログラムのフロー分かってる?
最初に表示するとき一回ロードしておいて、それを毎フレーム描画するようにすればいいだろう
私のために争うのはやめて!
>>691 それはしない。一気にfpsが落ちる。ブレンド処理で。
単にTフレームごとに作画してScreenFlip()で表示してます。
>>692 詳しくおねがいします。
全部DrawGraphですればいいんじゃないかなぁ? アハハハハハハハ!
>>695 ブレンド処理したいんですけDrawGraphでも可能なんですか?
>>696 てめーなに中だよコラ
リファレンスに目を通してから質問しろカス
あのさ↓の意味ちゃんと解って使ってる? SetDrawBlendMode( DX_BLENDMODE_ALPHA, 128); LoadGraphScreen( 30, 10, "a.bmp", TRUE); SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0); 1行目で「これから描画するものはアルファブレンドモードにしますよ」 2行目で「a.bmpを読み込んで描画しますよ」 3行目で「これから描画するものはブレンドなしにしますよ」 ってだけだよ?
DrawGraphでもブレンド処理可能みたいですね・・・。 ありがとうございます。
まあ常識的に考えてブレンド処理なんて頻繁に使われるものがDrawGraphで使えないわけないわな
702 :
名前は開発中のものです。 :2010/01/27(水) 17:37:50 ID:SU7TxAxC
int zeikin[1000000]; int amakudari; for(amakudari=0;amakudari<1000000;amakudari++){ zeikin[amakudari]=LoadGraph("官僚.bmp"); }
だいたい4MBくらいか。たいしたことないな。
小手先のテクとかはそれなりに分かってきたと思うんだけどゲームの作り方が分からん うーんバイトでも探して勉強させてもらおうかな。でも使えないバイトとか来たら迷惑かな
>>704 そもそも採用してもらえないと思うけど・・・
どこまで作れるのか知らないけど解説サイトも本もいっぱいあるし、いくらでも勉強できると思うんだけどなあ。
むしろ小手先にテクニックの方が理解は難しいと思うが。 いったいどんなゲームを目指してるんだ。
シューティングで勉強してるけど思うようにいかない とりあえず自機も敵機も○で表現して 直進する玉を打ったり衝突判定したりとかなら一応できたんだけど なんか死ぬほど処理が重いし(処理落ちしまくり)、拡張しにくそうだし 機体のパラメータデータとかステージデータの扱い方とかもわからないし 今はちょっとハードルを下げてインベーダーに変えようかなと思ってる
龍神録は見たか?
>>707 どこの部分で処理食ってるか調べるんだ。
「衝突判定」が怪しいから、衝突判定を飛ばしてみて
処理落ちするかどうか確認するとか。
>>708 まだなので、ちょっと読んできますね
>>709 というかボトルネックは衝突判定と玉の生成破棄ぐらいしか思いつかない
モートン順序とかネットで読んだりしたけどなかなか理解と実装までいけないですわ・・・
dxlib使ってる環境で衝突判定による処理落ちはあまり考えられないんじゃないかなあ 俺はloadgraphとか自発的なSleepを疑う
重いのは上司と女のケツ
足りないのは知識じゃなくて情熱
PCのスペックも分からんし、 「死ぬほど重い」がどれくらいなのかも分からない(FPS60で重いと言う人だっている)、 ゲームの内容もさっぱりだしなあ。 それでもプレイ出来ないほど重くなるとは考えにくいんだが。
LoadGraphScreenをしてる、とか? 知り合いがなんか思いって言ってたからソース見たら、毎フレームスクリーンショットを取るという謎な動作してたりした。 ぶっちゃけ、重いってのはなんか変な事してるんだと思うよ。
何が変なことかわかる経験をお持ちでないから仕方が無いことよ
俺も低スペックPCだと重くなる。 それもFPSがなぜか半分になる。 ウィンドウがノンアクティブでも動作する設定にしてノンアクティブにしたときの動作と似ている。 DXlib特有の何かがあるんだと思う。
ソースっていうかプロジェクトうpったらアドバイス貰えるかもね ソース晒すの抵抗あるだろうし、個人的にVC++かVSじゃないと困るけど
画像Aの(x, y)に画像Bの(x1, y1, x2, y2)を転送ってできます?
うん
>>710 思いつく思いつかないじゃなくて
各セクションごとの消費時間調べて
どこがボトルネックなのか調べるぐらいはすべき
PCのスペックも分からんし、 「死ぬほど重い」がどれくらいなのかも分からない ゲームの内容もさっぱりだしなあ。
昔、STGの敵を一体だけ出してテストしてたときに 妙に動きが重いなーと思ったら 300体の敵がピタリ重なって表示されていた
俺もあったなw
あるあるw
>>720 すいませんそれは一体どうやればいいんでしょう?
SetDrawScreen(handle);
Draw〜〜
とやってもバグってウィンドウの外に描画されてしまいます
SoftImageって遅くないですか?
使い方による
そもそも早さを気にするような関数なのか?
ソフトイメージ使ってみました これは便利なものですね しかしCreateGraphFromSoftImageで変換しないとアルファブレンドができないのが難点ですね
そもそも変換して使うもん しないと君の言うとおり非常に表示が遅くなるよ
おや、FillSoftImageがバグってますねこれ
ID:zzrUYLD6 (#^ω^)ビキビキ
愚痴ならチラシの裏にでも書いとけよ
馬鹿な発言からして*SoftImageの解説を読んで無いな
ID:zzrUYLD6 (#^ω^)ビキビキ
>>739 言いたいことが有るならハッキリ言ったらどうです
コピーアンドペーストしかできないというわけではないんでしょう?
>>733 バグがあるって言うなら、ちゃんと症状を書いて欲しい
ちゃんと検証をしないでバグがあるって言うのは荒らしと同じだよ
どう考えてもこいつの仕様把握ミスか使い方間違ってるかだけどな
会話で否定から入るタイプ 礼を言わない自分のことばかり
こういう奴はなぜか自分が嫌われてることに気づかないんだよなw
もうそのへんにしとこうぜ。
>>743 に問題が有るとして、それを指摘できるレベルの人間はここにはいないと言うことでよろしいでしょうか?
もし問題がないのなら、私に対していわれのない批判を向けた人たちは謝罪するべきです
私はそれが社会人としての最低限のマナーだと考えます
何かモノを教えてもらった際にはお礼を言いましょう 私はそれが社会人としての最低限のマナーだと考えます
そもそも何がしたいのかわからん
>>747 >もし問題がないのなら、私に対していわれのない批判を向けた人たちは謝罪するべきです
俺は静観してただけだから無関係だが、
説明しなければ批判受けてもしょうがなかろう。
DXライブラリをビルドできる環境が無いのでなんとも言えないが Ver 3.01 での NS_FillBaseImage関数 (DxBaseImage.cpp の5124行目あたり) で DWORD の Color が WORD にキャストされているので、ARGBのうち、ARが捨てられている気がする このキャストをなくせばいいんじゃないかなー
>>751 DWORDに修正してビルドし先のコードで試したところ正常に動くようになりました
丁寧に修正箇所も教えていただいて、どうもありがとうございました!
馬鹿ばっかり・・・
>>754 | |/ノ二__‐──ァ ヽニニ二二二ヾ } ,'⌒ヽ
/⌒!| =彳o。ト ̄ヽ '´ !o_シ`ヾ | i/ ヽ !
! ハ!| ー─ ' i ! `' '' " ||ヽ l |
>>754 ',::r、:| <●> <●> !> イ
|:、`{ `> .:: 、 __ノ
|::∧ヘ /、__r)\ |:::::|
アニメーション作りたかったから double owari; do{ DrawGraph(0,0,player[3],TRUE); DrawGraph(0,0,player[4],TRUE); DrawGraph(0,0,player[5],TRUE); DrawGraph(0,0,player[6],TRUE); owari = FALSE }while(owari = TRUE); やったらパソコンが動かなくなったよ! 誰か助けて
owari==true
出来ました!! ありがとうございます しかし画像が動いてない・・・
そりゃScreenFlip挟んでないからな…
画像も動いたし一件落着かと思ったんですが double owari; do{ SetDrawScreen( DX_SCREEN_BACK ) ; ClsDrawScreen() ; DrawGraph(0,0,player[3],TRUE); ScreenFlip() ; WaitTimer(500); ClsDrawScreen() ; DrawGraph(0,0,player[4],TRUE); ScreenFlip() ; WaitTimer(500); ClsDrawScreen() ; DrawGraph(0,0,player[5],TRUE); ScreenFlip() ; WaitTimer(500); ClsDrawScreen() ; DrawGraph(0,0,player[6],TRUE); ScreenFlip() ; WaitTimer(500); owari = FALSE; }while(owari == FALSE); これじゃあゲームが終わりません 誰かアニメーションの書き方を教えてください
ClsDrawScreen(); static int a = 0; DrawGraph(0,0,player[3+a],TRUE); if(a<3)a++; WaitTimer(500); ScreenFlip() ;
ありがとうございます 試してみたんですが、画像が動いてくれません これはwhileの中に入れて使用するんでしょうか?
コピペするだけじゃなくて、その命令の意味をよく考えてみよう。
とりあえず龍神録読んで来い
それ以前にリファレンスを嫁 あんだけわかりやすいのがあるんだから・・・
基本的な考えを理解してないな。 例えば絵が1ドットずつ動くプログラムだとすると 座標0に表示 ↓ 座標1に表示 ↓ 座標2に表示 ↓ 座標3に表示 ↓ : って書くんじゃなくて(これは>761の書き方)、 座標xに表示 ←―┐ ↓ | xを+1する | 繰り返す ↓ | └―――――┘ って書くのを意識するといいよ
かわいいなw
double owari; do{ ClsDrawScreen(); static int a = 0; DrawGraph(0,0,player[3+a],TRUE); if(a<3)a++; WaitTimer(500); ScreenFlip() ; owari = FALSE; }while(owari == FALSE); こうやってみました aが0に戻らなくて[6]がずっと表示されてしまいます あと、できればdo{}while();は使いたくないです
static intがまずいんじゃなか?
>>769 >aが0に戻らなくて[6]がずっと表示されてしまいます
わかってんならaを0に戻せよ…
whileでもforでも好きなもんを使えよ…
>>764-767 無視すんなよ…
まずはC言語勉強してこい
アニメーションでなく根本的な所から理解出来てない 龍神録一通りやってゲームプログラミングの基礎を学べ
すいませんでした まだ自分はなにも理解していないみたいなので もう一度最初から学び直してきます みなさんありがとうございました
a=3になってるから
>>770 >>772 >>773 if(a<3)a++;
if(a>3)a=0;
こうしたんなら a=3 の場合はどっちも掛からないから a=3 のまま止まるわなあ
>>777 >>778 if(a>=3)A=0;
にしたらきちんと動いてくれました!
でも学び直してきます
ありがとうございました
>>776 ありがとうございます
次からはそこで質問しますね
うそです Aじゃなくてaです
このライブラリって64bit windowsでも 問題なく動くの?
動かないんじゃね? ライブラリをDLLにすれば動くかも
なんで?
普通に動くよw ネイティブでって意味ならたぶん動かないけど、そういう事じゃないだろ?
ゲームが実行出来るかじゃなくて 正常にビルド出来るかって意味かと思った つーかそれだとDLLでも動かないねすまん
ビルドもVSとか使ってるなら通るはずだよ 俺この間までWin7の64bitと、XPの32bitで出先<->家での開発してたし
本体のビット数とDLLのビット数が違うとダメだけどね。 DXライブラリでもゲーム制作の話でもないけど この間それで問題が起きてね……w
なんで?
なんだっていいさ
long doubleとか使って試せば 787かいいたいことがわかるとおもう たぶん
いや、32bitアプリからは64bitDLLは使えないし 64bitアプリからは32bitDLLは使えない。 だから通常、DLLまで用意する場合じゃ無けりゃ32bitで作ればいいんだけど .NET FrameworkでAny CPUで作った場合はまることがある。 DLLはネイティブで32bit固定なのに、EXEは実行環境によって32/64変わるから 開発時の環境が32bitだと気がつかない。 ということじゃないかなあ。
それで?
ググレカス
libを32bitで作って64bitマシンでコンパイルしたオブジェクトとリンクしても問題ないの?
なんで?
ビルド時のターゲットはビルド環境とは関係ない
「64bitマシンでビルドする」というのと、「64bit用アプリとしてビルドする」というのは別物ってことよね。 コンパイラが対応しているかどうかは別として。(比較的最近のVisualStudioなら問題なし) もちろん、32bitでも同様。 で、開発マシンが32/64問わず、 64bit用としてビルドしたアプリ本体 + 32bit用としてビルドしたDLL → 動かない 32bit用としてビルドしたアプリ本体 + 32bit用としてビルドしたDLL → たぶん動く であると。
それで?
なにが?
つーか64Bitアプリにするほどメモリ使うゲームを作るのかと。
なんで?
基本的には32bitアプリでも動くって話だけど その基本的って部分がちょっとだけ気になる。
64BitOSで動かすことを気にしてるなら 従前どおりの32Bitアプリが何の問題もなく動くので徒労。 メモリを4GB以上使いたい場合以外にあえて64Bit化する意味は薄い。
シューティングの画像ってサイズ奇数にして中心にオブジェクトのxyを持ってきた方が作り易い気がするんだが、みんな普通にx1y1x2y2でやってるの?
場合による。 長方形のキャラ(回転なし)とかだと後者の方が便利だし。
なんで?
お前を食べるためさ!
変態
DxLIBだとインストール済みのフォントデータしか使えないのかな? 思っていたより使い勝手悪いな…
よくわからんがフォントリソースとして読み込んでから使えとか見た気がするな
d AddFontResourceを使ってゲーム起動時に追加出来た
思っていたより使い勝手悪いな…
DXLIBのデータファイルの暗号化機能を使おうかと思うんだけど パスワードってリテラルでEXEに埋め込んじゃってダイジョブなん?
思っていたより使い勝手悪いな…
なにがどう大丈夫なのか解らんが、 自分で何とかできないのなら諦めて普通に使うしかないだろう。
いや、キーがバイナリエディタとかで見えちゃうんじゃないかなと思って・・・
>>816 ようは
「入力された文字」==「キー」
ってやってもだいじょうぶかきいてるんだろ?
キーはみえる
乱数とかつかって謎の文字列を生成する関数とか作って それをキーに使ったほうがわかりにくくていいんかな
自分でそれができるのならやればいいのでは。 どうしてそこまで隠したがるのか知らないけど。 俺は、俺の作ったゲームをプレイした人が 「このゲームの生データ見てみたい!」 って思ってくれるほど魅力があるデータを作れた自信がないから そこまで心配はしてないな。
>>816 暗号鍵を何かでエンコードしてリテラルとしてソースコード埋め込んどいて、SetDXArchiveKeyStringにデコードして渡すとか?
暗号化の機構と、暗号鍵と、暗号化の対象が全て一箇所にある以上 どうしようもない気はする
822 :
名前は開発中のものです。 :2010/02/05(金) 16:46:58 ID:N9JJZcSG
キャラのポリゴン数ってどれくらいが理想? 今のところ10000ポリゴンはあるんだが。 ちなみにメタセコでCark(分割)4の曲面化つかったデータね ちなみに胴体だけです これじゃ動かないかなあ
みんな画像や音声のロードってどうしてるの? NowLoading...のアニメーションを動かしながらロード、ってのをしたいんだけど、 読み込みとアニメーションを並行してやる方法が分からないんだ
マルチスレッドじゃね
>>823 1フレームに1つずつファイルを読み込みながらアニメーション表示させる。
マルチスレッドを使ってもいいけどこっちの方が簡単。
>>825 公式の掲示板の過去ログで、2007年にLoadGraphはマルチスレッドに対応してないみたいな事を管理人さんが・・・
>>826 音声ファイルとかだと1フレームの間にロードし終わってくれますかね・・・?
俺も
>>826 の方法だけど
たしかにちょっと止まるな
起動時に全部読み込んで後でNowLoadingだけ表示しとけばいいんじゃね
本末転倒w
個人的な感覚でだけど
>>829 の方法が可能ならこれでいいんじゃないかな。
そもそもプレイヤーにストレスを与えないようにするのが目的だし、実際「NowLoading...」と表示しておきながら読み込み以外の処理もしてたりするしね。
あと
>>826 の方法は確かに処理落ちする可能性はあるけど何か問題あるの?
どうせプログレスバーを表示させるぐらいじゃないの?
>>831 起動時に全部読み込むと、読み込みファイルのサイズが大きくなったときにちょっと・・・。
できるだけ逐次ロードしたいから・・・。
あと、最初に読み込もうとすると数秒止まっちゃって、それが気にくわないというかストレス。
マルチスレッドなしならなうろーでぃんぐはアニメーションさせないのが一番
i=0; なんかループ{ なんかロード1コ なんかナウローディングとか表示 なんか四角とか描画(x, y ,x+i, y); 画面更新 } CとかDirectXライブラリの記述方法は忘れた
DXライブラリはともかく、Cの表記とゲームプログラミングの作法は忘れんなw
ファイル単位で読み込もうとするからデカイファイルのせいで処理落ちするコマが出てくるんじゃね? while(!end()) { read( Nバイト ); draw(); } これならフレームレート安定するだろう でもわざわざ読み込み速度を意図的に落としてまでやるべきなのかは疑問
DXライブラリで >read( Nバイト ); ってどうやんの?
スレッド使ってロードしようとしたらエラー吐いて落ちた・・・。
やっぱりLoadGraphはマルチスレッド対応してないってことなのかな・・・。
>>839 kwsk
自己満足で!(超重要
スレッド系はきっちり作らないと他人の環境限定で ある日突然落ちたりしてデバッグで泣くことになるぞ。 CPUのコア数によって出たり出なかったりとかするからな。
Now loading...のアニメーションを動画にしたらどうかな?
その動画を読み込ん出る間のNow Loading画面が欲しくなるね!
Now loading...をLoading Complete!に修正すればよくね
「ロードした」なら使ってもいい!
>>829 はネタのつもりで書いただろうけど、実際にやってる人を見たことあるよ。
静止画を表示しながら読み込み(2秒間)⇒「NowLoading...」(0.2秒)
本人曰く「ただ気分を味わいたかった」と。
でも実際のゲームを見てみるとプレイヤーからはそれは分からないし、むしろ「ロード早いなあ」という印象すら受けた・・・
これも一つの答えなんだと思ったよw
マルチスレッドを使う方法は↓に書いてある。
http://hpcgi2.nifty.com/natupaji/aska.cgi あと画像はLoadDivGraphで分割読み込みができる。
850 :
849 :2010/02/06(土) 07:48:32 ID:heYW4fwh
すみません。 掲示板のリンクがダメですね・・・ 記事No「1896」です。
>>849 LoadDivGraphで分割読み込み、ってアレはひとつの画像を複数の画像に分割するんであって、
分割してひとつの画像読み込むわけじゃないっていう
マルチスレッドの方は読んでみた
応用してやれないか試してみる
そもそも円滑にアニメーションさせる必要なくね? 要所要所で動作が若干止まったりしたほうが読み込んでるっぽくてユーザも安心するし
じじいの酷い言い訳
じじいくらべならまけませんよ?
855 :
名前は開発中のものです。 :2010/02/06(土) 14:19:32 ID:heYW4fwh
アニメーションの種類によるんじゃなかな?
読み込みの進捗を表示させるようなタイプなら
>>823 で多少カクカクしても問題ないと思うし、むしろマルチスレッドにすると同期を取るのがめんどくさいし。
逆にもっと派手なアニメーションだと処理落ちすると見栄えが悪くなるのでマルチスレッドにするしかないと思う。
ただ個人的には同人ゲームなら静止画で「NowLoading...」と表示させておくだけで十分だと思うんだけど・・・
静止画1枚だとフリーズしてんのかな?って不安になる
カクカクでもいいならマルチスレッド必要ないよな
せめてNowLoading... [ ココ ] で何かのアニメーションはさせたいよね
859 :
名前は開発中のものです。 :2010/02/06(土) 22:28:44 ID:fMJ0B1gK
そこは操気弾のアニメを
860 :
名前は開発中のものです。 :2010/02/06(土) 23:38:51 ID:cCb1U7aq
これって3dもつくれるんだよね? Blenderにも対応してる?
>>860 >これって3dもつくれるんだよね?
作れるよ。
>Blenderにも対応してる?
モデリングソフトの対応状況は過去レスを見てみて。
BlenderはFBXが使えるみたい。
メタセコで武器だけ作って、それを3Dのキャラモデルに持たせるのはどうやるんだろう。 DXライブラリの範疇ではないのかな。 なにか調べる取っ掛かりはない?
位置とか角度の親子関係を作れればいいんじゃないかな
>>862 DXライブラリは知らんけどリアルタイムレンダリングがデフォじゃない?
>>862 「コンストレイント」で検索してみるといいよ。
やり方は簡単で
>>863 の言う通り、「手」の移動と回転を「武器」に加えるだけ。
DrawChipMapってどうやって使うの
GetNowHiPerformanceCount()の内容をprintfしたいんですが%dの部分を何に変えたらいいですか
g
>>867 試してないけど戻り値がLONGLONG型なので「%I64d」か「%lld」じゃないかな。
>>863-865 サンクス!
やり方、納得です。
取り敢えず手の回転並進行列とって、そのまま武器に適用させてみる。
>>866 チップグラフィックを使ったマップ描画
int MapWidth, MapHeight : マップデータ全体の幅と高さ
int *MapData : マップデータが格納されたアドレス
int ChipTypeNum : マップに使うチップの種類の数
int *ChipGrHandle : チップのグラフィック配列のアドレス
int TransFlag : 透過色処理の有無
int MapDrawX, MapDrawY : 描画するマップの起点となる左上座標
int MapDrawWidth, MapDrawHeight : 起点座標から描画するマップの幅と高さ
int ScreenX, ScreenY : マップを描画する画面上の座標
(2004/02/08)
2.11 DrawChipMap 関数を非公開関数に変更。
1つの画像に対して、縦横で別倍率の拡縮、および回転を同時に行うとき、 何か簡単な方法って無いものかな? 拡縮してから回転させたときと、回転させてから拡縮するときとで結果が異なるけどさ。 無いなら無いで、自前で座標を計算してDrawModiGraph()に投げるつもりだけれど。
ないので俺は自分で関数作った
そっか、ありがと。
半透明処理で ClearDrawScreen() SetDrawBlendMode( DX_BLENDMODE_ALPHA, ・・・ DrawGraph(・・・ ScreenFlip() って書いたら、1箇所使っただけなのにかなり処理が重くなる DrawGraphが悪い? フレームスキップするしかない?
いや、俺普通に何箇所も使うけど重くなんないよ? 本当にその四行だけで試してみた?
フレームスキップは基本過ぎるだろ
>>877 ClearDrawScreen()
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 )
DrawGraph(・・・ // 普通の画像
SetDrawBlendMode( DX_BLENDMODE_ALPHA, ・・・
DrawGraph(・・・ // 半透明させるの画像
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 )
DrawGraph(・・・ // 普通の画像
ScreenFlip()
こうやってます
画像を重ねる都合上、
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) を2回やってます
もっと効率よい方法があるんでしょうか?
>>877 フレームスキップってどうやればいいでしょうか?
画面処理を別スレッドにして、処理時間オーバーしたら放棄、
でいいの?
>>880 ググれば幾らかサンプルコードが出てくる。確か龍神録でも触れてたと思うし。
PC上で動くゲームを作るのなら秒間60回更新するように調整するのは基本中の基本。
DXLIBに限った話じゃない。CPU使用率が異常に高かったりしたら間違いなくこっちの問題でしょ。
884 :
879 :2010/02/14(日) 21:58:05 ID:9DOaOyQ2
3番目の↓
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 )
DrawGraph(・・・ // 普通の画像
が処理を重くしてる原因だったので、これを削ることにしました
ありがとうございます
龍神録というサイトを初めて知ったので、質問してよかった
>>883 ありがとうございます
何故そこだけ問題があったんだろう。気になる。 >873だが、色々な変形に対応させようと思うと結構面倒だな。引数も増えるし。 回転と拡縮だけにしてしまうか。 ……とここまで書いて、 画像クラスを作ってしまえば簡単だということに気づいた。
平面だけでいいなら2*2行列に行列演算を繰り返して 最後にその4点にあわせてDrawModiGraphするってのが汎用的で記述もわかりやすくていいんじゃね? どっかからできの良い数学ライブラリ持ってきてもいいし 回転拡大スライド程度なら簡単な行列計算だけに絞れるから自分で作ってもいい
行列とか完全に忘れてて愕然とした orz
>>886 結局のところ、妥協して回転、拡縮、左右/上下反転の3つだけ関数にしたんだが、
どっちかっていうと、コーディングよりも設計に悩んでた。
変形する順番によって最終的な結果が変わる場合があるから、
それらに対応しようとすると、その分だけ引数も増えるわけで、結果として使いにくい関数になっちゃうのよね。
で、画像をクラスにして
ImageClass img;
//中略
img.rotate(3.14); //180度回転
img.extend(1.0,2.0); //縦2倍
img.rotate(1.57); //90度回転
img.draw(0,0); //0,0に描画
とかでも良かったかな、と思った。
・画像内での基準点の位置 ・上の基準点が実際に描画される位置 ・基準点を中心としたスケール ・基準点を中心とした回転角度 で十分だと思うけど
>>888 それだけで引数7つあるぜ?
各変形の優先度を決める(もしくは同じ変形を複数回行う)とか、
回転と拡縮以外の変形も出来るようにするなら、どれだけ増えるんだ。
回転と拡大縮小って別に順不同じゃね 基点となる座標が変われば別だが
>>890 ゲームの都合上、縦横で別々に拡大率を設定できるようにする必要があった。
正方形を、90度回転させてから、横に2倍
□□ → ■□ → ■■□□
■■ → ■□ → ■■□□
横に2倍にしてから、90度回転
■□
□□ → □□□□ → ■□
■■ → ■■■■ → ■□
■□
みたいに変わる。
>>891 それって渡す引数のほうを工夫すればいいんでねーの
二つ目は90度回転してから縦に二倍しても同じものを得られるわけだし
DrawExRotaGraph2(int x,int y,int cx,int cy,double ExtRateX,double ExtRateY,double Angle,int GrHandle,int TransFlag,int TurnFlag);
10個だな
>>892 質問、90度以外でも渡し方次第で出来る?
引数が多いと見苦しいし、書く順番でちょっと混乱しそう それに回転と伸縮どっちが優先か見た目に明らかじゃないのも気になる
なんに使うのかがそもそも想像できない俺……。
ようやく理解できた
3Dでやれば簡単だぜ
把握。 そういう力技、嫌いじゃないぜw
902 :
898 :2010/02/16(火) 10:16:29 ID:JDL3KQO6
すまん、いい例えが思い浮かばなかったんだw
名前間違えた、897だ
GetDrawStringWidthの第二引数StrLenはどういう意味があるのでしょうか? マニュアルには > StrLen として文字列の長さをわざわざ指定する ようにしたのは色々な側面から見て文字列の長さを指定できるよう にしたほうが良いと思ったからです。 と書いてありますが、どういうケースで指定が必要になるのか想像がつきません。
>>904 DXライブラリの作者さんがそう考えただけで、別に必要なければ使わなければいいだけでは?
例を挙げておくとこんな感じ。第二引数は指定できなくても書けるけど複雑になってしまう。
char Str[] = "今日もいい天気だ";
int MaxWidth = 50; // この幅に収まるように描画したい
int MaxChar = 0; // MaxWidthに収まる最大文字数
for( int i = 0; i < strlen(Str); i++ )
{
StrWidth = GetDrawStringWidth( Str , i ) ;
if(StrWidth < MaxWidth)
{
MaxChar = i ;
}
}
Str[MaxChar] = '\0' ;
DrawString( 0 , 0 , Str , GetColor( 255 , 255 , 255 ) ) ;
辛うじて一度だけ使った記憶があるな。 メニュー画面だったかな。文字列をセンタリングして表示するのに利用した。 文字列の前後に空白や記号がある場合、 それらも含めた文字数で横の長さを決めると、ちょっとズレて見えることがある。 ……ぶっちゃけた話、 他にも方法は色々あるだろうとか、メニュー画面くらい画像にしろよとか思うので 使う機会はあんまり無い気がする。
C/C++以外からDLL経由で使おうとするとnull文字で終わってない文字列とか渡すのに便利です
>>873 DrawModiGraph()とアフィン変換
アフィン変換 クラスでググるといいかもしれない
逆に文字列の長さよりもStrLenの方が短い場合とかに使うんじゃね? デバッグ文表示で最後まで表示しないで途中で切ることとかよくあるんじゃね?
アフィン変換か・・・左右反転と拡大縮小って同時にできるもんなんだな、しらなかった でもこれってソースになる元画像を読んでからやるの?格納してからメモリ上の画像をハンドルで指定して操作したりできるんだろうか
あ、左右反転もなのか DrawModiBillboard3Dのがいいと思う
>>912 いや自分は873ではないんだけれども、参考になったので書かせてもらった。横槍すまんね
DrawModiBillboard3Dって左右反転できるのか。x1を右上の座標、x2を左上の座標、x3とx4も同様に交換ってやれば反転するのかな?
ゲームで銃の連射中の音を作りたい 例えば 「ドッギュウン」て音声のファイルがあったとする。 そのファイルを使って単発発射で「ドッギュウン」、連射で「ドッドッドッドッドッギュウン」ってなカンジにしたいんだけど 音声の再生中かを CheckSoundMemで調べて、再生してなかったら再生してもヨシってすると案の定 「ドッギュウン・ドッギュウン・ドッギュウン・ドッギュウン」ってカンジになってしまう。 なので、ソレをナシにすると1ループごとに再生するんであまりにも早くて 「ドドドドドドドドドドッギュウン」ってカンジになる。 音声の再生位置を調べて、ある程度達してたら再生ってやろうと思ったけどそんな関数は無かった。 だから適当に変数用意して3ループ目ごとに再生ってカンジにしようとしているんだけど…(ゴチャゴチャする気もするが) 一般的なゲームの場合ってこういう時どうしてるの? 音声を二つ「ドッドッドッド」「ドッギュウン」用意して、ボタン押しっぱなし時は「ドッドッド」、離す・もしくは一押しの時は「ドッギュウン」とか?
ボタン押してる間「ドッ」をループ 離したら「ッギュウン」でいいんじゃねーの?
そんなめんどくさいことしなくても 弾の発射間隔を広げるか、数発ごとに発射音を鳴らすようにすればいいじゃん
弾を撃つと開始されるカウンタを作って そのカウンタが条件を満たしたとき音を鳴らせばいいんじゃないの? 1ループごとだと早すぎるんなら1おきにするとかもできる。
>>912 自前で変形させるなら、2Dでも3D(ビルボード)でも大差なくない?
>一般的なゲームの場合ってこういう時どうしてるの? FFのデータ見たら、あらかじめ重なった時の効果音も 組み合わせごとにいっぱい入ってて、意外だった とかいう話を、どこかのスレで見たような、見なかったような。 手間と配布方式とかによって変わってきそう。
>>918 カメラ使って視点操作で楽できるからじゃね?
ああ、なるほど。 カメラで視点操作ってことは、一括だよな。 メリットでもあるしデメリットでもあるという感じか。
DrawModiBillboard3Dって描画位置が変にならない? 前にDrawBillboard3DをDrawModiBillboard3Dにそのまま置き換えてみたら同じ位置に描画されなかったから使うのやめちゃったんだけど
アフィン変換ってのとDrawModiGraphでよくね? DrawModiGraphで左右反転は入れ替えで普通にできたよ。 アフィン変換の使いやすそうなクラス公開してたりするし、よくわからんまま使えそうだ。
スクリーンではなくバッファに描画するにはどうすればいいのでしょうか? 例えば、画像描画や文字列描画を組み合わせて描画する物である「メニューウインドウ」をバッファに描画して、 それを透過やら拡大縮小してスクリーンに描画したいです。
>>926 まさに求めていたものはこれです。
ありがとうございました。
dxlibで書き込める画像って作れるのか・・・ レイヤーシステムどうやって作るのか悩んでたところだよ
BaseImageでもやろうと思えば出来るんじゃない? SoftImageにも転送付いてたような
SoftImageは変形とかブレンドを自前でやんないといけなくて面倒だった気がする
>>897 の右側の魔法陣みたいな斜めにして回転、みたいな変換・表示するのにはどうすればいいかわからない・・・。
というか、アフィン変換した画像というか、DXライブラリでどうアフィン変換利用すれば良いかわからないんだけど、
誰か分かる人頼む・・・。
結局アフィン変換がよくわからずに、三角関数で画像を変形させた俺。 おかしいな、大学は理系だったはずなんだけどなー。 行列なんて普通に使ってたはずなのに…… orz
>>931 斜めにして回転って2Dでやるほうが難しいんじゃないかな。
DrawModiBillboard3Dってカメラ関数使って斜めから見れるん?
>>897 の魔方陣のように傾けて見れるならなんとかなりそうだけど。
いわゆる「習う」数学は公式を持ってきた後に「解く」からいけない。そこが重要だと思ってしまう 解くのは別にコンピュータがやればいい。大切なのは解き方
ひょっとして3Dつかって2Dゲーム作る方が楽なのかな 最近はそういうゲームも結構あるよね
DXライブラリ使ってるならまさにその方式を使ってることになるけど
>>931 つまり、画像を2回回転させて描画したいっていうことだよね?
DrawModiBillboard3D関数の引数x1, y1〜x4, y4に各頂点を2回回転させた座標を指定すればいけると思う。
ビルボードじゃなくてモデルとして扱った方が簡単なような気もするけど・・・
>>937 自分みたいに3Dサッパリな人間には、モデルデータを用意するだけでハードルが高いからなあ。
そうなると、従来の画像で扱えるビルボードの方が良さそう。
あとは動的に画像を生成するような場合(スクリーンショットとか)にも向いているかもしれない。
モデルデータを使わずにやるなら、素直に2Dでも良いわけだが。
939 :
937 :2010/02/18(木) 20:57:50 ID:S5tbEoCa
すみません、
>>937 に書いた方法はウソでしたorz..
引数x1, y1〜x4, y4は2次元の変形しか指定できないし、DrawBillboard3D関数にはある引数Angleも無いので3次元の回転は無理そうです・・・
モデルにすればMV1SetMatrix関数で自由に変形できるんだけど・・・
>>931 の作ってるゲームは2Dなの?
それなら斜めに傾いている画像を使って下さいw
2Dだとやっぱり事前に描いて置いておくのが一番なのかな
>>897 みたいな効果を多用するならともかく
一部でしか使わないならそのために複雑な仕組み作りたくないでしょ
2Dゲームなら、それこそ>937の方法で良いような気がするけどなー。
俺もblederで即死したけど メタセコなら普通に使えた
>>944 マジ感謝・・・なんだが、サンプルコードなくて使い方を迷う
すまん、付け忘れた extRate_xとextRate_yに1、hImgにグラフィックハンドル、残りの引数には0でも入れてくれれば とりあえず動くと思う。
俺がいつも使ってる拡張画像表示はこれ void DrawExRotaGraphF(float ex, float ey, float xScale, float yScale, float Angle, int GrHandle, int TransFlag, int TurnFlag) { int gx,gy; float ix,iy,ca=cos(Angle),sa=sin(Angle); GetGraphSize(GrHandle,&gx,&gy); gx*=xScale/2; gy*=yScale/2; VECTOR2D pos[4] = { { -gx, -gy}, { +gx, -gy}, { +gx, +gy}, { -gx, +gy} }; for (int i=0;i<4;i++) { ix = pos[i].x*ca - pos[i].y*sa; iy = pos[i].x*sa + pos[i].y*ca; pos[i].x=ix+ex; pos[i].y=iy+ey; } if (!TurnFlag) DrawModiGraph((int)pos[0].x, (int)pos[0].y, (int)pos[1].x, (int)pos[1].y, (int)pos[2].x, (int)pos[2].y, (int)pos[3].x, (int)pos[3].y, GrHandle, TransFlag); else DrawModiGraph((int)pos[1].x, (int)pos[1].y, (int)pos[0].x, (int)pos[0].y, (int)pos[3].x, (int)pos[3].y, (int)pos[2].x, (int)pos[2].y, GrHandle, TransFlag); } ていうかこのくらいDXライブラリも用意して欲しいところだが
あ、VECTOR2Dはオリジナルだった /* 2D用行列 */ typedef struct VECTOR2D { float x,y; } VECTOR2D; まあ使わなくても二次元配列なりで出来るけどね
949 :
944 :2010/02/19(金) 00:43:49 ID:zmDX76mU
2Dの描画関数群を見てると、Zバッファ版なるものがあるんだけれど
これって何か上手く使えないかな。
公式BBSだと、マスク処理に使うって話があったけれど…
>>947 やってることは自分と同じ…かな? たぶん。
そっちの方がシンプルなコードだがw
>>949 同じだね
縮小拡大前に回転するかしないかってのは入れる値を変えれば出来るし、縦の反転は180度回転させた後に左右反転すれば再現可能
自分はこれをよく使うので最低限のものだけを入れて、必要に応じてラッパー関数を使えばいい(まあこれ自体もmodiのラッパーだけど)
>>950 回転させてから拡大(縦横別倍率)ってどうやるの?
拡大率を予めsincosにぶち込めばいい 「回転を見越して拡大縮小する」
先生、その見越し方が分かりません
つかそういういくつもの変換を同時に適用するために 行列があるんだと思うが・・・行列を使わないなんて無駄に複雑になるだけだよ。
>>954 計算部分を自前でやってるだけで、やってることそのものは変わらない気がする
3D用の関数に行列使えるのがあるよ
上で話題にでてたアフィン変換だって2次元に特化した行列じゃんか クラス公開されててちょっといじれば簡単に使えるのとかあったぞ 行列うんぬんよりクラスがわからんとか?
頂点の集合に行列を演算してできた形に描画するのはいいんだが 長方形の画像を自由変形して描画するアルゴリズムはいったいどうやって実装されてるんだろう ピクセル単位で全部写像してたらすごく遅くなりそうだが他に方法も浮かばない
専用のハードウェアにやらせてるんだから爆速 アルゴリズムとかいう次元じゃない
>>957 3Dの方はあんまり見てなかったぜ。
これから勉強しないとな…。
>>958 クラスが分からないとかは流石に発想が飛躍しすぎじゃね?
>>959 テクニカルな最適化や、誤魔化しとかはやってるかもしれないけど、
基本的なやり方は同じで、あとはハードウェア様による力技なんじゃない?
LoadGraphを使う関数を繰り返し呼び出してると 例外が出て強制終了することがある 具体的には、 main(){ : : shop->open(); } とメインの関数からクラスのメンバ関数を呼んだとき、 openを十回くらい呼び出すと、openを呼んで最初に出てくるLoadGraphで強制終了する open内で何度もLoadGraphを呼び出しているが、最初のLoadGraph以外で強制終了したことはない 他のまったく別のクラスのメンバ関数でも、二回目に呼び出したときに 最初のLoadGraphで強制終了するので、 openでなくLoadGraphに問題があると思うんだけど そもそもどういう状況でLoadGraphが例外出すか分かりませんか? メモリ使用量を見る限りメモリリークなどはない ちなみに使ってるのはBcc版
具体的の意味わかってんのかカス
例外ってどんな例外? メッセージとか無い? 読み込んでる画像はどんな画像? ファイルサイズとかフォーマットとか。 メモリリークかどうかもどんな環境でどれくらいのサイズの画像を読み込んでるのか教えてくれないとこっちでは判断できない もっと詳しく
全く具体的じゃないのに具体的には、とはこれいかに。
何が例外出すか分かりませんか?だよ どういう状況で例外出すってエラーメッセージに全部書いてあるだろうが
エスパーしてみるに、 「最初のLoadGraph」に指定してるファイルが、 (1)形式的に未対応のものを指定している (2)指定ファイルの内部フォーマットがおかしい のどれかなんじゃないのかな? 「最初のLoadGraph」以外は成功してるって話だし。
DX_ライブラリ使っていたら いつもなら「ch.」(chは構造体)で設定したパロメータが表示されたのに 今日使ってたら表示されなくなった。これってどこの設定変えれば元に戻るの?
インテリセンスはよくぶっ壊れる
たまにJavaやるとEclipseの入力支援の賢さに感動する。
いや普通にVS2008の方が賢いだろ C++はダメダメだが
>IntelliSense 最近のは分からないけど、ちょっと変なことやると対応しなくなるしなあ。
973 :
962 :2010/02/24(水) 20:46:27 ID:qZkPMJuP
Bccのデバッガは見方がよく分からなかったのでVC++で原因を調べてみた 移植にかなり手間取ったけど、原因はnew,deleteでの HEAP CORRUPTION DELETEDだった ごめんよ、DXライブラリ
974 :
名前は開発中のものです。 :2010/02/25(木) 00:10:24 ID:wGlYMdYr
VS2008EEC#でDXLib使ってるけど、ゲーム開発はなんでC++が多いいのか・・・? C#使いやすいと思うんだが・・・
C#とC++と、どっちも知らない人間(俺みたいな)が始めようとしたら そりゃデフォルトで解説されてるC++使うよ。
976 :
名前は開発中のものです。 :2010/02/25(木) 00:40:37 ID:rlWr6nuc
>>974 >>975 素人はメモリ管理で苦労させられる
C#はライブラリの導入・セッティングまでも驚くほど簡単だ
むしろメモリ管理を隠蔽化されると不安になる
C#は動作速度どうなんだ? あと.NETないと動かないんだっけ それはどうでもいいが
979 :
名前は開発中のものです。 :2010/02/25(木) 01:15:00 ID:rlWr6nuc
>>978 今のPCスペック考えると動作速度気にするのは意味無いかな
同人レベルならFFやメタルギアのような実写モーションやるわけではないし
HSPよりは圧倒的に速いよ、ニコ動見てもHSP+Easy3Dで3Dアクション作ってる奴がたくさん居る
C#もJavaもゲーム製作には十分過ぎる
>>974 >>975 の理由もあるが、
単純に、C言語覚えたから次はorいよいよC++に〜とかって感じじゃない?
JAVAとかの経験がなければガベコレとかも知らないだろうし。
メモリ管理とかはまぁゲ製作以外で活かせる人なら勉強にもなるから良いやー、とか。
C#は解析が簡単なんじゃないの? 改造し放題だと市販のゲームには向かないと思う
>>974 公式サンプルがC言語で書かれているし、どれか一つ言語を覚えるとしたら自然にC言語になるんじゃないかな。
DXライブラリ自体もC言語で書かれてるしね。
>>981 難読化ツールというものがある。
それにC言語でも解析は可能なので市販する場合は独自に暗号化する必要がある。
特に画像、サウンド、シナリオテキストは見えてしまうとマズいので。
そりゃデータは暗号化するだろうけど、それは言語とは関係ない話では?
>>982 ぜってー使ったこと無いだろ>難(ry
あのスカスカ具合を見てから言えw
データも言語関係ないし
C++はWiondows標準のexeファイルを作成でき、そのまま実行できる C#やJAVAはWindows非標準の中間ファイルしか作れず実行環境のインストールをユーザーに説明し、納得させ、実行させなければいけない 余計なソフトのインストールを嫌うユーザーは多い 速度よりも何よりもこの差があるからC#やJAVAは選ばれない
インストーラーで強制インストールとかまんこい
デフォルトでインストール済()笑
>>983 どの言語にしても暗号化は必要と言いたかったのだけど・・・
>>984 >あのスカスカ具合を見てから言えw
どの難読化ツールを使ったか知らないけど、それでスカスカだと感じたんならしょうがないね・・・
そこまでセキュリティが必要なものを作っている人もいないと思うけどなあ。
>>981 現状の市販ゲームが改造し放題なのばかりなのに何言ってるんだ。
DXライブラリから話がずれてるぞ。
もっと単純に考えると ゲーム会社とかで使われてる言語は 圧倒的にC++が多いからじゃねーの? 趣味でゲーム作ってるだけって人も多いだろうけど ゲーム作ってる以上そっちに興味沸くのは当然だろ? よくわからんけどC#で製作されてるのって箱○ぐらいらしいじゃん そして箱○があの状況だし…
いや、常識的に考えて、3DゲームをC++以外で作るのは無理がある
C#でDxLib.dll使ってるとコードを書いてるときの違和感が半端じゃない。
わかる ラップしたくなるけどそんなことするくらいなら普通にDirectX叩いても大して変わらないし
すまん。
言いたかった事は、C#や.net使うと、意外ににC++でやってる様な小技が
簡単にできたりとか。
3Dとか使わないで、ノベルゲとか作るならC#+DXlibが楽だと思ったからなんだ。
>>994 頭にDX.付け忘れたり。
たいていDXライブラリ自体がボトルネックになるから言語なんか何使っても速度はそんなに変わらないよ
a
b
うぅぅい
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。