1read 100read
2013年05月ゲ製作技術16: DXライブラリ 総合スレッド その15 (352) TOP カテ一覧 スレ一覧 2ch元 削除依頼
Windowsゲームプログラミング 質問スレ (931)
NScripter Ver.18.00 (865)
ノベルゲー制作ツール 『らのべえ』 (819)
【XNA】1がアクションSTGを作るスレ【コントラ】3 (434)
【アイデア命#】配布型CGIゲームをつくろう (265)
フィアーゲーム 恐怖の作り方 fear game (398)

DXライブラリ 総合スレッド その15


1 :2013/04/02 〜 最終レス :2013/05/13
Cを習得した程度のスキルでも、ゲームのグラフィックを比較的容易に描画する事のできる、
「DXライブラリ」に関するスレッドです。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。
【公式】
http://homepage2.nifty.com/natupaji/DxLib/
【前スレ】
DXライブラリ 総合スレッド その14
http://toro.2ch.net/test/read.cgi/gamedev/1350618178/

【過去スレ】
01 http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/
02 http://pc11.2ch.net/test/read.cgi/gamedev/1224923873/
03 http://pc11.2ch.net/test/read.cgi/gamedev/1238429676/
04 http://pc11.2ch.net/test/read.cgi/gamedev/1249822550/
05 http://pc11.2ch.net/test/read.cgi/gamedev/1259912953/
06 http://hibari.2ch.net/test/read.cgi/gamedev/1267108154/
07 http://hibari.2ch.net/test/read.cgi/gamedev/1286180687/
08 http://hibari.2ch.net/test/read.cgi/gamedev/1301818631/
09 http://hibari.2ch.net/test/read.cgi/gamedev/1310904069/
10 http://hibari.2ch.net/test/read.cgi/gamedev/1313655495/
11 http://toro.2ch.net/test/read.cgi/gamedev/1322844235/
12 http://toro.2ch.net/test/read.cgi/gamedev/1330000532/
13 http://toro.2ch.net/test/read.cgi/gamedev/1339368894/
【関連スレ】
C/C++ゲーム製作総合スレッド Part1
http://toro.2ch.net/test/read.cgi/gamedev/1337516528/

2 :
>>1
スレ立て乙です

3 :
>>3げっと

4 :
詳細を記載した方がいいのだろうけど、まずは簡単な回答を頂きたいだけですので
簡素な内容で質問することをお許しください。
DXのサウンド機能の話なんですが、
ステージ中、あるオブジェクトが登場した時だけBGMを変えたいんです。
で、そのオブジェクトが登場した時に元々のステージBGMをストップさせ、
新たに鳴らしたいBGMをplaybgmしているのですが
実行されると無音になってしまいます。
おかしいのはここからで、ステージの場面(scene)をそこから移動させると
鳴り出す、というか聴こえだすんです。(sceneを変えても、ストップさせない限り
BGM再生は生きてるじゃないですか)
しかも、その鳴らすファイルをSEというか短い音でplay関数に変えると問題無く鳴るんです。
もっと言えば、無音になるそのBGMのファイルを別のsceneのBGMとして利用すると
問題無く鳴ってくれます。
つまり、BGMのファイル(mp3)は悪くない。
プログラムソースに問題も無いと、確認出来たわけです。
なにが問題なのか、意味がわかりません。
同じsceneの中で、playbgmは複数利用出来ない
(playbgmを利用してBGMをバンバン変更したりするのは出来ない)
というDXの仕様なのでしょうか?
それともなんか原因が推測出来る方、いらっしゃいませんか?

5 :
>>4
PlayMusicとかPlaySoundFileとか使っているならPlaySoundMemのほうを使った方がいいと思うぞ。

6 :
>>5
レスありがとうございます。
紛らわしい書き方してすみません、
再生にはちゃんとPlaySoundMem(*** , DX_PLAYTYPE_LOOP)をつかっております。
>>4にて書いているplaybgm関数とはDX_PLAYTYPE_LOOPを引数としたもの、
play関数とはDX_PLAYTYPE_BACKを引数としたものになります。
なにか考えられる原因はありますか?

