トップページgamedev
1001コメント397KB

DXライブラリ 総合スレッド 2008

レス数が1000を超えています。これ以上書き込みはできません。
0001名前は開発中のものです。2008/10/25(土) 17:37:53ID:BCFbbKco
Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。

DXライブラリの詳細ついては
http://homepage2.nifty.com/natupaji/DxLib/
を参照して頂きたい。

DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。

過去スレ:DXライブラリ 総合スレッド
      http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/
0974名前は開発中のものです。2009/03/29(日) 03:45:29ID:wJL07IJT
ごめん。TurboC++だったか記憶にない。CodeWarriorだったかもしれん。
どちらにしても15年前ほど前の事だったからたぶん今では問題ないと思う。
0975名前は開発中のものです。2009/03/29(日) 03:45:43ID:4SqorqSC
>>969
ふむふむ、全く問題ないのですね!
提示してくれたソースもよくわかるのですが、た…typedef…。
勉強不足のためなんとなくでしかわからないですがなんとなく分かった感じです。
こんな感じでもいいですかね?
class Hoge {
public:
void (Hoge::*pf)(int param);
void A(int x) {
if(x == 0) pf = &Hoge::C;
if(x == 1) pf = &Hoge::D;
if(x == 2) pf = &Hoge::E;
}
void B(int param) { (this->*pf)(param);}
void C(int param) { printf("C called:%d", param);}
void D(int param) { printf("D called:%d", param);}
void E(int param) { printf("E called:%d", param);}
};


int main(){

Hoge obj;
int i;
scanf("%d", &i);
obj.A(i);

obj.B(10);
return 0;
}
0976名前は開発中のものです。2009/03/29(日) 03:53:35ID:uaYHl2HP
大先輩!失礼いたしました…

あー、コンパイラのバグ……。そういうのは一度ふむと使わなくなりがちですな(苦笑)

状態遷移系の処理の他だと、半自動のバインド処理の類を書くときとかに、
テンプレートと組み合わせてばりばり使ってたりします。
0977名前は開発中のものです。2009/03/29(日) 03:57:18ID:uaYHl2HP
>>975
typedefは、宣言した複雑な型をシンプルに表記できて、
書き方覚えるととてもすっきりするので、時間あったら勉強してみてください

表記はそれで特に問題はないですが、その条件判定なら
switch つかったほうがいいと思いますです。
0978名前は開発中のものです。2009/03/29(日) 04:13:27ID:4SqorqSC
なんという頼もしいスレ…
起きててよかった。
勉強してきます=3
0979名前は開発中のものです。2009/03/29(日) 07:10:28ID:wuoKvdm5
まーたDXライブラリと関係ない話して。
初心者相手に技術自慢したいならc++関係のスレに行けばいいのに。
そこでは相手にもされない程度なのか?



DXライブラリ
0980名前は開発中のものです。2009/03/29(日) 07:26:38ID:vMEVjIQX
それだけのベテランがDXライブラリを使ってる(のだろう)事が驚き。

俺はCについてはド素人同然なので、いろいろ教えてもらえるのは助かる。
確かにスレ違いではあるんだが、DXライブラリを使ってること前提で
話をしたい場合もあるし。
0981名前は開発中のものです。2009/03/29(日) 10:08:36ID:BGS9yVjy
>>980
趣味でゲーム作ってるのが長い人には、Cの書き方でパパーッと書き上げる事もできるし、
(Windows95の頃から始めたような人なら短いものならOOじゃない方がある程度の大きさでも楽だったりするしね。)
3Dに手出す(主にデータ的な部分)のが面倒な人には、
余計なモンついてなくて2Dに特化してるのに、 変な癖が少ないから使いやすい。
あと、最初からゲームパッドとかに対応は何気に使えるし。

車輪の再開発をやってきた様な人には、
ソースもあるからちょっとだけ手を加えたい時とかも 其れが可能で、
わざわざRequestしないで良いのは、時間的にもモチベーション的にも良い選択肢。

初心者にも優しいライブラリだけど、其れだからといって
昔のHSPみたいに、他の言語知ったら使いたくなくなるような不自由さがあるわけでもない。
まぁ、DirectXバリバリつかうぜ!!って人とかには別だろうけど。
0982名前は開発中のものです。2009/03/29(日) 12:18:31ID:eagJL9bR
>>973
それバグでもなんでもねえし、
ポインタのサイズは変わらないだろ
0983名前は開発中のものです。2009/03/29(日) 13:11:06ID:Zf+/7kJf
普段はこのスレは過疎ってるから別にいいじゃないのか? DXライブラリでゲーム作るテクとしてメンバ関数ポインタを使うこともあるかもしれないしさ。