7 :
今、一番関心のあるスレを発見
丁度、ボクもDXライブラリの門を叩いて
DXライブラリの門をくぐってゲーム開発に挑戦してみようとしているので
ちょくちょく利用させていただきます
ttp://blog.livedoor.jp/winpg/
ここでゲーム開発日記を書いていく予定です
以後、お見知りおきを

8 :
とりあえず>>4の書いてあることの解釈の確認だが
元々のステージBGMを「A」で新たに鳴らしたいBGMを「B」としよう。
>>4がやりたいことは「A→B→A」という風にしたいが
実際には「A→(無音)→B」という風になってしまうということでいい?
「int Handle」という変数があるとして
Handle = LoadSoundMem( A ) ;
Handle = LoadSoundMem( B ) ;
という風にAとBのBGMを共通の変数に代入をしていないか?
「int Handle1」「int Handle2」というような感じで別々の変数を用意しておいて
Handle1 = LoadSoundMem( A ) ;
Handle2 = LoadSoundMem( B ) ;
にしておかないとダメなのでは。

9 :
>>8
レスありがとうございます。
自分がやりたいことは「A→B→A」という風にしたいが
実際は「A→無音(B)→A」となってしまう、です。
この無音(B)の時にsceneが変わる(例えばゲームオーバーになり、ゲームオーバー画面に変わる)と、
実は実行されていましたといわんばかりにBの音が聞こえだします(もちろん、Bの実行を停止せずにいた場合)。
また、無音(B)の時ですが、完全な無音の時もあれば、
ブツブツとラジオの電波が悪い時みたいな音がしている場合もあります。

もちろん、ハンドルは別で用意しております。
別々のハンドルで用意したBGMを切り替えたい、だけなのですが。。

10 :
>>9
if( CheckSoundMem( Handle ) == 0 ){
PlaySoundMem( Handle , DX_PLAYTYPE_LOOP );
}
BGMが流れていないときだけBGMを流すという処理なんだけど
Bに対してこんな風にはしてある?

11 :
>>10
BGMが流れていないときだけ流す?
えっと、BGMを流す関数(playbgm)を作っていて(その関数内にPlaySoundMem(***, DX_PLAYTYPE_LOOP)を入れてます)
vectorのコンテナに入れてある各サウンドファイル(順番がIDとなっています)を、
playbgm関数の引数により、ほしいBGMをハンドルの変数bgmに格納、
それをPlaySoundMem(bgm , DX_PLAYTYPE_LOOP)する。
更新中、今流れているID(BGM)と同じID(BGM)の引数の場合はなにもせず(そのBGM流し続ける)、
別のID(BGM)の引数で実行されたら、新しいIDのBGMを流す、といった関数です。

12 :
Bの曲と、BGMを実行するという関数においては
別のsceneではなんの問題もなく流れてくれるので
問題ないと思うのです。

13 :
そういう仕様は聞いた事ないな。
DXライブラリじゃなくて単純にプログラムのバグな気がするけど……。
俺がやった事ない部分は「Aの曲を途中で止めて、次に再生するのはその途中から」という部分だが
そこを単純に「最初から再生する」にしてらどうなるのかな?
「途中から再生する」という処理をどうやってるのか気になるところだ。
シーンが変わるとBが再生されるというのは、最初からなのか途中からなのか、
Bが鳴らないと思ってるのは、どこかでボリュームをいじってて、それが0になってるだけじゃないのか、とか。

14 :
ああ、すみません、Aの曲に戻る時はまた最初からになります。
途中で、といった処理はまったくしておりません。
Aの曲をストップするというのはただ単に終了させることです。
で、Bの曲を頭から流し、Bの曲を終わらせたら
またAの曲を頭から流す、というだけです。
今、簡単なプログラムにして
現画面で、上を押したらAの曲、下を押したらBの曲が流れる
といった感じのプログラムを作りましたが
やはり、Bの曲が流れません。ただ、下を押したらブツブツとおかしな音はしています
(もしかしたらBno曲の出だしが連続再生されているのかもしれないけど、再生処理はAの曲と一緒だからそれもおかしい)。
シーンが変わるとBが再生されるというのは
確認しましたが、頭からでした。