>>982
正確に書くと、継承した場合のメンバ関数ポインタのサイズが4バイトとは限らない(コンパイラ依存)
多重継承や仮想継承をしている場合、正しいポインタサイズを返すために8バイトや12バイトとなることがある。
しかし、昔のバグコンパイラではこの点が考慮されておらず必ず4バイト固定だった時代があり、派生や仮想関数を呼び出そうとするとアラインメントを調節する必要があった。
ということ。ポインタは必ず4バイトというのは早計だよ。
0984名前は開発中のものです。2009/03/29(日) 18:18:24ID:eagJL9bR
>>983
何故得意気なのか理解できんが、
それはサイズが変わるとは言わないだろ?
結局のところ、静的なサイズは確定している。
0985名前は開発中のものです。2009/03/29(日) 21:00:34ID:aWInPsJ8
>>984
RTTIしていると大問題。

なんか、微妙にスレ違いだし、
偉そうにしているといわれたようなので黙って老害は去りますね。
失礼しやした。
0986名前は開発中のものです。2009/03/29(日) 22:56:36ID:8b86AGfH
どこが得意気なのやら

で、次スレはどうするんよ
0987名前は開発中のものです。2009/03/30(月) 00:07:56ID:Ui9Ndm7F
DXライブラリ総合スレッドその3、で建てればいいんじゃね。
0988名前は開発中のものです。2009/03/30(月) 01:19:18ID:Y8nEXzvT
>>990頼んだ
0989名前は開発中のものです。2009/03/30(月) 01:54:36ID:1JQfO1aW
>静的なサイズは確定している

> RTTIしていると大問題。

会話になってねぇww
0990名前は開発中のものです。2009/03/30(月) 18:27:06ID:II/eiBAq
質問です

{
{   //1フレーム間での処理
  A  ;
  B  ;
  C  ;
}
ScreenFlip();
}

すごく大まかに言って↑このようにゲーム作ってるのですが
CheckHitKeyの判定ってって「フレームの最初のみ」に行われるんでしょうか?
それとも「ifの処理があるごと」なんでしょうか?

もし後者ならif CheckHitKey(SPACE)==1 みたいな処理をA部とB部両方に入れた場合、
Aが行われてる瞬間にSPACE離しちゃったら
Aは行われてBは行われないっていうことも起きちゃうんでしょうか?



0991名前は開発中のものです。2009/03/30(月) 18:39:19ID:x1tfO2A2
最初の大括弧はmainでその次はforとかのループの括弧か…?
0992名前は開発中のものです。2009/03/30(月) 18:42:02ID:b98OMwXU
int GetHitKeyStateAll( char *KeyStateBuf ) ;
を使えば起きない
0993名前は開発中のものです。2009/03/30(月) 18:43:28ID:II/eiBAq
>>991
そんな感じです。すみません。
>>992
ありがとう
調べてみます
0994名前は開発中のものです。2009/03/30(月) 18:46:45ID:x1tfO2A2
>>990
適当な変数にそのフレームで一回押されたか押されてないかを記憶しておけばいいんでは?

main{
int space = 0;
  while(うんたら){   //1フレーム間での処理
  if (CheckHitKey(SPACE)==1)space=1;
  A  ;
  B  ;
  C  ;
  space=0;
  ScreenFlip();
  }

}
0995名前は開発中のものです。2009/03/30(月) 19:18:36ID:9Ep+SxhG
>>990

「ifの処理があるごと」じゃなくて「ChecHitKey」が実行されるごとだけど、
ご想像の通り、1フレームに何回もチェックしてたら
Aでは行われてBでは行われないって事がおきるはずだね。

994さんが言われてるようにフレームの一箇所でだけチェックして記録しておくってのも手だけど、
やっぱり992さんの言われてるGetHitKeyStateAllが俺としてはお勧めかな。
これはこの命令だけで全てのキーの入力情報を記録するから、
フレームの最初に一回やっておけば、あとはそれを参照するだけでいい。
0996名前は開発中のものです。2009/03/30(月) 20:06:33ID:II/eiBAq
>>992
>>994
説明サンクス
上手くいきました!

>>995
なるほど、やはりでしたか。
それが原因のバグがでてましたがなんとか除けました。
0997名前は開発中のものです。2009/03/30(月) 21:58:12ID:9rT9QBj3
ume
0998名前は開発中のものです。2009/03/30(月) 21:59:19ID:9rT9QBj3
ume
0999名前は開発中のものです。2009/03/30(月) 22:00:03ID:9rT9QBj3
ume
1000名前は開発中のものです。2009/03/30(月) 22:00:48ID:9rT9QBj3
ume
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。