15 :
Bの曲が流れるはずのところ
ProcessMessageはちゃんと毎フレーム呼んでる?
まぁ、ゲームオーバーになりうる状況とのことなので多分呼んでるんだろうけど
一応確認

16 :
もちろん、呼んでます。

追加した二曲目のBGMはどのファイルでもブツブツと音だけしてます。
まるで、頑張って鳴らそうとしてるんです、みたいに。
これはどういう現象なんでしょうか?
で、sceneが移動したら、そのブツブツが止まって
頭から流れるんです。

17 :
そこまでおかしいというのなら、
Aの曲を数秒流してから止め、Bの曲を数秒流してから止め、Aの曲を流す。
という”だけ”のプログラムを組んでやってみたらどうかな。
シーンとかそんなの全く関係ない、新しいプログラムで。
それでもおかしいというのならそのプログラムを晒すといい。

18 :
ブツブツと鳴るとう現象から、Bの曲を「毎フレーム先頭から流しなおそうとしている」んじゃないかという気がした。
ひょっとしてBの再生命令、最初の一回だけってなってないんじゃない? 何度も実行してない?

19 :
そういえば、シーンが変わると鳴り出すってのも、これが原因なら納得だな。

20 :
そういえば自分もBGM再生でミスしたことがあるなあ。
コンストラクタで再生、デストラクタに停止するように書いてたんだけど、
Stateパターンを使ってたためか、タイミング的に A構築→B構築→A消滅 になっちゃって、
クラスB内で再生した曲が、その直後にA内で停止されるというお馬鹿なミスだったw

>>18
あ、確かにそれっぽい

21 :
Bの曲を別のものにしたら、きちんと鳴る? 例えば、AとBを取り替えてみるとか。

22 :
>>18>>19
たぶんそうだとは思うのですが、、、ただ、AもBも同じ関数を使って鳴らしていますし、
両方ともUpdate関数の中に書いてます。
極端な話、
Update関数内にて、
int a =0;
if(上が押されたら){
a = 1;}
if(下が押されたら){
a = 0;
}
if(a==0){
再生関数(AのBGM,ループ)
}else if(a==1){
再生関数(BのBGM,ループ)
}
で、なんの問題も無しにBGMは切り替わり、鳴り続けますよね?
なのに、BのBGMだけ「毎フレーム先頭から流しなおそうとしている」になるのが納得いきません。
>>21
それぞれを別の曲にしても、B(主では無い方のBGM)の方に設定したBGMは
BGMは鳴らず、ぶつぶつ「毎フレーム先頭から流しなおそうとしている」状態になります。

23 :
Update関数ってことは
a=1の時、毎フレームif(a=1)って事じゃないのか
その場合、再生中かどうかフラグ用意して管理しておかないと

っていう妄想でした

24 :
>>23
あ、もちろん再生関数というのは>>11に書いてありますが
自分で作ったものであり、
同じ曲を再生中の場合はスルーする、という内容を含めた
定義をしております。

25 :
XVR7WDIqだけど。
「二重再生しないようにしてる」という言葉を信じるなら、俺の予測は外れてる事になるけど
22の例を見ると、ほんとにちゃんとプログラムできてるのか不安になる。
そのサンプルじゃ、上を押しっぱなしにしない限りずっとAが鳴りっぱなしじゃん。

26 :
再生関数の中に、ブレークポイントでも入れてみたら?

27 :
>>24
あれ、バグってる場所自分で特定できてるじゃん

28 :
int a =0; が関数内でローカル変数として定義されていると
毎回初期化されてしまうな。

29 :
>>4
>プログラムソースに問題も無いと、確認出来たわけです。
俺もたまにやるけど、ヒューマンエラーが一番怖い。
「自分は正しい、間違っているわけがない、他に原因があるはず」
しかしそれが間違いを生んでいる主な原因だったりする。
これは現実世界でも多々ある事。
例えば最近問題になっている歴史問題。記録はどの国家も例外無く正確ではない、捏造が多々含まれている。
更に化学においても、「人体に影響は無い」というのは全て嘘だ。体に良いものですら、良い影響と悪い影響がある。ここから「体に良いもののほうが体に悪い」という論理的な矛盾が生まれる。
何が言いたいかというと
っていう妄想でした

30 :
>>25 >>28
あくまで例として書いてしまったがために
突っ込み所満載ですみません。
お二人のご指摘は本来自分で書いてるプログラムではバッチリなはずです。
変数aについては突っ込まれるかなと思ったんですが
例のつもりだったので強行して書き込んでしまいました。
しかし、皆さんが親身になってくださるので
ソースをさらしてみたいと思います。
どうか、原因を突き止めて頂きたいです。
しばし、お待ちを。

31 :
>>29
その通りですね、なので晒してみますので
ご確認して頂きたいです。しばしおまちを。

32 :
すみません、行数があり、書き込みできませんでしたのでソースを書いたTXTをうpします。
あと、実際に鳴らしているsceneクラスは継承+ポリモフィズムを使っており、
余計なものまで解説せねばならないことになりますのでその辺は割愛させて頂きました。
http://ux.getuploader.com/zipcodezipcode/download/40/DX%E3%82%B9%E3%83%AC.ZIP
出来たら、このサウンドクラスを使って、二つのBGMを切り替えるプログラムを作ってみてください。
そちらでうまく出来たら、私の実行のさせ方が間違っているということですね。。

33 :
mp3のサイズがでかすぎてメモリに読み切れてないとかじゃないよね
いっぺんSetCreateSoundDataTypeで再生形式切り替えてみたらええんでない

34 :
SoundBox* sound;
sound->getInstance()->loadFiles();
while( 1 ){
  if( ProcessMessage() != 0 ){ // メッセージ処理
    break;//ウィンドウの×ボタンが押されたらループを抜ける
  }
  ClearDrawScreen(); // 画面を消す
  if( CheckHitKey( KEY_INPUT_UP ) ){
    sound->getInstance()->playbgm( 0 );
  }
  if( CheckHitKey( KEY_INPUT_DOWN ) ){
    sound->getInstance()->playbgm( 1 );
  }
  ScreenFlip(); //裏画面を表画面に反映
}
これで実行してみたが問題はなかった。

35 :
更新関数

SoundBox::getInstance()->playbgm(1);//Abgmスタート
if(*****){
a=1;
}
if(a=1){
SoundBox::getInstance()->playbgm(2);//Bbgmスタート

のところなんだが
更新関数

a=-1;
if(*****){
a=0;
}else if(-----){
a=1;
}
if(a=0){
SoundBox::getInstance()->playbgm(0);//Abgmスタート
}else if(a=1){
SoundBox::getInstance()->playbgm(1);//Bbgmスタート
}
普通こんな感じじゃない。

36 :
>>33
それがデカくないんですよ、Aは205KB、Bは180KBです。
>>34>>35
うまく流すことが出来たわけですね??
ちょっと>>34を使わせてもらい、試してみます!

37 :
皆さんにも体験してもらうソースがわかりました!!
3つのBGMを読み込ませ、>>34に付け足した感じですが

while( 1 ){
  if( ProcessMessage() != 0 ){ // メッセージ処理
    break;//ウィンドウの×ボタンが押されたらループを抜ける
  }
    SoundBox::getInstance()->playbgm(0);
if( CheckHitKey( KEY_INPUT_UP ) ){
SoundBox::getInstance()->playbgm(1);
}
if( CheckHitKey( KEY_INPUT_DOWN ) ){
SoundBox::getInstance()->playbgm(3);
}
  }
  ScreenFlip(); //裏画面を表画面に反映
}

これで実行してみてください!
要は、最初に別のBGMを流していて、
その上で、「上」か「下」かで二つのBGMを切り替えて鳴らしてください
これで、同じ現象がおきるはずです!

38 :
誤字です。
BGMを3つ読み込ませといてください。
while( 1 ){
  if( ProcessMessage() != 0 ){ // メッセージ処理
    break;//ウィンドウの×ボタンが押されたらループを抜ける
  }
    SoundBox::getInstance()->playbgm(0); //1曲目
if( CheckHitKey( KEY_INPUT_UP ) ){
SoundBox::getInstance()->playbgm(1); //2曲目
}
if( CheckHitKey( KEY_INPUT_DOWN ) ){
SoundBox::getInstance()->playbgm(2); //3曲目
}
  }
  ScreenFlip(); //裏画面を表画面に反映
}

39 :
あん?
それだと、キーを例えば下にすると
まず一曲目を流そうとして、
次に三曲目を流そうとして
また次のループで一曲目を流そうとして、
さらに三曲目を流そうとしたりするんじゃ。

40 :
>>39
。。。。。。。。。。。。。。。。。!?

41 :
ifの条件式それでやってたの?

42 :
ていうか閉じ括弧が一個多くね

43 :
確かに、ちょっとおかしいことなってますね。
triggerとなる変数でも作って
triggerの値をもとにswitchで
読み込んだ三つの曲をまわすのはどうでしょう?
その時のtriggerの値の指す曲以外は
毎フレームスルーする様に。

44 :
普通にキー管理すればよくね
試験ソースなんだろうけど

45 :
>>40
気づいてなかったのかよw
playbgmのところはif文囲まないで常に実行状態する状態にしとくのはダメなんだよ。
ちゃんとif文で囲むようにしような。

46 :
switchでわけたらすんなり解決しました。
マジでレスくださった皆さんありがとう。
特に朝も早くから付き合ってくれてた人、マジで感謝です。

47 :
>>46
結論がすげー不安なのでこれ貼っときますねw
http://dixq.net/g/01_05.html

48 :
ああすRっちだった
http://dixq.net/g/02_09.html

49 :
まさに>>29そのものずばりだったか
俺はしょっちゅうやる

50 :
相談がひとりって、えらく過疎ってんな
DXライブラリはもう廃れてるんか?

51 :
仕様についての質問や関数追加についての伺いは公式掲示板が盛んだし、
ゲーム制作に関してのくだらない質問は別の掲示板が盛んなんだよ
そもそもリファレンスと実例が充実してるから、普通は検索すりゃ質問するがない
上の人も、ライブラリ関係ない書き方のミスだしね
そう考えると、ここで話をする内容ってあんまりないね

52 :
ゲ製板がそもそも過疎ってるし。
このスレはまだレスの多い方。

53 :
ゲームなんか作ってどうするのよ
周りのみんなは受験勉強やら自己啓発で資格取得やら親しい友人と親睦深めたりしてるのに
ゲームプログラミングなんかしてても受験、就職、出世、何の評価にも繋がらないぞ
TOEICの勉強でもしてた方がなんぼかマシ

54 :
こんな場末の掲示板までわざわざ来てそんなこと書き込む暇があるなら
そのTOEICとやらの勉強すればいいんじゃないかなぁ
C# & SharpDXに疲れたので、C++ & DxLibに戻ってきた
俺のゲーム制作に対してDirectX直叩きはオーバースペック過ぎたわ

55 :
アクションゲームで道具屋作ろうとおもってるけど、メッセージウインドウって
クラス作って幅とか高さとか一行あたりの最大文字数とかをコンストラクタに渡したりしたほうが作りやすいかな?どう実装してる?

56 :
趣味に理由を求めてる時点で何かが違う気がする件

57 :
漫画なんか読んでどうすんの?と言われてもなあ

58 :
漫画とはわけが違うだろ
ゲーム完成させたことあるのか
1本のゲームを完成させるのにどれだけ労力が必要だと思ってんだ
人生の一部をドブに捨てる覚悟がいるんやぞ
それだけの時間を費やしてから意見しやがれ馬鹿たれ共が

59 :
こんな場末でそんな下らん事で興奮してると禿げるぞw

60 :
ゲ製でゲームづくり批判なんて斬新だなwww
別に一日漫画一冊読むような時間かけて作ってもそのうち完成するわwww
ついでに言うと作者間交流もある

61 :
完成させる気もなく作ってるフリを楽しむだけだからいいじゃ

62 :
>>53
それはプログラミングだけで満足してるって事なのか、他も評価されないと決めつけているのか
C、C++,背景、ドット絵、キャラ絵、BGM、ゲームシステム、インターフェース、英語・・・
ここから派生するのが
PhotoShop、HTML、プログラミング各資格、英語力、他シェアウェアツール、他プログラミング言語、絵師など
頑張り次第で個人の能力凄い事になるわ

63 :
というかコピペにレスすんなw

64 :
話ぶった切って悪いけど
モデルの各フレームに設定されてるローカル回転軸ってもしかして取得できないの?
最近ようやくモーションに手を付け始めた所で間抜けな質問かもしれんが見当たらないので教えてほしい

65 :
http://blog.livedoor.jp/winpg/
とりあえず、私のDXライブラリプログラミングは、
ここまで進みました
生暖かく見守ってください
あ、そういえばここはDXライブラリについての質問を書いてもいいのですよね?
DXライブラリについて疑問に感じたことがあったら
ここに質問を投稿させていただきます

66 :
逆だ
「質問を書いてもいい」って何だ?
まさか雑談スレだと思ってるのか?
定期的に進捗報告したい場合はこっちのスレ使うべき
 ■自主製作ゲーム:開発状況報告スレVer1.1■
 http://toro.2ch.net/test/read.cgi/gamedev/1333861472/

67 :
匿名掲示板での一部板以外の宣伝は違反だぞえ
有名人でも困る

68 :
>>60
>>ついでに言うと作者間交流もある
DXライブラリ使ってすでに数本ゲーム完成させたが、作者間交流なんてねーよ!w

69 :
>>58
バカか?
お前みたいにネットで
しかも自分の関心もない板の過疎スレで
不特定多数相手にいちいち愚痴や
どうでもいいてめえの価値観なんぞほざいてる時間が
最大の無駄だろうがw
ゲーム製作だろうが、漫画描くことだろうが
なにかに打ち込み、頑張る奴を否定してんじゃねえよ、ドアホが。
その先に開けた将来が約束されて無かろうが、
少なくとも、てめえみたいな時間の使い方してないだけ
マシだっつんだよ。
そうとう頭悪いな、てめえはw

70 :
あっそ。徒労に終わらなければいいね。

71 :
あのさ、このソースなんだけど
メインループにLoadDivGraphを置いてるの正しいの?
こんなところに書いたら毎回ハンドルに読み込んでぶちこむことにならん?
数値をグラフィックで表示する
http://homepage2.nifty.com/natupaji/DxLib/dxtec.html#T1
てか、int NumHandleが再定義されてるとか、int NumHandleが定義されてないとか
なんかエラーでまくりなんだけど、これをそのまま張り付けただけじゃダメなの?

72 :
メインループはNumDraw( 256 ) ;じゃないの

73 :
気に入らないなら自分でアレンジすればいいのに
あるいは聖書だと思ってるの?

74 :
>>70
バカじゃねえの。
どうせ徒労に終わるだのなんだのと
頭ん中だけで結論付けてなにをするにも諦めたまま
引きこもってるのがてめだろ。
妬みから、世の中を楽しんでる奴や、楽しもうと頑張る奴らをネットん中で叩くだけの
ゴミみたいな人生だわな、てめえの人生は。
クソにもならん時間の使い方してジジイになって
なにもしなかったことを後悔して死んどけ、ゴミ野郎。

75 :
>>72
その上にこれがあるでしょ
LoadDivGraph( "Num.bmp" , 10 , 10 , 1 , WIDTH , HEIGHT , NumHandle ) ;

76 :
>>70
お前は多分根本的に「物を作るタイプ、作れるタイプの人間」じゃないと思う

77 :
>>75
だから上にあるのならいいんじゃないの
forでぐるぐるしてるのはNumDraw( 256 ) ;の中なんだから一回しか読み込まれないんじゃね

78 :
>>71
そもそも、wait keyで止めてるから、メインループなくね?

79 :
コピペに必死にレスしすぎで笑った
ところでゲーム制作で受験や就活に成功してるやついっぱい知ってるよ
少なくともそういう人間がいれば、他の新入生や新人と交流させたときに勝手に教育してくれるから欲しがるんだろうね

80 :
>>68
同人ゲームなら制作者同士。結構つるんでるよ。
まぁPGは少ないが。

81 :
>>71なんだけど、「数値をグラフィックで表示する」のソースが理解出来ない
せいでクラスで扱えない。エラーが出てビルド出来ない。
最終的にNumDraw()の引数に入る数字に合わせて
画像で表示してくれるってことでしょ?
マクロ定義が#define WIDTH 24、#define HEIGHT 24
変数配列int NumHandle[ 10 ];
プロトタイプ宣言でvoid NumDraw( int Num ) ;
その定義が
void NumDraw( int Num )
{
int i , BeamWidth , x ;
        *
        *
でしょ?
あとは、NumDraw( ) ;をメインループ内に書けばいいだけだよね?
たったこれだけのことなのに…なぜだ
コンストラクタで
LoadDivGraph( "Num.bmp" , 10 , 10 , 1 , WIDTH , HEIGHT , NumHandle ) ;するとして、
なぜかヘッダファイルで宣言したint NumHandle[10]が、cppの方のvoid NumDrawの定義内で
「int NumHandle[10]が定義されてない」って出る、どうなってんのさ

82 :
エラーはほかにも出てないか?

83 :
int NumHandleが定義されてないとかいうから場所をグローバル変数の場所にしたら、
int NumHandleが再定義されてますって出るよ
int NumHandle[10]なんか一カ所にしか書いてないのに

84 :
書き方ミスかもしれんからソースコードさらした方がいいんじゃないか。

85 :
普通にコーディングでミスってるようにしか見えないなあ。
あとグローバルにしたら再定義されてるって出るのは正しい仕様。
面倒くせぇ仕様だなあとは思うけども。

86 :
たったこれだけのことなのにって自分で言ってるんだから、考えても仕方ないようなしょうもないミスなんでしょ
そのエラーがでてるプロジェクトを固めてうpってくれなきゃ他人には解決のしようがない

87 :
・複数ファイルがある場合、エクスターンしてるか
・場所(順番)まちがってないか
いろいろあるんでソースうpしたら一発でわかるとおもう

88 :
>>81
適当にエスパーして、適当に作ってみた。
動くどうか知らんが、合ってるかもわからんが
↓テキストだが
http://ux.getuploader.com/game_upload/download/8/NumDraw%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6.txt
今日中に消すと思う。

89 :
passは"numdraw"です

90 :
>グローバル変数
C/C++の糞い仕様の一つだな。
嫌ならC#とかJavaを使うしかない。
もう少し決定打になる言語があると良いのだが。

91 :
>>81 >>83
○○なだけだよね、みたいな書き方してるけど、そもそも、コンパイラとリンカの動きってちゃんと理解してるか?
基礎中の基礎の話で悪いけど。
グローバル変数に限らず、関数名でもクラス名でもなんでもそうだけど、それらの名前って、コンパイルの段階で見れば
「その翻訳単位の中で」 定義されてるか否かと判断されるので、その名前が登場しなければそれは未定義だ。
だから、変数ならば extern キーワードを付けて 「これはこの翻訳単位中には無いけど、どこか他所にはあるから気にするな」 
とコンパイラに指示して、後はリンク次第にしてしまう訳だ。
関数やクラスなんかで言えば、中身のないプロトタイプだけを別のファイル(慣例としてヘッダ)に書いておいて、
それを、その翻訳単位の頭とかに同梱( include )する訳だ。
これで、この翻訳単位は 「定義の実体があるか無いかに関わらず、少なくとも宣言は揃ってる、未定義はないよ」 としてコンパイルされる訳だ。

その後、リンクの段階で今度は文字通りそれらの翻訳単位がリンクされるんだが、この時、グローバル変数だろうが関数名だろうがクラス名だろうが
「同名の実体 が 定義されていたら」 それは 「再定義されてますよ」 とエラーになる訳だ。
これがド基礎の当たり前の動作なので、例えば変数のような、宣言と実体が伴う物を inlcude するファイルなんかに書いてしまったら、
上手に処理しないと、再定義エラーになるわけだ。 エラーと言うか、リンカが 「どっちが正しい定義なんだよ」 と困ってしまう訳だ。
…その辺ちゃんと理解した上で、ソース見直せ。 簡単な話。

92 :
>>90
言語がどうこうじゃなくて、それは自分の理解不足。つか、単に嫌ならグローバル変数使わなきゃいいだけの事。
つか、どうしても必要なら、理解した上で慎重に使うべき。 リンク後に被らないようにとか、適宜 static にして extern させないように明示するとか。

93 :
全部ひとつのソースファイルでやってる自分には何の事かさっぱりわからんわ。

94 :
あ、書き漏れたゴメン。
なので、>>81 の話で、クラスの形にラップして 「定義されていない」 と言われるなら、それはその翻訳単位中で見つからないだけ。
続いて >>83 の話で、もしもヘッダファイル中で変数を宣言してしまって、そのヘッダを複数のソースが inlcude していたら、
リンカの段階で 「再定義されてますよ」 と言われるだけ。

ちなみにもうちょっと書いておくと、 include って言うプリプロセッサ指示は、それを書いたコンパイル対象のソースコード中の、その行の位置から、
単に指定された別のファイルをテキストとして差し込むだけ。その上で、一つの翻訳単位としてコンパイルされて、
それらコンパイルされた宙ぶらりんの中間ファイル(obj)を、リンカがまとめて結合して一つにするって動作なので、そのイメージ持ってもう一度ソース見直せ。

95 :
>>93
それはそれで色々問題あるが、所詮他人事なので頑張れとだけ言っておく

96 :
逆にグローバル変数つかえないんで俺はC#がかなり面倒だw

97 :
>>96
気持ちはわかる。でもC++の時でもなるだけ使わないように設計して書いてる俺
ファイル増えるとワケわかんなくなるから。あの名前被ってないかとか
namespace分けりゃいいだろって話もあるがww

98 :
namespace + グローバル変数なら
C#/Javaでclass + public static変数でできるじゃん。
C/C++のグローバル変数やinclude、クラス変数初期化の仕組みは糞だわ。

99 :
>>98
それは疑似グローバル変数もどきなんだよね
GUIがC#がらくなんでC#とDxlibでやってみてけど
やっぱC++のほうが実際のコードがらくなんで、
なかとってC++/CLIでもやってみたけど2種類の言語を
さわってるみたいできもちわるかったんでやっぱC++にもどったw

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
正直、コミックメーカーって、どうよ? (743)
モチベーション維持の方法を話あおう (300)
むしろjavascriptでゲーム作ろうぜ (693)
鉄道経営系ゲーム開発スレ Ver.9 (624)
物凄い勢いで誰かが企画をたてるスレ 2本目 (690)
【海栗は】Unity 5スレ目【プリンと醤油で代用】 (716)
--log9.info------------------
【ポチッと】群馬テレビ Part3【開局40周年】 (870)
【情報】東京の悪いニュース14【隠蔽】 (352)
【TBS系】 中部日本放送CBCテレビ 【5ch】 (387)
来年の24時間テレビのランナーを予想するスレ (310)
フジテレビが韓流復活。もう韓流はウンザリだ! (529)
フジテレビを知らない青森県民 Part15 (851)
放送禁止および封印された作品 (604)
【KNB・BBT・TUT】富山のテレビ総合スレ 7 (253)
【ずっと】MRO北陸放送 Part14【ギュッと】 (255)
【NHK】ニュース・報道総合スレッド34【民放】 (894)
うちなー(沖縄)ぬテレビ:その5くらい (626)
日本も台湾を見習って韓国ドラマを規制せよ! (298)
このままフジテレビデモは続くか? (746)
もう我慢できない!新潟のテレビ局 9局目 (228)
史上最高の放送局を決めるスレ(テレビ・ラジオ)1局目 (340)
頭に「東京電力(東電)」と付けて萎える番組を作れ (550)
--log55.com------------------
【VW】ゴルフ7 その94【GOLF】
Jeep ラングラー【jk】好きな人だけ集え 12
【スズキ】4代目スイフト Part18【ZC13S/53S/83S】
【Ford】フォード総合スレ 12
【MAZDA】マツダ初代(KE)CX-5Vol.154【SKYACTIV】
【SUBARU】WRX STI/S4 (VA) Part99
レンジローバーヴェラール part2
【日産】K12マーチタン ゚+.(・∀・)゚+.゚イイ!! Part.87