|
Name: yoo ..ぴよぴよ(61ポイント)
Date: 2010/10/02(土) 18:40
No:62563
|
|
Title: 【龍神録プログラミングの館】13章
|
|
はじめまして。
本サイトの『龍神録プログラミングの館』でのプログラムを組んでいたのですが、第13章「敵にショットを撃たせてみよう」でつまづきました。
実行結果では色んな種類の弾が次々と敵から放たれているのですが、私の組んだものだと一種類(b0.png)しか撃ってきません。中身はサイトに載ってるのをコピペしただけなのでどこで間違えているのか分かりません。
が、気になるのはshotH.cppに同じ関数(shot_bullet_H000)が使われている事です。試しに片方をコメントアウトしたら上記のような事になりました。もちろん、コメントアウトしなければ同じ関数が再定義されてしまいエラーになります。
龍神録プログラミングの館で試してみた方、もしくは制作者の方教えて下さい。お願いします。
61ポイント を手に入れた。
|
|
|
|
Name: yoo ..ぴよぴよ(79ポイント)
Date: 2010/10/02(土) 21:17
No:62578
|
|
Title: Re:【龍神録プログラミングの館】13章
|
|
改めて…プロジェクトごとだと重いのでソースを貼ります。
18ポイント を手に入れた。
|
|
|
|
Name: black_cat ..ぴよぴよ(760ポイント)
Date: 2010/09/27(月) 22:31
No:62396
|
|
Title: C# Box2D 画像適用
|
|
先日マウスジョイントについて質問させていただいたblack_catです。
今度はBox2Dのオブジェクトに画像を適用させたいのですが、
方法を教えていただけないでしょうか?
環境は前回と同じく[Visual C# 2010]です。
前と同様、Flash版を見てやり方の簡単な流れは分かったのですが、
そこから先をどうしていいのかが分かりません。
また前のサンプル(ttp://dokokano.net/~fslasht/warehouse/programs/testBox2d_20090318.zip )
を例に教えて頂けるとうれしいです。
よろしくお願いします。
2倍のポイントを手に入れた! 282ポイント を手に入れた。
|
|
|
|
Name: black_cat ..ぴよぴよ(798ポイント)
Date: 2010/09/28(火) 19:51
No:62424
|
|
Title: Re:C# Box2D 画像適用
|
|
pictureBox1を配置して
pictureBox1.Image = "画像名";
とするのですか?
38ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..ぴよぴよ(853ポイント)
Date: 2010/09/28(火) 22:49
No:62438
|
|
Title: Re:C# Box2D 画像適用
|
|
ありがとうございます。
貼ってくださったリンクを見ながらですが、
DrawImageでの描画はできました。
55ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..かけだし(1,255ポイント)
Date: 2010/09/30(木) 20:03
No:62479
|
|
Title: Re:C# Box2D 画像適用
|
|
すみません。
文章がややこしかったですね。
普通にDrawImageでの画像の描画はできましたが、
Box2Dではやり方が分かりません。
もっと勉強していれば、DrawImageが分かった時点でできるのかもしれませんが、
分からないので教えていただけないでしょうか?
67ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(582,445ポイント)
Date: 2010/09/30(木) 23:00
No:62484
|
|
Title: Re:C# Box2D 画像適用
|
|
>Box2Dではやり方が分かりません。
基本的な使い方は同じです。
先に紹介したページの e.Graphicsに相当するのが m_grfxメンバになります。
手っ取り早く表示させるだけなら、Imageクラスをメンバに持ち、初期化時に適当な画像を読み込んでおいて下さい。
次に DrawBox関数の whileの辺り(後でも先でも構いません)にでも m_grfx.DrawImage(Imageメンバ名, -1, -1, 2, 2)の一文を入れて下さい。
これだけで表示ができるようになります。
ただ、実際には上の DrawImageでは幅・高さを2と決め打っているので、ボックス生成時の
SetAsBoxの値を保存しておくなり、頂点情報から推測するなりして適切な値にする必要があるでしょう。
168ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..かけだし(1,444ポイント)
Date: 2010/10/01(金) 22:38
No:62518
|
|
Title: Re:C# Box2D 画像適用
|
|
何度もすいません。
結構がんばってみたつもりなんですが、やっぱりつまずきました。
とても基本的なことなのでしょうが、
「Imageクラスをメンバに持つ」とはどういうことでしょうか?
調べてみたのですが、いまいち分かりません。
あと、初期化時とはいつのことなのでしょう?
Box2Dの初期化時に画像をロードしても、当たり前ですが「名前 'bmp' は現在のコンテキスト内に存在しません。」
と言われます。
よろしくおねがいします。
212ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(582,709ポイント)
Date: 2010/10/01(金) 23:38
No:62526
|
|
Title: Re:C# Box2D 画像適用
|
|
Box2Dとか Imageとかの前にもう少し C#の習熟度を上げる方が先なのではと思わなくもないですが。
>「Imageクラスをメンバに持つ」とはどういうことでしょうか?
m_grfx等のようなクラスのメンバ変数……フィールドとして定義する、ということです。
>初期化時とはいつのことなのでしょう?
Box2Dの初期化をしているところでいいですよ。
>Box2Dの初期化時に画像をロードしても、当たり前ですが「名前 'bmp' は現在のコンテキスト内に存在しません。」
状況があまりつかめないのですが、その bmpはフィールドですか?
ひょっとしてローカル変数に対してロードしていたりしませんか?
223ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..かけだし(1,519ポイント)
Date: 2010/10/02(土) 07:14
No:62530
|
|
Title: Re:C# Box2D 画像適用
|
|
ほんと勉強が足りないなぁ と自分でも思ってはいるのですが・・・
調べた結果、フィールドの意味は分かりました。(たぶん)
でもやっぱり、やり方は分かりませんでした。
何度も悪いのですが、教えていただけますか?
ほんとすいません。
75ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(583,027ポイント)
Date: 2010/10/02(土) 14:28
No:62545
|
|
Title: Re:C# Box2D 画像適用
|
|
まずはメンバの追加。
23行目(8行数は全てオリジナルコード上の行数です)に
Image m_Image;
を追加します。
イメージのロードは frmMain関数内の 37行目に
m_Image = Image.FromFile("xxxx.png");
を追加します。xxxx.pngは適当な画像ファイルを指定して下さい。
最後に描画、186行目に
m_grfx.DrawImage(m_Image, -1, -1, 2, 2);
を追加します。
これだけです。
これで表示されなければ、再度訊いてください。
うまく表示ができたのなら、次のステップに進む前に C#の基礎を固めるのがいいでしょう。
318ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..かけだし(1,875ポイント)
Date: 2010/10/02(土) 18:00
No:62559
| 解決!
|
Title: Re:C# Box2D 画像適用
|
|
本当に申し分けございません。
[2010/10/02(土) 07:14 No:62530] の投稿の前に、調べた通りにやってみてエラーが出たのは、
ファイル名が間違っていたからでした。
Windows7のサンプルピクチャを使っていたのですが、フォルダのアイコンの下に表示されている名前は
本当の名前じゃなかったんですね。
[C:\\Users\\Public\\Pictures\\Sample Pictures\\ペンギン.jpg]でやっていたのですが、
本当は[ペンギン.jpg]じゃなくて[Penguins.jpg]でした。
というわけで解決しました。
とっても基本的なミスですいませんでした。
やっぱりC#の基礎を固めたほうがいいんですね。
たしかに自分でもそう思います。
次はBox2Dのオブジェクトごとに、違う画像を表示する方法をお聞きして、
作りたかったものが完成する予定だったのですが・・・
とても残念です。
これからはC#の書籍などを買ってしっかり勉強します。
何度もすばらしい回答をくださって、本当に本当にありがとうございました。
356ポイント を手に入れた。
|
|
|
|
Name: 猫好き ..ぴよぴよ(140ポイント)
Date: 2010/10/02(土) 08:53
No:62532
|
|
Title: 竜神禄、自機プログラムについて。
|
|
猫好きです。前回はありがとうございました。
竜神禄のプログラムの講座で、「変身するので」と書かれていて、
左Ctrlキーで変身するらしいのですが、できません。
本当はこんなこともできるということを、載せただけで実装されてないだけ(画像ファイルもないから)
なのかな、と思っています。
自分が作っているものでは、変身のシステムが使えたら「武装可変型」を作ろうと考えています。
できませんか?
124ポイント を手に入れた。
|
|
|
|
Name: 猫好き ..ぴよぴよ(156ポイント)
Date: 2010/10/02(土) 08:56
No:62533
|
|
Title: Re:竜神禄、自機プログラムについて。
|
|
あと、個人的なことなんですけど、
講座のサイトページをHTML形式でダウンロードできたらなーと思っています。
学校ではネット繋がってないんで(汗
16ポイント を手に入れた。
|
|
|
|
|
Name: 猫好き ..ぴよぴよ(201ポイント)
Date: 2010/10/02(土) 09:01
No:62536
|
|
Title: Re:竜神禄、自機プログラムについて。
|
|
そうですか・・・う〜ん。
実装するには、変形後の自機プログラム(スピードとか、ショットとか)も必要になってくるので・・・
努力するしかないか・・・(何事も努力)。
45ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,282,912ポイント)
Date: 2010/10/02(土) 09:05
No:62537
|
|
Title: Re:竜神禄、自機プログラムについて。
|
|
> 猫好きさん
あ・・確かに。
実装するつもりでしていないようです;
まぁでも理屈は簡単です。
プレイヤーの構造体に今の状態を示す変数を用意しておき、Ctrlボタンが押されたらそれを変更し、使う画像を変えれば良いだけです。
img_ch[2][12];
で用意していますから、img_ch[0]をimg_ch[1]に変えるだけですね。
HTMLの件は検討しますね。
120ポイント を手に入れた。
|
|
|
|
|
Name: 猫好き ..ぴよぴよ(276ポイント)
Date: 2010/10/02(土) 09:13
No:62538
|
|
Title: Re:竜神禄、自機プログラムについて。
|
|
ありがとうございます。
ちょっと確認したかっただけなんで、大体の構造は分かっています。
画像の変更と自機スピード、撃つショットの変更を変身後としておき、変数によって切り替えですね。
ただ画像が変わっただけじゃ意味がないので・・・。
HTMLの方よろしくお願いします。
75ポイント を手に入れた。
|
|
|
|
Name: piro ..ぴよぴよ(179ポイント)
Date: 2010/10/01(金) 09:53
No:62497
|
|
Title: クイックソート
|
|
C言語で表現したクイックソートに関することで質問があります。
添付したソースコードは、クイックソートのコードであるということは、理解できました。
このソースの処理内容は、配列arrayを昇順にソートするものです。
添付しましたソースコード内の(a)のsort関数の呼び出しにおいて、常にkとbが等しくなり、かつ(b)の処理が行われないようにarrayを並べかえよ、という問題です。
数日調べたのですが、どうしてもこの問題に関する解凍を導くことができませんでした。
クイックソートの処理が遅くなる場合(この課題の場合、配列arrayが最初から昇順に並んでいる)ではないかと考えていましたが、違いました。
この問題の解決方法を教えていただけるとうれしいです。
よろしくお願いします。
179ポイント を手に入れた。
|
|
|
|
Name: イーノック ..ぴよぴよ(8ポイント)
Date: 2010/10/01(金) 18:02
No:62511
|
|
Title: Re:クイックソート
|
|
答えはどのように確認するのでしょうか?
ソースコード眺める感じでは、こういうことかなと思いますが
20,40,60,80,10,50,30,70
8ポイント を手に入れた。
|
|
|
|
|
Name: piro ..ぴよぴよ(257ポイント)
Date: 2010/10/01(金) 23:06
No:62524
|
|
Title: Re:クイックソート
|
|
ノーイックさん>
ノーイックさんが示してくださった順序に配列を書き直すことによって、求めている答えがでました。
どのように考えたらこのような解を導きだすことができたのでしょうか??
78ポイント を手に入れた。
|
|
|
|
|
Name: イーノック ..ぴよぴよ(653ポイント)
Date: 2010/10/02(土) 00:49
No:62527
|
|
Title: Re:クイックソート
|
|
非常に説明しづらいのですが、一応、大まかな私が追ったソースコードの流れを書いておきます。
管理人さんが貼られているところで、理解すればそう難しい内容ではないと思いますよ。
sort(k,b,arr);//基準値の右側をソートする-------(a)
k == bのときどうなるか?
sort関数内 if( b <= a) return; なので、この問題では(a)の行は考える必要がない。
つまり、↓これだけ考えればよい
sort(a,k-1,arr);//基準値の左側をソートする
話は戻って、(a)のsort関数の呼び出しにおいて、常にkとbが等しくなり
→ kの値を決めている個所を探す
→ k = arrange(a,b,arr); //返り値kとarrange呼び出し時の配列最大範囲b
→ arrange関数内を調べる必要がある
returnをみるとleftを返しているので、leftについて調べる
プログラム内を見ると返り値leftがbに近づくのは次の2か所を通る時
while(arr[left] < bd){
left++; if(left > b) break;
}
} else if (left <= right){・・・・(c)
temp = arr[left];
arr[left] = arr[right]; arr[right] = temp;
left++; right--;
→ leftは常にインクリメントされなければ、b+1の値にならない為、
条件(a)を満たすのに、bdは探索配列内で最大の値が入っていることが条件となるので
bdの値を決めているところを探す。
bd = arr[(a+b)/2]; //このarrの中身が並び替え後の配列でも、常に最大値になる必要がある。
また(c)からもわかるように、bd(arr[left] )と探索配列内のb(right)の位置と交換している、
例えば a= 0 b = 7なら、bd = arr[3];
00 01 02 03 04 05 06 07
** ** ** 80 ** ** ** **
a= 0 b = 5なら、bd = arr[2];
00 01 02 03 04 05 06 07
** ** 60 ** ** ** ||70 80 //70,80は確定済み
bdが最大 かつ bdは探索配列の最大要素位置と交換される
という条件が求められたので、後は手書きで導いた
(b)については、 if(right < a) この条件が実行されなければよい
問題の性質上、上記の事柄からaは常に0であるので、rightについて考えればよい。
説明は省略しますが、ここを考える必要があるのは、bが1の時だけです。
645ポイント を手に入れた。
|
|
|
|
|
Name: piro ..ぴよぴよ(434ポイント)
Date: 2010/10/02(土) 08:49
No:62531
| 解決!
|
Title: Re:クイックソート
|
|
イーノックさん>
先程は名前を間違えてしまいすみませんでした。
分かりやすい解説を本当にありがとうございました。
再起処理が加わると本当に混乱します。
自力でトレースする力をもっと養っていきます。
管理人さん>
このアプリでクイックソートのおおまかな流れを理解することができました。
本当にありがとうございます。
自力でトレースする力をもっと磨きます。
177ポイント を手に入れた。
|
|
|
|
Name: 工藤 ..ぴよぴよ(117ポイント)
Date: 2010/10/01(金) 11:02
No:62499
|
|
Title: EDR辞書の読み込み
|
|
今、私は文章の類似度を調べようとしています。(似たもの同士に分類)。
そのためにオントロジーを利用します。
EDR辞書という概念辞書があるのでそれを利用するのですが
そのEDR辞書を読み込みたいのですが
読み込み方法(実装の方法)がわかりません。
EDRに似たものでwordnetいうものがあり、
それの読み込み方法はネットに載っているのですが
EDRは載っていないのでアドバイスのほうをお願いします。
http://nlpwww.nict.go.jp/wn-ja/
117ポイント を手に入れた。
|
|
|
Name: Ultimate ..上級者(17,014ポイント)
Date: 2010/10/01(金) 22:18
No:62515
|
|
Title: タイトル画面作成 超大至急
|
|
#include "DxLib.h"
#define Menu 0
#define Play 1
#define Help 2
#define Play2 3
~~~~~~~~略~~~~~~~~~
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){
SetMainWindowText("Block Break") ;
ChangeWindowMode(TRUE);
DxLib_Init();
SetDrawScreen(DX_SCREEN_BACK);
~~~~略~~~~
while(ProcessMessage() != -1)
{
ClearDrawScreen();
SetDrawBright( 255 , 255 , 255 );
if(key[KEY_INPUT_ESCAPE])
{
break;
}
switch(GameFlag){
case Menu:
randcolor=GetColor(GetRand(255),GetRand(255),GetRand(255));
DrawGraph(0,0,back,FALSE);
SetFontSize(70);
DrawString(120,0,"Block Break",black);
if(menu==0){
mcount=0;
SetFontSize(50);
DrawString(120,100,"EASY",randcolor);
SetFontSize(30);
DrawString(120,190,"HARD",BLACK);
DrawString(120,270,"操作方法",BLACK);
if(( key[KEY_INPUT_Z]%5==0 && key[KEY_INPUT_Z]>30)){
GameFlag=Play;
}
if(( key[KEY_INPUT_DOWN]%5==0 && key[KEY_INPUT_DOWN]>30)){
menu=1;
}
}
if(menu==1){
mcount=0;
SetFontSize(30);
DrawString(120,100,"EASY",BLACK);
SetFontSize(50);
DrawString(120,190,"HARD",randcolor);
SetFontSize(30);
DrawString(120,270,"操作方法",BLACK);
if(( key[KEY_INPUT_Z]%5==0 && key[KEY_INPUT_Z]>5)){
GameFlag=Play2;
}
if(( key[KEY_INPUT_UP]%5==0 && key[KEY_INPUT_UP]>5)){
menu=0;
}
if(( key[KEY_INPUT_DOWN]%5==0 && key[KEY_INPUT_DOWN]>5)){
menu=2;
}
}
if(menu==2){
mcount=0;
SetFontSize(30);
DrawString(120,100,"EASY",BLACK);
DrawString(120,190,"HARD",BLACK);
SetFontSize(50);
DrawString(120,270,"操作方法",randcolor);
if(( key[KEY_INPUT_Z]%5==0 && key[KEY_INPUT_Z]>30)){
GameFlag=Help;
}
if(( key[KEY_INPUT_UP]%5==0 && key[KEY_INPUT_UP]>30)){
menu=1;
}
}
ScreenFlip();
break;
キーが反応しません。
なぜでしょうか?
非常に急いでいます。
751ポイント を手に入れた。
|
|
|
|
Name: Ultimate ..ぴよぴよ(35ポイント)
Date: 2010/10/01(金) 22:28
No:62517
|
|
Title: Re:タイトル画面作成 超大至急
|
|
呼び出すとは?
どこにどう打てばいいのでしょうか?
急いでいるので先に教えていただきたいです。
意味と使い方はのちほど詳しく勉強しますのでお願いします。
35ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(84,562ポイント)
Date: 2010/10/01(金) 22:42
No:62520
|
|
Title: Re:タイトル画面作成 超大至急
|
|
GetHitKeyStateAll_2っていう関数を見る限り、そのキーが押されてたら、
渡したint型配列のカウントが増えていくっていうものですよね。
もし次フレームで押されなかったら0に戻るんですよね?
で、その配列がこのkey[]っていう配列だと。
if(( key[KEY_INPUT_Z]%5==0 && key[KEY_INPUT_Z]>5))とかのif文見ると、
そのカウントがある一定回数以上おされてて、かつ五回に一回処理するようにしてますよね?
ということはこの配列に値が入ってないと何も動かないことになります。
なので、GetHitKeyStateAll_2という関数を毎フレームごとに呼び出すようにすれば、
key[]っていう配列にそのキーのカウント数が入るはずなので、あなたが期待するような動作になるはずです。
つまり、GetHitKeyStateAll_2(key)ってすれば動くと思います。
必ず毎フレームごとに呼び出すようにして下さいね。
最後に、ゲームプログラミングの館をもう一度しっかり勉強することを強くお勧め致します。
以上。 
344ポイント を手に入れた。
|
|
|
|
Name: みけCAT ..初心者(5,647ポイント)
Date: 2010/09/23(木) 08:00
No:62241
|
|
Title: 【asm】DXライブラリの移植
|
|
開発環境はDev-C++4.9.9.2、コンパイラはデフォルトのものを使っています。
この環境で何とかDXライブラリを使いたいと思い、
http://homepage2.nifty.com/natupaji/DxLib/dxdload.htmlの一番下のソースからのビルドを試みています。
最初は「MS Visual C++プロジェクトのインポート」でプロジェクトを読み込みました。
そのままコンパイルをしてもエラーが出て、主にインラインアセンブラを修正する必要があるようです。
現在DxBaseImage.cppを修正していますが、大量にアセンブリのエラーが出て困っています。
修正できる方がもしいらっしゃいましたらお願いします。
修正途中のDxBaseImage.cppとエラーメッセージを添付しておきます。
追記
開発環境の誤字を修正しました。 
2倍のポイントを手に入れた! 60ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(577,668ポイント)
Date: 2010/09/23(木) 22:07
No:62274
|
|
Title: Re:【asm】DXライブラリの移植
|
|
DexCppという環境は知らないのでなんともいえませんが、公式にDXライブラリの dll版があったので、
それを読み込んで関数アドレスを取得し呼び出すようにした方が早いんじゃないかと。
11ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(228,260ポイント)
Date: 2010/09/23(木) 22:18
No:62279
|
|
Title: Re:【asm】DXライブラリの移植
|
|
> 開発環境はDex-Cpp4.9.9.2
Dev-C++の間違いでしょうか?
だとすると、コンパイラはMinGWですので、-masm=intelオプションを使えば、Intel形式の記法を使えます。
あとは、__asm { ... } 形式から asm("..."); 形式に単純に直せばどうにかなるのではないですか?
(オペランドの記法を変更するのがちょっと手間か...)
67ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..初心者(5,676ポイント)
Date: 2010/09/23(木) 22:22
No:62281
|
|
Title: Re:【asm】DXライブラリの移植
|
|
たかぎさん
ありがとうございます。
今日は遅いのでまた今度やってみます。
29ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..初心者(5,872ポイント)
Date: 2010/09/25(土) 15:55
No:62315
|
|
Title: Re:【asm】DXライブラリの移植
|
|
もう少しのところまでできたようですが、
asm内の
"DEC BltHeight\n\t"
のように変数をデクリメントするところ(操作対象に変数しかないもの)のところで
no instruction mnemonic suffix given and no register operands; can't size instruction
というエラーが出ているようです。
(推定なのでエラーが出る場所が間違っているかもしれません)
解決法がわかりましたら教えていただければ幸いです。
196ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..初心者(5,903ポイント)
Date: 2010/09/25(土) 16:51
No:62317
|
|
Title: Re:【asm】DXライブラリの移植
|
|
>>62315
自己解決しました。
"DEC DWORD PTR BltHeight\n\t"
のようにしたら解決しました。
31ポイント を手に入れた。
|
|
|
|
|
Name: みけCAT ..初心者(6,009ポイント)
Date: 2010/10/01(金) 21:23
No:62512
| 解決!
|
Title: Re:【asm】DXライブラリの移植
|
|
この方法では無理なようです。
DXライブラリはDxLib.lib以外にもたくさんのlibファイルから構成されており、
それにもかかわらず上のソースからではDxLib.libに相当するファイルしか作れないためです。
というわけで、このスレッドはとりあえず解決にさせていただきます。
106ポイント を手に入れた。
|
|
|
|
Name: blue ..初心者(6,541ポイント)
Date: 2010/10/01(金) 14:34
No:62505
|
|
Title: ファイル入出力
|
|
「実行すれば、下記の内容をファイルhelloworld.txtとして出力するプログラムを作成せよ
Hellow world!
When I woke up this mornig,I found many people in my room
What's up?? : -0
」という問題をやっているのですが、うまくいきません。
16行目が「called object is not a function」というエラー文がでます。@の部分を消してコンパイルすると通るが、実行すると「ファイルが表示されません」と表示されます。どうすればよいでしょうか?
自分が作ったソース
#include <stdio.h>
#include <stdlib.h>
int main(void){
char greeting[100];
char talk1[100];
char talk2[100];
FILE *fpin,*fpout;
fpin = fopen( "helloworld.txt", "r");
if(fpin == NULL)
{
printf("ファイルが開けません\n");
exit( EXIT_FAILURE );
}
if((fpout = fpin("out.dat", "w")) == NULL){ /* 出力ファイルオープン */ //@
printf("ファイルが作成できません\n"); //@
exit( EXIT_FAILURE ); /* 強制終了 */ //@
} //@
while( fscanf( fpin," %s\n %s\n %s", &greeting,&talk1,&talk2) !=EOF)
{
fprintf( fpout, "Hellow world!!\n", greeting);
fprintf( fpout, "When I woke up this mornig,I found many people in my room\n", talk1);
fprintf( fpout, "What's up?? : -0", talk2);
}
fclose( fpin );
fclose( fpout );
return EXIT_SUCCESS;
}
784ポイント を落としてしまった。
|
|
|
|
Name: blue ..初心者(6,591ポイント)
Date: 2010/10/01(金) 16:01
No:62507
|
|
Title: Re:ファイル入出力
|
|
fopenに直したらコンパイルは通りました。しかし、ファイルが開けませんと表示されます。
どこを直せばよいでしょうか?
50ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..中級者(12,962ポイント)
Date: 2010/10/01(金) 17:00
No:62508
|
|
Title: Re:ファイル入出力
|
|
>fpin = fopen( "helloworld.txt", "r");
このファイルがあるのかどうかということ。
というか
>実行すれば、下記の内容をファイルhelloworld.txtとして出力するプログラムを作成せよ
と全然違うことやっているのでは?
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE* fpout;
fpout = fopen("helloworld.txt", "w");
if (fpout == NULL)
{
printf("ファイルが開けません\n");
return EXIT_FAILURE;
}
fprintf(fpout, "Hellow world!!\n");
fprintf(fpout, "When I woke up this mornig,I found many people in my room\n");
fprintf(fpout, "What's up?? : -0");
fclose(fpout);
return EXIT_SUCCESS;
}
324ポイント を手に入れた。
|
|
|
|
|
Name: blue ..初心者(6,633ポイント)
Date: 2010/10/01(金) 17:28
No:62509
|
|
Title: Re:ファイル入出力
|
|
ありがとうございます。BLUEさんのいう通り全く違うことをしていたみたいです。やっとスッキリすることができました。
42ポイント を手に入れた。
|
|
|
|
Name: ぬっち ..上級者(15,279ポイント)
Date: 2010/10/01(金) 10:09
No:62498
|
|
Title: 名前空間と前方宣言
|
|
いつもお世話になっております。
今回はC++で名前空間と前方宣言について疑問があるので質問させていただきます。
OSは、Windows 7 Home Premium 64bit
コンパイラは、Visual Studio 2010 Express
です。
例えば、hoge.cpp、hoge.h、piyo.hというファイルがあったとして以下のようなコードになっているとします。
//hoge.h
namespace A
{
namespace B
{
class Hoge
{
//メンバ関数など
};
}
}
//hoge.cpp
namespace A
{
namespace B
{
//Hoge.hで宣言したclass Hogeのの実装
}
}
//piyo.h
class A::B::Hoge; //前方宣言
//A::B::Hogeを使うクラスの宣言
こうすると、コンパイルエラーとなってしまいます。
エラーの内容は、「HogeはAのメンバではありません」などという内容です。
それに対して、piyo.hを
//piyo.h
namespace A
{
namespace B
{
class Hoge;
}
}
//A::B::Hogeを使うクラスの宣言
とするとコンパイルエラーとならず、正常に動作します。
初歩的な筆問で申し訳ないのですが、この違いは何によるものなのでしょうか?
教えていただければ助かります。
よろしくお願いします。
387ポイント を手に入れた。
|
|
|
Name: やっくん ..プログラマー(36,246ポイント)
Date: 2010/09/30(木) 20:47
No:62480
|
|
Title: 参照とポインタ の違い
|
|
こんばんは。
C言語→C++と移ったのでポインタで良いじゃん!ってことで参照をあまり使わないようにしてました。
しかし、現在読んでいる参考書に頻繁に現れるので使わないわけにはいかず・・・。
【質問】
ポインタの方が応用が利くような気がしますがどうなんでしょうか?
皆さんはどちらを好んで使われていますか?
場合によるならば双方のデメリットや例を挙げてもらえれば助かります(^^;
99ポイント を手に入れた。
|
|
|
|
Name: MNS ..熟練のプログラマー(41,418ポイント)
Date: 2010/09/30(木) 22:54
No:62483
|
|
Title: Re:参照とポインタ の違い
|
|
一言で言えば、安全性の違いです。
ポイントは確かに参照よりも自由度が高いですが、
その分の危険度がつきまといます。
具体的に言えば、ポインタは指すものを自由に変更できるので、
あいまいなものを指したり、NULLポインタなどの形態を取りうるのですが、
参照は指すものを変えることが出来ないので、その心配はありません。
また、参照渡しは値渡しと区別しにくいというデメリットがあります。
渡した先で値を変更するようであれば、ポインタで渡したほうがで良いでしょうね。
129ポイント を手に入れた。
|
|
|
|
|
Name: gyz ..入門者(3,796ポイント)
Date: 2010/09/30(木) 23:53
No:62486
|
|
Title: Re:参照とポインタ の違い
|
|
ポインタと違って、参照は必ず初期化しないといけないので
クラスに、必ず参照先が有ることが保証されなければいけないメンバがある時には
ポインタでなく、参照を使用してます。
ただ、変な使い方をすると参照先が必ずあるとも保証されませんが...
例えば以下のコードはNG
こんなアホな使い方する人がいるとも思えませんが^^;
#include <stdio.h>
class test
{
private:
int & intref;
public:
test(int* p)
: intref(*p)
{
}
void func()
{
printf("%d\n", intref);
}
};
int main()
{
int* p = new int(100);
test c(p);
delete p;
c.func();
return 0;
}
173ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(228,948ポイント)
Date: 2010/09/30(木) 23:59
No:62487
|
|
Title: Re:参照とポインタ の違い
|
|
オブジェクト型に限っていえば、ポインタには大きく分けて三つの用途があるかと思います。
・オブジェクトの参照
・反復子
・動的オブジェクトの管理
「ポインタ」という一種類の言語機能で、これだけのことを扱えるわけですし、しかも上記のうち複数を組み合わせることもできるわけですから、自由度が高いことは間違いありません。
しかし、その観点からすれば、いっそ型なんかなくして、アセンブリ言語のようにしてしまえば、さらに自由度が高まりますね。
自由度を落として制限を加えると、多くの場合、使い勝手や安全性は向上します。
「参照」は、ポインタの機能のうち、「オブジェクトの参照」しかサポートしませんが、逆にいえば、用途が明確であり、誤って他の目的に流用されたりする心配もありません。
もちろん、参照も万能ではありません。
MNSさんが書かれているように、結果の格納先を引数として渡すのであれば、多くの場合、ポインタを使う方がメリットが大きい気がします。
230ポイント を手に入れた。
|
|
|
|
|
Name: やっくん ..プログラマー(36,390ポイント)
Date: 2010/10/01(金) 08:48
No:62496
|
|
Title: Re:参照とポインタ の違い
|
|
MNSさん、gyzさん、たかぎさん回答していただきあいがとうございます。
>安全性
この説明で納得ができました。
ポインタを使っていて、無闇に変な物を指して、それを見ようとしていたことが何度となくありました。
今思えば、その部分を参照にしていれば実行前に気づいてたようにも思えます。
2つ使いこなせるように精進することにします。
まとめたレスで申し訳ありませんがありがとうございましたm(__)m
解決とします。
144ポイント を手に入れた。
|
|
|
|
Name: 山口 ..初心者(5,879ポイント)
Date: 2010/09/28(火) 22:15
No:62436
|
|
Title: ポケモンの固体値を判別するアプリ
|
|
下記で質問させて頂いたものです。
http://www.play21.jp/board/formz.cgi?action=res&resno=62201&page=&lognum=&id=dixq&rln=62212
過去ログに入ってしまっていると思い絞めてしまいました。入っておりませんでしたね・・・。
折角ご連絡を頂いたのにご回答が遅くなってしまい申し訳ございませんでした。
ポケモンの固体値を求める自分用アプリを作っております。
それ専用の関数を作ってみたのですが上手い値が帰ってきてくれません。
性格の倍率が上手くいかないのでとりあえずHPのみの関数を作っております。
// tribe=>種族値, status=>能力値, fight=>努力値, lv=>レベル, parsonal=>個体値
bool AnsValueHP( int tribe, int status, int fight, int lv, int parsonal ){
int val = int((((tribe*2 + parsonal + int(fight/4)))*lv)/100) + lv + 10;
if( status == val ) return true;
else return false;
}
実際ツタージャというポケモンは下記のステータスなのでLV1の時にHPが11か12になります。
式)能力値=(種族値×2+個体値+努力値÷4)×レベル÷100+レベル+10
※(種族値×2+個体値+努力値÷4)×レベル÷100の部分が0か1にしかならないため
HPの種族値 45
個体値 0〜31の32段階
努力値 0として計算
ただし現在の関数では10の時しかtrueと帰ってこないみたいです。
>>int型で性格を入れることはできなかったと思います。
すみません(汗)
別の場所で性格をシエルさんの仰る通り列挙型で宣言しております。
記載してないで申し訳ないです。
>>ぽこさん
HPの場合は上の例の通りになります。
>>ookamiさん
URLをみてみると小数点以下が発生するたびに切り捨てられるようなので毎回キャストしております。
>>toyoさん
おお・・・
修正したところそれらしい値が帰ってくるようになりました。
ただし誤差が出てしまったり正確な値が出ないことがあります。
ありがとうございます。
折角、ご回答を頂けたのにお礼が遅くなってしまい申し訳ございませんでした。
479ポイント を手に入れた。
|
|
|
|
Name: toyo ..熟練のプログラマー(62,546ポイント)
Date: 2010/09/29(水) 09:43
No:62444
|
|
Title: Re:ポケモンの固体値を判別するアプリ
|
|
その関数でしたら
AnsValueHP( 45, 11, 0, 1, 0〜9 );
AnsValueHP( 45, 12, 0, 1, 10〜31 );
でtrueになります
2倍のポイントを手に入れた! 34ポイント を手に入れた。
|
|
|
|
|
Name: 山口 ..初心者(5,984ポイント)
Date: 2010/09/30(木) 08:40
No:62469
|
|
Title: Re:ポケモンの固体値を判別するアプリ
|
|
お忙しい中、ご回答ありがとう御座います。
AnsValueHP( 45, 12, 0, 1, 10〜31 ); のはずなのですが
実際trueの時にiを表示してみると10の時にしか反応していないみたいなんです・・・。
ソースが間違えているのでしょうか?
105ポイント を手に入れた。
|
|
|
|
|
Name: ideyan ..中級者(10,820ポイント)
Date: 2010/09/30(木) 13:15
No:62473
|
|
Title: Re:ポケモンの固体値を判別するアプリ
|
|
私も確認してみましたがちゃんとAnsValueHP( 45, 12, 0, 1, 10〜31 )で
trueを返してますよ。
確認してるソースのほうが間違っているのではないでしょうか?
#後 parsonal → personal の間違いかと思います。
115ポイント を手に入れた。
|
|
|
|
|
Name: 山口 ..初心者(6,034ポイント)
Date: 2010/09/30(木) 19:50
No:62478
| 解決!
|
Title: Re:ポケモンの固体値を判別するアプリ
|
|
英単語の間違えすみません・・・恥ずかしい・・・
すみません><
リビルドしてみたら普通に動きました・・・。
質問してごめんなさい。
50ポイント を手に入れた。
|
|
|
|
Name: black_cat ..かけだし(1,090ポイント)
Date: 2010/09/29(水) 17:33
No:62455
|
|
Title: C# エラーで困っています
|
|
ちょっと前にVisual C#を始めたblack_catです。
昨日新しいパソコンを買ったのですが、
前のパソコンで出来ていた事ができなくなりました。
ttp://dokokano.net/~fslasht/warehouse/programs/testBox2d_20090318.zip
のBox2Dのサンプルで、デバッグすると
InitWolrd();
のところで、
BadImageFormatExceptionはハンドルされませんでした。
ファイルまたはアセンブリ 'Box2DX, Version=2.0.1.28279, Culture=neutral, PublicKeyToken=null'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。
というエラーが出てきてしまいました。
OSはWindowsXP HomeEdition 32bitから、Windows7 HomePremium 64bitに変わりました。
64bitにしたのが原因なのでしょか?
どなたか解決方法を教えていただけないでしょうか?
よろしくお願いします。
237ポイント を手に入れた。
|
|
|
|
Name: ISLe ..上級者(24,526ポイント)
Date: 2010/09/30(木) 03:45
No:62466
|
|
Title: Re:C# エラーで困っています
|
|
> 64bitにしたのが原因なのでしょか?
Windows 7 Ultimate (x64)で試してみました。
ビルドは成功しているので実行ファイルはできてますね。
実行ファイルをエクスプローラから実行してみると「動作を終了しました」(アプリケーションエラー)になります。
実行ファイルに32BITフラグを付けて32ビット専用にしてみると実行できました。
付属のBox2DX.dllは32ビットでしか動作しないようです。
Visual C# Expressで作成したプログラムは64ビット版ウインドウズ上では64ビットアプリケーションとして実行されますので32ビット版DLLには直接アクセスできません。
Expressでない有償のVisual Studioだと32ビット専用のアセンブリを作成するオプションがあるのですが。
対策としては、
・ソースコードが入手できるようなので64ビット版Box2DX.dllを作成してデバッグに使う
・Professional以上のエディションのVisual Studioで32ビット専用の実行ファイルを作成する
のいずれかになります。
Windows SDKに付属するCorFlagsツールを使って実行ファイルを32ビット専用に書き換えることができるのですが、書き換えるとVisual C# ExpressのIDEでデバッグできなくなってしまいました。
Expressが32ビットで動作しているのでデバッグできるようにする方法がありそうな気がするのですが。
401ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..上級者(24,846ポイント)
Date: 2010/09/30(木) 04:42
No:62467
|
|
Title: Re:C# エラーで困っています
|
|
Visual C# Expressで32ビット専用アプリをデバッグする方法が分かりました。
まずCorFlagsツールを入手してください。
Windows SDKに付属しています。
Visual C# Expressでプロジェクトのプロパティを開きます。
『デバッグ』タブの『Visual Studio ホスティング プロセスを有効にする』のチェックを外します。
『ビルド イベント』タブの『ビルド後に実行するコマンド ライン』に
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\corflags.exe" /32BIT+ "$(TargetPath)"
の一行を入力します。
#corflags.exeのパスはWindows SDKのインストール先に合わせてください。
#あるいはファイル名だけ指定してあらかじめ環境変数でパスを通しておくほうが良いでしょう。
以上で64ビット版ウインドウズでも32ビットで動作するアプリを作成することができてデバッグもできます。
32ビットでのデバッグができなかったのはホスティングプロセス(*.vshost.exe)が64ビットモードで起動するためでした。
ホスティングプロセスの実行ファイルは自動作成されるしCorFlagsツールで書き換えることもできませんでした。
ホスティングプロセスを無効にすると、
・デバッグの起動時間が増える
・イミディエイトウィンドウ(の実行時評価機能)が使えなくなる
といった影響があるそうです。
320ポイント を手に入れた。
|
|
|
|
|
Name: YuO ..熟練のプログラマー(47,238ポイント)
Date: 2010/09/30(木) 10:31
No:62472
|
|
Title: Re:C# エラーで困っています
|
|
[ビルド]メニューから[構成マネージャ]を選び,アクティブソリューションプラットフォームから「x86」を選択します。
無い場合は,アクティブソリューションプラットフォームから「<新規作成>」を選択,
新しいプラットフォームから「x86」を選択し,「OK」を押し,さらに「閉じる」を押します。
これで32ビットモードのアセンブリを作成できます。
この問題が多かったのか,VS 2010以降デフォルトがAnyCPUではなくx86になっています。
197ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..かけだし(1,188ポイント)
Date: 2010/09/30(木) 19:04
No:62476
| 解決!
|
Title: Re:C# エラーで困っています
|
|
Yuoさんの方法が簡単そうだったので、使わせていただきました。
ありがとうございました。
ISLeさんもいろいろ調べてくださって、ありがとうございました。参考になりました。
2倍のポイントを手に入れた! 98ポイント を手に入れた。
|
|
|
|
Name: サンタクロース ..中級者(9,451ポイント)
Date: 2010/09/24(金) 00:04
No:62286
|
|
Title: 敵弾の描画順序について
|
|
こんばんわ。
龍神録プログラミングの館を参考にしているのですけど、一つ疑問が浮かびました
敵の弾の描画順序を入れ替るにはどうすれば良いでしょうか?
描画はソースが下に来るほど上に描画されるようになっていたと思ったので試しに
下のように場合分けしてみましたが変化はありませんでした。
回答よろしくお願いします。
if(boss_shot.bullet[j].knd==10){
DrawRotaGraphF(
boss_shot.bullet[j].x+FX+dn.x, boss_shot.bullet[j].y+FY+dn.y,
1.0, disp_angle,
img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);
}
else if(boss_shot.bullet[j].knd==6 || boss_shot.bullet[j].knd==7 || boss_shot.bullet[j].knd==8 ||
boss_shot.bullet[j].knd==11 || boss_shot.bullet[j].knd==12){
DrawRotaGraphF(
boss_shot.bullet[j].x+FX+dn.x, boss_shot.bullet[j].y+FY+dn.y,
1.0, disp_angle,
img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);
}
else{
DrawRotaGraphF(
boss_shot.bullet[j].x+FX+dn.x, boss_shot.bullet[j].y+FY+dn.y,
1.0, disp_angle,
img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);
}
}
580ポイント を手に入れた。
|
|
|
|
Name: 真等 [URL] ..入門者(3,061ポイント)
Date: 2010/09/24(金) 01:05
No:62287
|
|
Title: Re:敵弾の描画順序について
|
|
こんにちは!
>描画はソースが下に来るほど上に描画される
とのことですが、そうでない場合もあるかもしれません。
例えば、
for ( int i=0; i<2; ++i ) {
DrawRotaGraphF(boss_shot.bullet[j].x, 略); // 描画1
DrawRotaGraphF(boss_shot.bullet[j].x, 略); // 描画2
}
この場合ですと、ソースとして見れば「描画2」が下にありますが、実際にfor文を展開すれば、
DrawRotaGraphF(boss_shot.bullet[0].x, 略); // 描画1
DrawRotaGraphF(boss_shot.bullet[1].x, 略); // 描画2
DrawRotaGraphF(boss_shot.bullet[0].x, 略); // 描画1
DrawRotaGraphF(boss_shot.bullet[1].x, 略); // 描画2
となりまして、3行目の「描画1」は2行目の「描画2」より上に来ることになります。
見当違いのこと言ってたらすいません。
345ポイント を手に入れた。
|
|
|
|
|
Name: ft [URL] ..上級者(18,042ポイント)
Date: 2010/09/24(金) 01:21
No:62288
|
|
Title: Re:敵弾の描画順序について
|
|
そのコードですと配列に格納されている順番(j)で描画されてしまいます。
(例えばj=100の時にboss_shot.bullet[j].knd==6を満たして、次のj=101の時にboss_shot.bullet[j].knd==10を満たしても、結局knd=10の方が後で描かれるため前回の上に描かれてしまいます)
そこで私は描画直前に弾の構造体の中身をソートする関数を挟んでいます。
龍神録のサンプルのままですと、jの値が小さければ下に描かれますので、
優先的に下に描きたい弾情報と若い値のjに入っている弾情報を交換する感じです。
私の場合とりあえず1種類の弾だけですが、
//弾情報ソート
void bullet_sort(){
int i;
static int n;
//ソート元情報保存用変数
float smx,smy,smangle,smspd;
int smflag,smcnt,smstate,smknd,smcol,smeff,smeff_detail;
//ソート先情報保存用変数
float ssx,ssy,ssangle,ssspd;
int ssflag,sscnt,ssstate,ssknd,sscol,sseff,sseff_detail;
for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet[i].knd==10){//もし弾の種類が10だったら
//元の弾情報保存
smx=boss_shot.bullet[i].x;
smy=boss_shot.bullet[i].y;
smangle=boss_shot.bullet[i].angle;
smspd=boss_shot.bullet[i].spd;
smflag=boss_shot.bullet[i].flag;
smcnt=boss_shot.bullet[i].cnt;
smstate=boss_shot.bullet[i].state;
smknd=boss_shot.bullet[i].knd;
smcol=boss_shot.bullet[i].col;
smeff=boss_shot.bullet[i].eff;
smeff_detail=boss_shot.bullet[i].eff_detail;
//ソート先の弾情報保存
ssx=boss_shot.bullet[n].x;
ssy=boss_shot.bullet[n].y;
ssangle=boss_shot.bullet[n].angle;
ssspd=boss_shot.bullet[n].spd;
ssflag=boss_shot.bullet[n].flag;
sscnt=boss_shot.bullet[n].cnt;
ssstate=boss_shot.bullet[n].state;
ssknd=boss_shot.bullet[n].knd;
sscol=boss_shot.bullet[n].col;
sseff=boss_shot.bullet[n].eff;
sseff_detail=boss_shot.bullet[n].eff_detail;
//弾情報を交換する
//ソート1
boss_shot.bullet[n].x=smx;
boss_shot.bullet[n].y=smy;
boss_shot.bullet[n].angle=smangle;
boss_shot.bullet[n].spd=smspd;
boss_shot.bullet[n].flag=smflag;
boss_shot.bullet[n].cnt=smcnt;
boss_shot.bullet[n].state=smstate;
boss_shot.bullet[n].knd=smknd;
boss_shot.bullet[n].col=smcol;
boss_shot.bullet[n].eff=smeff;
boss_shot.bullet[n].eff_detail=smeff_detail;
//ソート2
boss_shot.bullet[i].x=ssx;
boss_shot.bullet[i].y=ssy;
boss_shot.bullet[i].angle=ssangle;
boss_shot.bullet[i].spd=ssspd;
boss_shot.bullet[i].flag=ssflag;
boss_shot.bullet[i].cnt=sscnt;
boss_shot.bullet[i].state=ssstate;
boss_shot.bullet[i].knd=ssknd;
boss_shot.bullet[i].col=sscol;
boss_shot.bullet[i].eff=sseff;
boss_shot.bullet[i].eff_detail=sseff_detail;
n++;//nをひとつ進める
}
}
n=0;
}
こんな感じでやっています。
flagを加えてちょっと改変すれば数種類の弾ソートも可能だと思います。
もっと良い方法があると思いますので参考までに…
あとここからは蛇足なのですが弾の描画順ということで、連なって描かれる弾を綺麗に描画する方法があります。
おそらくサンプルのままだと、連なる弾の重なり方は時間が経つと添付画像の上のようにバラバラになると思います。これは弾の検索を毎回0〜BOSS_BULLET_MAX全て調べているため、画面外に行ったなどしてフラグが空いた弾が若い値のjの場合、その値から優先的に弾を作ってしまうからです。
そこで、空いてる弾の検索でフラグが立っていない弾のインデックスを保存し、次に検索する時は前回+1から空き弾を検索することで下の画像にように割と綺麗にできます。
search_boss_shotを
int search_boss_shot(){//空き番号を返す
int i,b_num;
if(b_num>=BOSS_BULLET_MAX)b_num=0;
for(i=b_num;i<BOSS_BULLET_MAX-100;i++){
if(boss_shot.bullet[i].flag==0){
b_num=i+1;
return i;
}
}
return -1;
}
という感じです。
たまにおかしくなりますが結構いけますw
1,628ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(578,258ポイント)
Date: 2010/09/24(金) 06:15
No:62289
|
|
Title: Re:敵弾の描画順序について
|
|
>敵の弾の描画順序を入れ替るにはどうすれば良いでしょうか?
今の配列構造のままでやるなら int renderingOrder[BOSS_BULLET_MAX] という配列を作って、
描画したい boss_shot.bullet配列のインデックスを格納しておき、boss_shot.bullet[renderingOrder[j]]とすれば
renderingOrderで指定した順に描画されます。
184ポイント を手に入れた。
|
|
|
|
|
Name: サンタクロース ..中級者(9,618ポイント)
Date: 2010/09/30(木) 00:57
No:62465
| 解決!
|
Title: Re:敵弾の描画順序について
|
|
真等さん、ftさん、Justyさん回答ありがとうございます。
今回はftさんのソースをいじらせて使わせてもらいました。
ただ本体がPSPなので、毎描画?ごとに使うと処理落ちがすごいですね(笑)。
自分は弾を撃った直後に使うようにしました(かなりその場しのぎっぽいですが)
Justyさんの方法はとても効率が良さそうですね。
時間があればそちらの方法でも試してみたいと思います。
167ポイント を手に入れた。
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(83,550ポイント)
Date: 2010/09/29(水) 18:23
No:62457
|
|
Title: テンプレート使用時の分割コンパイルについて
|
|
いつもお世話になります。
今コツコツとクラスやテンプレートの勉強をしているのですが、
テンプレートを使用した時の分割コンパイルがうまくいきません。
具体的には「未定義のシンボル」というエラーが出ます。
おそらく該当の関数の定義が見えていないのだと思われるのですが、
どのような定義にすれば、分割コンパイルが可能にあるのでしょうか?
そもそも、テンプレートを使った場合は、分割コンパイルは無理で、
ヘッダファイルに定義部分までを全て書くしかないのでしょうか?
例を書きます。
まず下記の関数テンプレートを持ったBASEというクラスがあります。
これをBase.hというヘッダファイルに書きます。
class BASE{
protected:
template <typename T1> void SetList(T1 p,LIST<T1> header);
};
でこれをインクルードしたBase.cppというファイルがあり、その中で
この関数テンプレートの定義を行っています。
template <typename T1> void BASE::SetList(T1 p,LIST<T1> header)
{
※省略
}
さらにこのクラスを継承したAというクラスがあります。
class A : public BASE{
A();
};
例えばこの関数のコンストラクタで
A::A()
{
SetList(func,head);
}
という風に呼び出しても、未定義のシンボルというエラーが出ます。
明示的な型の具現化をしても一緒です。
※SetListで渡している型には絶対間違いはありません
このテンプレート関数の定義自体をヘッダファイルに全部書いてしまえば、コンパイルは通るのですが、
インライン展開されてしまうことや、ヘッダ部分に書くのはコードも長いので、出来れば分割コンパイルに
したいと思っています。
分割コンパイルの方法をご存知の方がいらっしゃいましたら、ご教示願います。
406ポイント を手に入れた。
|
|
|
|
Name: ぽこ ..プログラマー(31,428ポイント)
Date: 2010/09/29(水) 19:58
No:62461
|
|
Title: Re:テンプレート使用時の分割コンパイルについて
|
|
export指定をサポートしているコンパイラなら分離コンパイル可能です。
VC++は(多分)サポートしていません。
というか、私自身サポートしているコンパイラを見たことありません
(製品名を忘れましたが、存在するのは知っています)。
基本的にテンプレートの定義はヘッダファイルに押し込めたほうが良いと思いますよ。 
133ポイント を手に入れた。
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(84,090ポイント)
Date: 2010/09/29(水) 18:43
No:62458
|
|
Title: テンプレートを使用した、リスト用の構造体について
|
|
お世話になります。シエルです。
連続で質問すいません。
タスクシステムを作っている最中なんですが、そのためのリストの構造体についても
テンプレートを使って、基底クラスに持たせています。
実際はこんなのではありませんが、簡単に作りました。
template <typename T1> struct LIST{
T1 p;//関数ポインタが入っている。
LIST *next;
};
メンバ変数pには関数ポインタを入れます。
まあそれはどうでもいいんですが、その下のメンバのnextについてです。
この変数は次のリストを表すポインタになります。
この書き方があっているかについて確認したいのですが、
今現在は、上記のような書き方でコンパイルしても問題なくリストとして動いています。
ですが、下記のような書き方でも動きます。
template <typename T1> struct LIST{
T1 p;//関数ポインタが入っている。
LIST<T1> *next;//これにも明示的な具現化をする。
};
このnextはLIST型のポインタなので、そのLIST型はこの構造体テンプレートから作られているので、
これも明示的な具現化が必要かな?と思ってこうしてみました。
これでも問題なくコンパイルは通り、リストとしても問題なく動きました。
この二つの方法はどちらが正しいのでしょうか?
どなたかお分かりになる方、ご教示願います。
※独学で勉強中でして、まだ勉強したてなので、変な文言とかがあったらすみません。 
540ポイント を手に入れた。
|
|
|
Name: blue ..初心者(7,091ポイント)
Date: 2010/09/29(水) 13:35
No:62446
|
|
Title: 関数
|
|
「20人のクラスで試験を行いました。試験の受験番号と点数(0〜100の整数)を入力して平均値を出すプログラムを作ってください。また、受験番号を入力すると点数が表示されるようにもしてください。受験番号は1番から順に20番間までとします」
という問題で自分なり考えてソースを書いてコンパイルして実行してみると平均点が正常に表示されず、受験番号を入力するとセグメントエラーが出ます。どうすればよいでしょうか?
自分が書いたソース
#include<stdio.h>
# define BUFFER_SIZE (256)
int get_int(void)
{
char buf[BUFFER_SIZE];
fgets(buf, BUFFER_SIZE, stdin);
return atoi(buf);
}
int main(void){
int i,sum,a[20],b;
for(i=0 ; i < 20 ; i++){
printf("点数は? ");
a[i] = get_int();
sum += a[i];
}
printf("平均点は%dです",sum/20);
while(1){
printf("受験番号を入力してください");
b=get_int();
if(b==0)
break;
printf("%d番は%s点です",b,a[b-1]);
}
return 0;
}
355ポイント を落としてしまった。
|
|
|
|
Name: dic ..ハッカー(102,134ポイント)
Date: 2010/09/29(水) 13:48
No:62447
|
|
Title: Re:関数
|
|
> printf("%d番は%s点です",b,a[b-1]);
これを
printf("%d番は%d点です",b,a[b-1]);
に変更してください
%s -> %d
26ポイント を手に入れた。
|
|
|
|
|
Name: blue ..初心者(7,171ポイント)
Date: 2010/09/29(水) 13:55
No:62449
|
|
Title: Re:関数
|
|
ハッカーさんありがとうございます。セグメントエラーはでなくなりよくなりましたが、まだ平均点が正常に表示さてないので何かわかることがあればおしえてください。
80ポイント を手に入れた。
|
|
|
|
|
Name: blue ..初心者(7,310ポイント)
Date: 2010/09/29(水) 14:04
No:62450
|
|
Title: Re:関数
|
|
うっかりしてました。toyoさんありがとうございます。問題が解決しました。
ところで、関数を表示させるときになぜ%dをつかうのですか?
関数は%sにするものだとおもっていたのすがまちがっていますか?
printf("%d番は%s点です",b,a[b-1]);
これを
printf("%d番は%d点です",b,a[b-1]);
に変更してください
139ポイント を手に入れた。
|
|
|
|
Name: syanneru ..ぴよぴよ(101ポイント)
Date: 2010/09/29(水) 12:58
No:62445
|
|
Title: 時間の処理がわかりません
|
|
C言語暦半年です。
現在シューティングゲームを製作中なのですが、
キーを押す
↓
フラグ1
↓
2秒後にフラグ2
↓
3秒後にフラグ3
という処理をしたいのですが、時間を計る関数がうまくいきません。
101ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,281,220ポイント)
Date: 2010/09/29(水) 18:03
No:62456
|
|
Title: Re:時間の処理がわかりません
|
|
お使いのライブラリはDXライブラリでしょうか?
もしDXライブラリをお使いで、メインループ部分の構造がゲームプログラミングの館の13章辺りだと仮定します。
int counter=0;
などで、カウンター変数を用意します。
ループの最後に
counter++;
で、1ループで1カウントするようにしておきます。
一般的にモニタは60Hzなので、60ほど値が増加するごとに1秒だと解ります。
例えば60は1秒、120は2秒・・
といった具合です。
これはScreenFlip()で、モニタがリフレッシュするまで待ってくれる為です。
モニタが75Hzなどであれば、1秒は75ずつになります。
このようなばらつきを抑えるには、フレームレートを一定にするか、時間による計算が必要になります。
もし時間から計算したい場合は、GetNowCount関数を用いて計測して下さい。
しかし、時間を基準にするよりフレーム数を基準にする方が簡単なので、前者をお勧めします。
もし言っていることが良く解らなければまた聞いて下さい。
326ポイント を手に入れた。
|
|
|
|
Name: CorzY [URL] ..ぴよぴよ(14ポイント)
Date: 2010/09/16(木) 12:38
No:61834
|
|
Title: 制作したゲームの試しプレイのお願い[9/28 ver.4.0投稿]
|
|
初めまして、CorzYと申します。
普段は、こちらの掲示板は閲覧のみの場合が多く大変恐縮なのですが、龍神録を参考に制作させていただいたゲームが9割方完成いたしましたので、感想やバグ報告などをお願いできればと思い、投稿させていただきました。
処女作でしたが、自分なりに力を入れて制作したゲームです。
デバッグ版公開終了しました。有難うございました。
正式版が発表されましたら、またご報告に参りたいと思います。
[9/28 デバッグver4.0投稿]
・思い切って初期設定でショット時、自動向き固定に変更しました(全体コンフィグで別々にできる)
・キーボード配置再検討
・ショット+ブレイド同時押しでもボム発射できるように変更
・キーボード自由設定実装
・マウス操作時、左クリックショット、右クリックブレイドに変更
・ジョイパッドコンフィグのセーブ時に、変更前のショットボタンになってる点を修正
・全体設定で「変更せずに戻る」を追加
[9/19 デバッグver.3.0投稿]
・フォント問題、恐らく解決
・指摘された誤字などをいくつか修正
・一時停止時にキーボードグラが出る
・いくつかのビルパターン(近景)追加、変更
[9/16 23:00 デバッグver.2.1投稿]
・Vistaの3面停止バグおそらく修正
・ジョイパッド十字キー対応
zipファイルの中に、デバッグシートというアンケート形式のtxtファイルを内包させていただきましたので、もしよろしければ、ご回答いただけると幸いです。
OS等の動作環境確認だけでも大歓迎です。
プレイヤーキャラのモーションなど、システムそのものの変更については、今回はこのバランスにて発表させていただく予定ですが、アップデート時等に再検討いたしますので、遠慮なくご指摘ください。
一定期間のデバッグを経て完成版をライブラリサイトにて、発表したいと思っております。
※厚かましいお願いですが、スクリーンショットのご投稿はご遠慮いただきますようお願いいたします。
【私の環境】
OS:Windows XP HOME Editon SP2
CPU:Core2Duo T7250@2.00GHz
メモリ:2G RAM
DirectX:9.0
グラボ:NVIDIA GeForce 8400M GS
ではではぜひご協力お願いいたします。 
14ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,277,052ポイント)
Date: 2010/09/16(木) 13:01
No:61835
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
CorzYさん
お〜ついに(ほぼ)完成ですか、長い間、制作お疲れ様です^^
現在携帯からなので、まだ詳しく見れてしませんが、帰宅したら拝見しますね☆
#今日は帰宅が深夜になりますが(汗
60ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..ぴよぴよ(62ポイント)
Date: 2010/09/16(木) 13:59
No:61839
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
Dixqさん
わわっ!レス有難うございます。SNSの方では、お世話になっております。
一部のイラストを除いて新たなバグがなければほぼ完成となりました。
拙い内容ではありませが、ぜひぜひ見てやって下さい><
48ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(42,633ポイント)
Date: 2010/09/16(木) 17:49
No:61847
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
やらせていただきました。
すごいですね。
戦闘も楽しいですし、ストーリーもすごいちゃんとしてる。
何度か笑えました。
(周りに人いなくてよかった…)
絵も本格的ですね。
で、まだ最後まで行ってませんが、問題が発生したためとか何とかいいながら、パソコンのほうから消されてしまいました…
ストーリーの3ぐらいで戦闘はじまる直前。
2回ぐらいやってみましたが同じ場所で止まってしまいます。
これは体験版的なものなのでしょうか?
それともバグでしょうか?
========
もしくは私のパソコンのせい?

128ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(61,289ポイント)
Date: 2010/09/16(木) 18:13
No:61849
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
これは使えるジョイパッドが限定されますね
移動、選択がXY軸のアナログ入力だけのようなのでこれがないパッドでは遊べませんでした
移動、選択もコンフィグできるようにしたらいいと思いますよ
GetJoypadPOVState( int InputType, int POVNumber ) ;
という関数もあります
105ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..ぴよぴよ(216ポイント)
Date: 2010/09/16(木) 18:55
No:61862
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>パコネコさん
試しプレイ有難うございます。
お誉めいただき光栄です。
えーと、問題の個所ですが、少なくとも自分のPCでは問題が発生していません。また、今回、アップさせていただいたものは、基本的に最後までプレイできます。
少し頭の痛い問題ですが、OS等の環境をお教えいただいてもよろしいでしょうか?
もしかしたら同じ環境で同じ現象が発生する共通点が見つかるかもしれません。
もしよろしければよろしくお願いします。
154ポイント を手に入れた。
|
|
|
|
|
Name: Tatu ..熟練のプログラマー(44,768ポイント)
Date: 2010/09/16(木) 18:56
No:61863
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
ダウンロードしてプレイしていますが
パコネコさん同様
3面戦闘前の会話シーン後にプログラムの動作が停止してしまいます。
環境
オペレーションシステム:Windows Vista Business
プロセッサ: Intel(R) Core(TM)2 Duo CPU U7500 @ 1.06GHz(2 CPUs)
メモリ: 1014MB RAM
ディスプレイデバイス: Mobile Intel(R) 965 Express Chipset Family
DirectX Version: DirectX 10
キーボードで操作。
処理落ちはほぼなし。
トレーニングタイム(ショット攻撃力をあげられるところまで上げて挑戦)
1. 2:14
2. 3:24
104ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..ぴよぴよ(301ポイント)
Date: 2010/09/16(木) 18:57
No:61864
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>toyoさん
試しプレイ有難うございます。
十字キーのジョイパッドは使えないということでしょうか?
確かにこれについて完全に失念しておりました。
GetJoypadPOVState( int InputType, int POVNumber ) ;
についても存じませんでした^^;
なんとか実装してみようと思います。
ご指摘有難うございます。
#誤字修正 
85ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..ぴよぴよ(367ポイント)
Date: 2010/09/16(木) 19:05
No:61867
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>Tatuさん
試しプレイ有難うございます。
同じ場所ということは完全にこちら側の欠陥ですね。
もうしばらく様子を見てみないと分かりませんが、以前もVistaでプレイされた方の挙動がやや不安定だったことがありました。
ご報告有難うございます。
66ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(43,084ポイント)
Date: 2010/09/16(木) 19:45
No:61873
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
一応私も、「Windows Vista TM」のようです。
(シールに書いてたやつですけど…)
他はよくわかりません、すいません。
(そういうところ勉強不足なので…)
続きできるようになるの楽しみにしてます。
(希望的な願い…)
113ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..比類無きプログラマー(87,599ポイント)
Date: 2010/09/16(木) 21:23
No:61880
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
面白そうなのでやってみましたが、すごい完成度ですね。
私には敵が寄ってきながら弾を撃ってくるなんて、斬新で面白かったです。
1面の戦闘で負けてしまいました。(本編だけ)やったところではバグはありませんでした。
環境
OS Windows Vista Home Premium
CPU Intel(R) Core(TM)2 Duo CPU T8100 2.10GHz
メモリ 2038MB RAM
グラフィックカード Mobile Intel(R) 965 Express Chipset Family
DirectX DirectX 10
処理落ち全然なかったです。
制作お疲れ様です。
2倍のポイントを手に入れた! 74ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..ぴよぴよ(581ポイント)
Date: 2010/09/16(木) 21:59
No:61887
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>パコネコさん
修正しました。恐らく直ったと思われます。
ただ、原因が曖昧です。
とあるjpgファイルを保存し直すと正常に動きました。
以前も同じようなことがあったのですが、どうやらvistaには相性の悪いjpgファイルがあるようです。
もしかしたら原因がわかる方がいるかもしれないので、vistaにて不具合を起こしたjpgファイルを添付します。
145ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..ぴよぴよ(663ポイント)
Date: 2010/09/16(木) 22:02
No:61889
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>パコネコさん
添付ファイルを一つずつしか添付できないようなので・・・
次にgimpにて保存し直したvistaにて不具合を起こさなかったjpgファイルを添付します。
原因がはっきりしないので、あまり釈然としませんが、これで解決しました。
よろしければ続きをプレイなさってください。
82ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..ぴよぴよ(870ポイント)
Date: 2010/09/16(木) 22:28
No:61891
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>御津凪さん
試しプレイとデバッグシートご回答有難うございます。
いくつかのスペルミスのご指摘非常に助かりました。
ただ、フォントが、はみ出してしまう件についてはちょっと環境依存の可能性があります。
もしかしたら、dataの中にあるttfファイルをちゃんとロードできていない可能性があります。
他の方で、Windows 7で文字が枠からはみ出してしまうという報告があれば、7依存で、まず間違いなさそうです。
なんとか解決策を講じなければなりませんね。
何はともあれ、ご報告有難うございました。
152ポイント を手に入れた。
|
|
|
|
|
Name: 五反田 ..かけだし(1,033ポイント)
Date: 2010/09/16(木) 22:34
No:61892
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
こんばんは。
Ver2のほうですが、素材が丸見えになってしまっていますが、よろしいのでしょうか?
また、Ver1にて、管理者権限で起動したら、3面停止バグを回避できました。
OSは7 Home Premium x64です。
まだ途中までしかやららせてもらっていませんが、とても面白いです。
シューティングは苦手だったのですが、こういうものはあまり抵抗なく遊べますね。
完成楽しみにしています。
143ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(149,890ポイント)
Date: 2010/09/16(木) 22:38
No:61893
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
> もしかしたら、dataの中にあるttfファイルをちゃんとロードできていない可能性があります。
Ver2 では正しいフォントで表示されているのを確認しました。
パックされた状態ではフォントが正しく読み込めていないのかもしれませんね。
59ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(43,082ポイント)
Date: 2010/09/16(木) 22:38
No:61894
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
二つ目のほうやってみたのですが…
3面できませんでした…
初めに全クリ済みのデータになっていたので、初めからで起動したのがいけなかったのでしょうか?
43ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..ぴよぴよ(964ポイント)
Date: 2010/09/16(木) 22:51
No:61895
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>五反田さん
試しプレイ有難うございます。
ご報告有難うございます。
>素材丸見え
間違えて、投稿してしましました><
改めて投稿しました。。。
>管理者権限で起動したら、3面停止バグを回避
これは耳寄りな情報ですね!
94ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..かけだし(1,100ポイント)
Date: 2010/09/16(木) 22:56
No:61896
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>御津凪さん、パコネコさん
申し訳ありません。22:00ごろのver2は誤爆です。そっと削除くださるとありがたいです。
>御津凪さん
もしかしたら、23:00投稿のものは、またちゃんと表示されなくなる可能性があります。もしかすると、7、DXアーカイブ、ttfファイル(フォントのファイル)の相性が悪いのかもしれません。最悪の場合、ttfファイルだけ外に出すことで対応できるかもしれません。
>パコネコさん
23:00投稿のもので、もう一度試してみてもらえませんか?
よろしくお願いします。
136ポイント を手に入れた。
|
|
|
|
|
Name: Tatu ..熟練のプログラマー(44,836ポイント)
Date: 2010/09/16(木) 23:14
No:61897
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
新しいバージョンを入れてプレイしたら進めるようになりました。
ありがとうございます。
2倍のポイントを手に入れた! 68ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,277,755ポイント)
Date: 2010/09/16(木) 23:25
No:61899
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
> CorzYさん
先ほど帰ったばかりなので、あまりプレイできていませんが、すばらしい出来ですね、少しですが楽しめました^^
なんかすごくファイナルファイトを思い出しましたw
懐かしい感じでありながら、弾幕が飛んでくるという斬新さが非常によかったと思います^^
ただ、あのたまって避けれるんでしょうか;
私が下手なだけなのか、頑張っても避けにくい弾があるような気がしました^^;
後少し意見というほどのものでもないのですが、少し書いておきます。
・当たり判定範囲が解りにくい? →東方のように当たり判定を表示する要素を追加してみては。
・8方向ショットは無い?
・切りつける時は動けたほうが操作性が良いのでは?
・操作キーが多い? →タメ、同時押しなどを利用して、出来るだけ操作キーを減らすようにした方が操作性上がりませんかね?ジョイパッドならいいと思うのですが、キーボードだと、え〜とどれだっけ・・な感じになるような気がしました^^;
本当ならエクセルシートなどにザーッと書いてみたいところですが、時間が取れずすみません><;
時間のある時是非じっくりプレイさせて頂きます♪
454ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..かけだし(1,870ポイント)
Date: 2010/09/17(金) 00:09
No:61903
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>Tatuさん
それを聞いて多少安心致しました。こちらこそご報告有難うございます。
>Dixqさん
お帰りなさいです^^
少しでもプレイしていただけるだけで幸いです。
どうしてもスクロールさせたかったので、一番現実的だったファイナルファイト方式を採用しましたw
・ただ、あのたまって避けれるんでしょうか;
運が悪いと避けられない時もあると思います。しかし、全弾幕少なくとも一回は完全回避したことがあるので運が良ければ避けられます。
東方さんや龍神録さんに比べ、敵の位置が目まぐるしく変わるのが特徴で運の要素がかなりあります。また、ぶっちゃけ二つに比べ計算し尽くされた弾幕ではありません。その代わり被弾に対してのダメージが緩めになっています。
・当たり判定範囲が解りにくい? →東方のように当たり判定を表示する要素を追加してみては。
当たり判定については、当たり判定表示というアイテムで表示することができます。ただ、それを使うと他のアイテムが使えなくなるので、若干、東方さんや龍神録さんよりは不親切になってます。
・8方向ショットは無い?
これはプレイヤーキャラが斜め撃ちできないのかってことでしょうか?えぇ・・・グラフィックの事情だとお考えくださいww
・切りつける時は動けたほうが操作性が良いのでは?
これについては開発中も、そういった意見がありましたが、ブレイドはハイリスクハイリターンにしようという感じになっております。
・操作キーが多い? →タメ、同時押しなどを利用して、出来るだけ操作キーを減らすようにした方が操作性上がりませんかね?ジョイパッドならいいと思うのですが、キーボードだと、え〜とどれだっけ・・な感じになるような気がしました^^;
確かに・・・ボムなどは同時押しでもできると良いかもしれませんね。。。
ご意見有難うございます!いろいろと考えさせられる意見でした。
ぜひお時間ある時にでも、じっくり遊んでみて下さいね^^
770ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..かけだし(1,957ポイント)
Date: 2010/09/17(金) 09:36
No:61922
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>御津凪さん
おはようございます。
やはりそうですよね・・・少なくとも御津凪さんの環境ではアーカイブ内のttfが読みこめないということで間違いなさそうですが・・・7が原因かどうかは確定でないので、もう少し情報が欲しいところではありますね。
情報収集も兼ねて投稿してみますかね・・・
追記:
原因が分かりました。
フォントを追加するAddFontResourceExは元々DXライブラリの関数でないので、ttfを読みこめないのは当たり前でした(恐らく、みなさんもデフォルトフォントがロードされてます)。今のところ、ttfファイルはアーカイブ外に出すしか対処法はなさそうです。

87ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(77,122ポイント)
Date: 2010/09/17(金) 09:45
No:61923
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
昨日やりました。
すごい完成度高いですね^^
絵もすごい上手で綺麗でしたし、楽しめました。
気になった点としては、当たり判定が分かりづらかったということぐらいでしょうか。
よけたと思っても、当たってたりということがあったので当たり判定部分が
わかりやすくなれば、もっと楽しめる気がしました。
後、私の環境は、Windows7 Home Premium 32bitでしたが、
フォントの異常などはありませんでした。
まだ全てプレイしてるわけではないので、新たなバグが見つかったら
またご報告させていただきます。
249ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..かけだし(2,255ポイント)
Date: 2010/09/17(金) 10:28
No:61925
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>シエルさん
試しプレイ有難うございます!
そう仰って下さるとうれしいです。
当たり判定についてはビジュアルを優先しました。慣れるまで少し難しいですが・・・
フォントについては、実はほぼ全ての方がデフォルトフォントになっていると思われます。
>まだ全てプレイしてるわけではないので、新たなバグが見つかったら
>またご報告させていただきます。
有難いです。よろしくお願いいたします><
2倍のポイントを手に入れた! 298ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(150,036ポイント)
Date: 2010/09/17(金) 10:47
No:61926
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
一応フォントの問題の判断について(こちらで明記していなかったので)書いておきますね。
判断は簡単で、コンフィグ画面で被っていたりはみ出しているテキストがあるかで判断できます。
(はみ出していなければ正しいフォントが使われている証拠)
99ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(218,275ポイント)
Date: 2010/09/17(金) 11:46
No:61928
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
ちょっとだけプレイしました。よくできてますね。
エイリアンシンドロームを思い出しました。(古い例えですみません(汗))
個人的な要望なので無視していただいても構わないのですが、緊急回避みたいなのがあればいいかな〜?とか思いました。
※おそらく、ある程度はダメージを受けるのを前提に作成されているのだと思うので、バランスを崩壊させてしまう可能性がありますので参考程度にしてください。
一瞬無敵になって向いている方向へ高速ダッシュするようなものがあったらどうかと思った次第です。(勿論、使用にはなんらかの制限有りで…(例えば、時間で回復するゲージが満タンでなければ駄目とか)
「ボムでいいじゃないか?」と思われるかもしれませんが、ボムを打つとゲームの進行がぶった切られるようで、あまり好きではないのです(めっちゃ個人的な趣味で申し訳ないですm(__)m)
この手のアクションゲームは敵の攻撃を避けることでもプレイヤーに快感が発生します。なので、避けるという行動に特化した特殊行動があってもいいかな?という提案です。
とはいえ、前にも書きましたが、個人的嗜好の強い要望なので、あまり気にしないでくださいね(^_^;)
453ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..かけだし(2,383ポイント)
Date: 2010/09/17(金) 12:32
No:61929
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>御津凪さん
明記有難うございます。御津凪さんがご指摘してくれなければ大変なことになるところでした^^;
>バグさん
試しプレイ有難うございます。SNSの方でちょくちょくお名前を拝見するような・・・
なるほど、緊急回避おもしろそうです・・・実は、アップデート時にキャラ追加も目論んでいまして、その時のアイデアの一つにさせていただきます。非常におもしろいアイデアだと思います。
#誤字修正 
128ポイント を手に入れた。
|
|
|
|
|
Name: Tatu ..熟練のプログラマー(44,974ポイント)
Date: 2010/09/17(金) 13:34
No:61931
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
一通りプレイしてみました。
トレーニングタイム(1、2ワイド 以降はライト 一時はフル装備)
1.00:58
2.01:14
3.01:25
4.01:35
5.01:41
6.01:36
7.02:49
低速移動は一度も使わなかった。
高速移動ならば使えたかもしれない。
MISSIONはSTGが苦手な人にとっては難しすぎる気がする。
また、チュートリアルを用意したほうがよいのではないでしょうか。
TRAININGはかなりやり応えがありました。でも毎回アイテムをもらいに行くのが面倒でした。
138ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..入門者(2,597ポイント)
Date: 2010/09/17(金) 14:46
No:61933
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>Tatuさん
早速、オールSランクですね!すごいです。実は自分はSランクだしたことがな(ボソッ
>MISSIONはSTGが苦手な人にとっては難しすぎる気がする。
確かに、一面で挫折してしまった方もいるみたいですし・・・もう少し他の方の意見も聞きたいですが、多少下方修正するかもしれません。
>また、チュートリアルを用意したほうがよいのではないでしょうか。
チュートリアルは今から着手するにはちょっとハードルが高めですね^^;
>TRAININGはかなりやり応えがありました。
有難うございます^^
>でも毎回アイテムをもらいに行くのが面倒でした。
これは、確かにそうかもしれません・・・うーん、考えどころです。
そこまで量があるわけではありませんが、かなりやり込んでいただけたみたいでうれしいです。
とりあえずVistaで最後までできたというのも朗報です。有難うございました。
214ポイント を手に入れた。
|
|
|
|
|
Name: qwea ..ぴよぴよ(41ポイント)
Date: 2010/09/17(金) 15:19
No:61934
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
プレイさせて頂きました!
完成度が高く、しっかりゲームを楽しめました。
最初、当たり判定がわからず戸惑いましたが、
アイテムを装備してからは避けられるようになりました。
向きを固定して歩けるようにできるとやり易いかなと思いました。
41ポイント を手に入れた。
|
|
|
|
|
Name: qwea ..ぴよぴよ(85ポイント)
Date: 2010/09/17(金) 16:17
No:61937
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
ごめんなさい;
ちゃんと説明書を読まずに書きこんでしまいました><;
向き固定があるとかなり楽になりましたw
44ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(43,149ポイント)
Date: 2010/09/17(金) 19:14
No:61949
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
昨日は寝てしまって…
さっきようやく3面プレイできました。
とりあえず全クリ目指して頑張り(遊び)ます。
全部プレイ(クリア)できたらアンケート書きますね。
67ポイント を手に入れた。
|
|
|
|
|
Name: Tatu ..熟練のプログラマー(45,023ポイント)
Date: 2010/09/19(日) 10:10
No:62035
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
アクティブポイントを使用せず、ノーボムノーアイテム
(ただし、トレーニングで手に入る報酬はそのまま)で挑戦してみたところ、
ミッション・トレーニングともにクリアできました。
そのときのトレーニングのタイムは以下の通りです。
03:05
04:45
05:15
05:17
04:19
06:10
09:14
長期戦になり、グレイズボーナスによる体力回復がなければ無理だったでしょう。
特に最後のミッションではボス前に全快してもやられることがありました。
何度もやったためアクティブポイントが約3500に。
マゾヒスト向けアイテムの効果は「アイテムによる上昇効果をなくす」ではなく
「パラメーターを初期状態に戻す」ではないでしょうか?しかし、削り耐性のみ変化しませんでした。
ゲームオーバー時に
「タイトルに戻る」でメニュー画面に戻り、
「もう嫌だ」で、アクティブポイントを手に入れてメニュー画面に戻る。
前者は「メニューに戻る」にして、後者はゲーム終了でよいのではないでしょうか。
第二小隊のキャラクターの好きな順はこんな感じです。
アオ>リエル>セピア>アイ>ビスク>シアン
49ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..入門者(3,095ポイント)
Date: 2010/09/19(日) 14:09
No:62047
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>Tatuさん
うわー!いろいろな遊び方を追求していただけるなんて、本当にうれしいです。
>3500
本当にたくさんやっていただけたんだなーと思うと感無量です><
>マゾヒスト向けアイテムの効果は「アイテムによる上昇効果をなくす」ではなく「パラメーターを初期状態に戻す」ではないでしょうか?
仰るとおりでした。ver.3では修正いたします。
>しかし、削り耐性のみ変化しませんでした。
バグでした。ご報告有難うございます。ver.3では修正いたします。
>ゲームオーバーについて
「タイトルに戻る」⇒「メニューに戻る」に修正しました。「もう嫌だ・・・」はネタだと思って下さい^^;
キャラクターについても、名前を覚えていただくだけでもうれしいです。
近々、ver.3をアップいたします。
ご報告有難うございました><
#誤字修正

292ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..上級者(23,870ポイント)
Date: 2010/09/19(日) 15:30
No:62050
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
CONFIG→ジョイパッドの『セーブして終了』で説明には「新しく決定したボタンで」とあるのですが、変更前のボタンになっている気がします。
CONFIG→全体設定に入ると変更するつもりがなくてもゲームを終了するしか無くなってしまいます。キャンセルできるようにならないでしょうか。
123ポイント を手に入れた。
|
|
|
|
|
Name: 宗一郎 ..かけだし(2,036ポイント)
Date: 2010/09/19(日) 15:37
No:62051
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
先ほどダウンロードして起動してみましたが、ずっと真っ暗なままで、
初めの画像が出るまで4〜5分かかりました。
こんなに時間がかかったのは自分だけかもしれませんが、いちおう報告させていただきました。
自分の情報が役に立てば幸いです^^
まだゲームの中身にはほとんど手を触れていないので、ゲーム内容についての報告は、
もう直した点を指摘されても面倒でしょうからVer.3が出てからさせていただきます。
制作頑張ってください^^
環境:
[OS]
Windows Vista(R) Home Premium
[CPU]
Intel(R)Core(TM)2 Duo
[メモリ]
2G
※すみませんm(_ _)m
グラフィックカードとかはよくわかりませんでした
142ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..入門者(3,531ポイント)
Date: 2010/09/19(日) 16:22
No:62055
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>ISLeさん
試しプレイ有難うございました。
>CONFIG→ジョイパッドの『セーブして終了』で説明には「新しく決定したボタンで」とあるのですが、変更前のボタンになっている気がします。
仰る通りでした。気付きませんでした;修正させていただきました。
>CONFIG→全体設定に入ると変更するつもりがなくてもゲームを終了するしか無くなってしまいます。キャンセルできるようにならないでしょうか。
同じ意見が出ていたのですが、怠慢していました。変更せずにタイトルに戻る選択肢を追加しました。
ご報告有難うございます。
>宗一郎さん
試しプレイ有難うございます。
うーむ、4〜5分はかなり長いですね・・・
お使いのコンピュータのスペックなら十分動きそうですね・・・
メモリが不足してるのかもしれません。他のアプリケーションなどを複数、起動しているなどないでしょうか?
自分もあまり詳しくはないのですが、
タスクマネージャのパフォーマンスで「コミットチャージの合計」が「物理メモリの合計」に近くなっているということはないでしょうか?
436ポイント を手に入れた。
|
|
|
|
|
Name: 宗一郎 ..かけだし(2,111ポイント)
Date: 2010/09/19(日) 21:20
No:62071
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
遅レスですみませんm(_ _)m
めもりくりーなーで大体の物理メモリやCPUの使用率は見ていたのですが、
メモリは700Mほど使用していて、CPUは常に変動していますがだいたい40%以下でした。
あと初回起動時には4〜5分かかりましたが、二回目以降の起動では問題ありませんでした。
75ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..入門者(3,624ポイント)
Date: 2010/09/19(日) 23:24
No:62080
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>宗一郎さん
ご報告ありがとうございます。
>あと初回起動時には4〜5分かかりましたが、二回目以降の起動では問題ありませんでした。
初回と二回目以降で多少、差が出ることはありそうですが、4〜5分ってのは少し驚きですね^^;
うーん、ちょっと原因がわからないです。
でも二回目以降は正常に起動できたみたいでよかったです^^
93ポイント を手に入れた。
|
|
|
|
|
Name: situmon ..熟練のプログラマー(55,442ポイント)
Date: 2010/09/19(日) 23:28
No:62082
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
製作お疲れ様です♪軽くプレイさせていただきました。
クオリティの高さがすばらしかったです。
絵や音楽、ゲームのシステムがよかったです!!
Vistaで普通に起動できました!
4ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..入門者(3,550ポイント)
Date: 2010/09/20(月) 01:01
No:62094
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>situmonさん
試しプレイ有難うございます。
絵や音楽についても誉めていただきうれしいです。
システムはいつの間にかこうなってたって感じです^^;
今のところ大抵の方が、Vistaでも正常に動いているみたいでよかったです^^
74ポイント を落としてしまった。
|
|
|
|
|
Name: Tatu ..熟練のプログラマー(45,066ポイント)
Date: 2010/09/21(火) 00:42
No:62177
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
フォントが変化したことを確認しました。
もう嫌だ...には結構ネタがあったのですね。あまりよく見ていませんでした。
メッセージには「ボスが次に何をしてくるかは移動の仕方でだいたいわかるぞ」的なものや
キャラクターからの応援もあってもよいかなと思いました。
また、一定回数以上のときには最初のメッセージに戻してもいいのではないでしょうか。
使えないと書いた低速移動ですが、その理由は
向き固定キーと同時に押すことが難しいからです。
低速移動を使う場合、精密さを要求される弾幕の回避、自機狙いのグレイズに使うのがほとんどであり、
向きを変える必要があることが少ないと考えられるので向き固定も行えるようにした方がよいと思います。
低速移動を試してみたところ、速攻には向かないものの
グレイズによる体力回復が行いやすく、トレーニングのレベル7を10分以上耐えることも可能でした。
「回復と攻撃はトレードオフであるべき」と考えているのであればこのままにするのもよいかもしれません。
同時押しだとうまく操作できないなどの理由で矢印キー以外で操作を行うとき
左手だとRDFG、右手だとUHJKとなっていますが
普段は左手の人差し指がFに、右手の人差し指がJにあたるようにおく人が多いと思うので、
これらはそれぞれESDF、IJKLにしたほうがよいのではないですか?
今の状態だと慣れないうちは手をキーボードから放してもう一度置いたときに位置がずれてしまいます。
マウス操作もできるということなので試してみましたがポインタを動かすのではなく
その時の移動方向で決まるという仕様になっているため、正確に動かすのはキーボードに比べてかなり難しかったです。
マウスをクリックしたときの動作は左が「移動し続ける」、右が「向き固定」となっていましたが
ショットとブレイドの方がいいかもしれません。
43ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..入門者(3,976ポイント)
Date: 2010/09/21(火) 20:51
No:62203
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
>Tatuさん
こんにちは。数回に渡るご報告、本当に有難うございます><
フォントについては、恐らく今回のが正しいフォントだと思います。やはりみなさんver2では正常にロードされていなかったみたいですね。
「もう嫌だ・・・」については説明書を割と読まない人向けのメッセージになっております。
低速移動は、上級者にもしかしたら需要あるかなーと思って一応入れました。通常プレイではあまり使われないのはある程度想定内です。一応、プレイング格差をつける意味でもこの二つは切り離してあってもいいかなと思っています。
キーボのキー配置についてですが、言われてみると確かにそうですね。中指をFやJに置くことを想定していましたが、確かに普段は人差し指ですよね・・・変更を真剣に検討したいと思います。
しかし、できれば他の方の意見も聞きたいところですね^^;
実は、タイプ4とタイプ5の配置も結構微妙な気がしてます。
「タイプ4」
ショットZ
ブレイドX
向き固定Shift
低速C
ボムA
サポートS
「タイプ5」
ショットX
ブレイドC
向き固定Z
低速Shift
ボムV
サポートS
に変更するかもしれません。
マウスについて、直観的に操作できるかと思い、一応、導入してはみたものの、自分でも、使用感は正直、微妙だと思います。
「移動し続ける」はボスから離れたいときなど、マウスを大きく動かし続けることなく遠くに行けるので、便利かと思い実装したのですが微妙でしょうか・・・
クリックで、ショット・ブレイドについても考えたのですが、そうしてしまうとキーボで操作するのが主に「向き固定」と「ボム」になってしまい、なんだか対称性が悪いような気がしました。
これについてもいくつかの意見が欲しいところではあります。
#キーボードタイプの具体案を追記 
426ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL] ..入門者(4,042ポイント)
Date: 2010/09/28(火) 21:50
No:62434
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
皆さんの意見を参考に少し思い切った変更をしたver4.0をアップしました。スレが埋もれていたので恐れ入りますが、ageさせていただきます。
新たなバグが怖いので、もしよろしければデバッグプレイしていただけるとうれしいです。
66ポイント を手に入れた。
|
|
|
|
|
Name: asm ..ぴよぴよ(18ポイント)
Date: 2010/09/28(火) 23:14
No:62439
|
|
Title: Re:制作したゲームの試しプレイのお願い
|
|
したらばとかで新しい掲示板作ってそこでやったほうがいいんじゃないでしょうか
18ポイント を手に入れた。
|
|
|
|
|
Name: CorzY [URL]
Date: 2010/10/09(土) 19:26
No:618341286619989
| 解決!
|
Title: Re:制作したゲームの試しプレイのお願い[9/28 ver.4.0投稿]
|
|
過去ログに落ちてしまいましたが、昨日、ライブラリサイトへ登録手続きを致しました。
承認されれば一週間後くらいに発表される予定です。
試しプレイをしていただき、報告していただいた方、本当に有難うございました。
|
|
|
|
Name: りょう ..かけだし(2,320ポイント)
Date: 2010/09/29(水) 06:00
No:62440
|
|
Title: ショートカットファイル作成
|
|
C言語でファイルを作成するときに
fopen("ディレクトリ/ファイル名","w");
これでファイルが存在しない場合はファイルが作成されると思うのですが
ショートカットファイルを作成したい場合はどのようにすればよろしいのでしょうか?
69ポイント を手に入れた。
|
|
|
|
Name: へろり ..熟練のプログラマー(42,317ポイント)
Date: 2010/09/29(水) 07:59
No:62442
|
|
Title: Re:ショートカットファイル作成
|
|
実はショートカットをを扱うためのCOMコンポーネントが用意されています。
IShellLink あたりで検索すると幸せになれるかもしれません。
51ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(62,512ポイント)
Date: 2010/09/29(水) 08:29
No:62443
|
|
Title: Re:ショートカットファイル作成
|
|
ショートカットというのはWindowsですよね
C++で電卓のショートカットを作ってみました
#define _CRT_SECURE_NO_WARNINGS
#include <shlobj.h>
int main(void)
{
LPCTSTR programPath = TEXT("%SystemRoot%\\system32\\calc.exe"); // 電卓のパス
wchar_t linkPath[MAX_PATH]; // ショートカット名はユニコード限定
// デスクトップフォルダ取得(デスクトップかスタートメニューにしか作れない)
LPITEMIDLIST pidl;
SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOPDIRECTORY, &pidl);
SHGetPathFromIDListW(pidl, linkPath);
wcscat(linkPath, L"\\calc.lnk");
IShellLink* sl;
IPersistFile* pf;
CoInitialize(NULL); // COMライブラリを初期化
if (CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&sl) == S_OK)
{
if (sl->QueryInterface(IID_IPersistFile,(void **)&pf) == S_OK)
{
sl->SetPath(programPath); // プログラムパス
sl->SetDescription(NULL); // 説明(= ツールチップス)
sl->SetArguments(NULL); // コマンドライン引数
sl->SetWorkingDirectory(NULL); // 作業ディレクトリ
sl->SetIconLocation(NULL, 0); // Iconのパスまたはインデックス
sl->SetShowCmd(SW_SHOWNORMAL); // 起動時のウィンドウ表示
pf->Save(linkPath, TRUE); // ショートカットを保存
pf->Release(); // IPersistFileへのポインタを破棄
pf = NULL;
}
sl->Release(); // IShellLinkへのポインタを破棄
sl = NULL;
}
CoUninitialize (); // COMライブラリをクローズ
return 0;
}
688ポイント を手に入れた。
|
|
|
|
Name: dic ..ハッカー(101,927ポイント)
Date: 2010/09/28(火) 20:26
No:62427
|
|
Title: C言語でcgiを作る(?)
|
|
C言語でcg@を作成(?)したいので下のサイトのとおり
コンパイルして出来上がったexeファイルをcgiに名前を変更してホームページにアップロードし
パーミッションも設定したのですがうまくいきません
先頭に
#!/usr/bin/perl
を入れれば動くとあるのですが
exeファイルの内容は先頭は
MZなので
#!/usr/bin/perl
MZ....
とファイルの内容がなってしまいます
これで合っているのでしょうか?
http://www.kumei.ne.jp/c_lang/intro/no_80.htm
2倍のポイントを手に入れた! 304ポイント を手に入れた。
|
|
|
|
Name: toyo ..熟練のプログラマー(61,738ポイント)
Date: 2010/09/28(火) 20:33
No:62428
|
|
Title: Re:C言語でcgiを作る(?)
|
|
CでCGIプログラムを作る場合には動作させるサーバ環境が重要になります
本来なら動作サーバ上でコンパイルするのが望ましいですがローカルで似た環境を作ってもいいでしょう
大事なのは動作サーバのCPUとOSにあわせてコンパイルすることです
Linux用のプログラムをWindowsのVisualC++でコンパイルしても動きません
133ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(223,470ポイント)
Date: 2010/09/28(火) 20:36
No:62430
|
|
Title: Re:C言語でcgiを作る(?)
|
|
レンタルサーバーでC言語を許可しているサーバーは少ない気がしますが、そこは確認されたのでしょうか?
それと当然ローカルサーバで動作確認されたんですよね?(CGIでのトラブルを考えると最低限のマナーだと思いますが)
104ポイント を手に入れた。
|
|
|
|
|
Name: dic ..ハッカー(102,108ポイント)
Date: 2010/09/28(火) 20:49
No:62431
| 解決!
|
Title: Re:C言語でcgiを作る(?)
|
|
>>toyoさん
>Linux用のプログラムをWindowsのVisualC++でコンパイルしても動きません
なるほど、そういうことですね
>>softyaさん
やはり、レンタルサーバ次第ということですね
>>ローカルサーバで動作確認
いや、やってないです(汗
すいません
おおよそ構造が分かりました 解決とさせてもらいます
91ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(61,824ポイント)
Date: 2010/09/28(火) 20:51
No:62433
|
|
Title: Re:C言語でcgiを作る(?)
|
|
自分のパソコンにApacheをインストールすればパソコン上で動作確認できます
これもCGI動作させるまでの設定が大変かもしれません
画像は自分のパソコンで実行させたものです
#!/usr/bin/perl
というのはC言語ではなくPerlでCGIを動作させるためのものなのでCで作る場合は関係ないです
86ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,280,894ポイント)
Date: 2010/09/28(火) 22:18
No:62437
|
|
Title: Re:C言語でcgiを作る(?)
|
|
1000万アクセス感謝祭で使ったこのお宝キーワードを表示するCGIですが、実はC言語で書いています。
http://dixq.net/cgi-bin/test.cgi
私は触り程度しかCGIを知らないので大したことは言えませんが、まずはCGIでhello wordでしょうか。
いちいちアップロードして動作確認するには面倒なので、apacheインストールする事お勧めします。
被りますが、一度コンパイルしてからではないと動かないC言語の実行ファイルは
その環境に合わせて作らなくてはなりません。
うちで使っているさくらのレンタルサーバーでは、シェルコマンドが利用できるようになっていました。
ですから、ソースコードをアップロードした後、レンタルサーバー上で
% gcc -o test test.cpp
みたいなことが出来ます。
まずお使いのレンタルサーバーで出来る事を確認してみてはいかがでしょう。
385ポイント を手に入れた。
|
|
|
|
Name: 山口 ..初心者(5,326ポイント)
Date: 2010/09/21(火) 20:01
No:62201
|
|
Title: ポケモンの固体値を判別するアプリ
|
|
ポケモンの固体値を判別するアプリ
ポケモンの固体値を求める自分用アプリを作っております。
それ専用の関数を作ってみたのですが上手い値が帰ってきてくれません。
// int tribe 種族値 , int status 能力値 , int fight 努力値, int lv レベル, int heart 性格, int mode 何の能力か(攻撃など)
// 戻り値は固体値です。
int PokeValue( int tribe, int status, int fight, int lv, int heart, int mode )
サイトが重いので何回かF5を押さないとだめだと思います。
固体値とは
http://yakkun.com/dp/system.htm
能力値={(種族値×2+個体値+努力値÷4)×レベル÷100+5}×性格補正
で出る値のことです。
この式の結果は0〜32になります。
作りたいもの
http://yakkun.com/dp/ic.htm
分かりにくくて申し訳ないのですが
どこが悪いかわかる方おりませんでしょうか?
int PokeValue( int tribe, int status, int fight, int lv, int heart, int mode ){
float bairitu = 1.0f;
switch(heart){
case H_SAMISHIGARI:
if( mode == M_ATK ) bairitu = 1.1f;
if( mode == M_DEF ) bairitu = 0.9f;
break;
case H_IJIPPARI:
if( mode == M_ATK ) bairitu = 1.1f;
if( mode == M_SPATK ) bairitu = 0.9f;
break;
case H_YANCHA:
if( mode == M_ATK ) bairitu = 1.1f;
if( mode == M_SPDEF ) bairitu = 0.9f;
break;
case H_YUUKAN:
if( mode == M_ATK ) bairitu = 1.1f;
if( mode == M_SPD ) bairitu = 0.9f;
break;
case H_ZUBUTOI:
if( mode == M_DEF ) bairitu = 1.1f;
if( mode == M_ATK ) bairitu = 0.9f;
break;
case H_WANPAKU:
if( mode == M_DEF ) bairitu = 1.1f;
if( mode == M_SPATK ) bairitu = 0.9f;
break;
case H_NOUTENKI:
if( mode == M_DEF ) bairitu = 1.1f;
if( mode == M_SPDEF ) bairitu = 0.9f;
break;
case H_NONKI:
if( mode == M_DEF ) bairitu = 1.1f;
if( mode == M_SPD ) bairitu = 0.9f;
break;
case H_HIKAEME:
if( mode == M_SPATK ) bairitu = 1.1f;
if( mode == M_ATK ) bairitu = 0.9f;
break;
case H_OTTORI:
if( mode == M_SPATK ) bairitu = 1.1f;
if( mode == M_DEF ) bairitu = 0.9f;
break;
case H_UKKARIYA:
if( mode == M_SPATK ) bairitu = 1.1f;
if( mode == M_SPDEF ) bairitu = 0.9f;
break;
case H_REISEI:
if( mode == M_SPATK ) bairitu = 1.1f;
if( mode == M_SPD ) bairitu = 0.9f;
break;
case H_ODAYAKA:
if( mode == M_SPDEF ) bairitu = 1.1f;
if( mode == M_ATK ) bairitu = 0.9f;
break;
case H_OTONASHII:
if( mode == M_SPDEF ) bairitu = 1.1f;
if( mode == M_DEF ) bairitu = 0.9f;
break;
case H_SINCHOU:
if( mode == M_SPDEF ) bairitu = 1.1f;
if( mode == M_SPATK ) bairitu = 0.9f;
break;
case H_NAMAIKI:
if( mode == M_SPDEF ) bairitu = 1.1f;
if( mode == M_SPD ) bairitu = 0.9f;
break;
case H_OKUBYOU:
if( mode == M_SPD ) bairitu = 1.1f;
if( mode == M_ATK ) bairitu = 0.9f;
break;
case H_SEKKATI:
if( mode == M_SPD ) bairitu = 1.1f;
if( mode == M_DEF ) bairitu = 0.9f;
break;
case H_YOUKI:
if( mode == M_SPD ) bairitu = 1.1f;
if( mode == M_SPATK ) bairitu = 0.9f;
break;
case H_MUJYAKI:
if( mode == M_SPD ) bairitu = 1.1f;
if( mode == M_SPDEF ) bairitu = 0.9f;
break;
// 変化なし
case H_TEREYA:
case H_GANBARIYA:
case H_SUNAO:
case H_KIMAGURE:
case H_MAJIME:
break;
}
//(能力値−5)×100÷Lv.−2種族値−1/4努力値
//int val = status - int( int( int( int( tribe*2 + int(fight/4) ) * lv / 100 ) + 5 ) * bairitu );
int val = int(int( (status-5)*100/lv ) - (2*tribe) - int(fight/4) * bairitu);
//int val = int( int( ( status*2 + int(fight/4) ) * lv / 100 + 5 ) * bairitu) -
return val;
}
1,688ポイント を手に入れた。
|
|
|
|
Name: ぽこ ..プログラマー(31,149ポイント)
Date: 2010/09/21(火) 23:31
No:62206
|
|
Title: Re:ポケモンの固体値を判別するアプリ
|
|
上手くいかないと判断した際の、
・関数の引数の値
・その時の戻り値
・期待する戻り値
を教えてください。
33ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..熟練のプログラマー(53,088ポイント)
Date: 2010/09/21(火) 23:32
No:62207
|
|
Title: Re:ポケモンの固体値を判別するアプリ
|
|
ポケモンは苦手ですが、
気になったのは、
int val = int(int( (status-5)*100/lv ) - (2*tribe) - int(fight/4) * bairitu);
の部分で、
それぞれの(int割るint)でいちいち小数点以下が切り捨てられますが、そこは意図どおりですか?
69ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(61,453ポイント)
Date: 2010/09/22(水) 08:29
No:62212
|
|
Title: Re:ポケモンの固体値を判別するアプリ
|
|
能力値={(種族値×2+個体値+努力値÷4)×レベル÷100+5}×性格補正
能力値 / 性格補正 =(種族値×2+個体値+努力値÷4)×レベル÷100+5
(能力値 / 性格補正) - 5 =(種族値×2+個体値+努力値÷4)×レベル÷100
((能力値 / 性格補正) - 5) * 100 =(種族値×2+個体値+努力値÷4)×レベル
(((能力値 / 性格補正) - 5) * 100) / レベル =種族値×2+個体値+努力値÷4
(((能力値 / 性格補正) - 5) * 100) / レベル - 種族値 * 2 - 努力値 / 4 = 個体値
bairituが性格補正のことなら式が間違っていますよ
234ポイント を手に入れた。
|
|
|
|
|
Name: 山口 ..初心者(5,400ポイント)
Date: 2010/09/28(火) 22:13
No:62435
| 解決!
|
Title: Re:ポケモンの固体値を判別するアプリ
|
|
折角、ご回答を頂けたのにお礼が遅くなってしまい申し訳ございませんでした。
一度締めさせていただきます。
2倍のポイントを手に入れた! 74ポイント を手に入れた。
|
|
|
|
Name: グラマー ..ぴよぴよ(65ポイント)
Date: 2010/09/28(火) 10:03
No:62412
|
|
Title: エラーの対処について
|
|
fatal error C1900: 'P1' Version '20080116' と 'P2' Version '20070207' が一致しません。
というエラーの対処法がわからなくて止まっています。
ネットで調べてもよくわからず、ここに投稿しました。
お願いします。
65ポイント を手に入れた。
|
|
|
|
Name: さかまき ..かけだし(1,665ポイント)
Date: 2010/09/28(火) 10:13
No:62413
|
|
Title: Re:エラーの対処について
|
|
メッセージをそのままキーにしてNETで検索するといろいろ出てきますが
それ見てもわかりませんか?
36ポイント を手に入れた。
|
|
|
|
|
Name: グラマー ..ぴよぴよ(410ポイント)
Date: 2010/09/28(火) 12:39
No:62414
|
|
Title: Re:エラーの対処について
|
|
VC2008SPを入れてみたらなくなったんですが引き換えに
main.obj : error LNK2019: 未解決の外部シンボル "public: void __thiscall GameLib::Framework::sleep(int)const " (?sleep@Framework@GameLib@@QBEXH@Z) が関数 "void __cdecl mainLoop(void)" (?mainLoop@@YAXXZ) で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル "public: bool __thiscall GameLib::Framework::isKeyOn(int)const " (?isKeyOn@Framework@GameLib@@QBE_NH@Z) が関数 "void __cdecl mainLoop(void)" (?mainLoop@@YAXXZ) で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル "public: int __thiscall GameLib::Framework::frameRate(void)const " (?frameRate@Framework@GameLib@@QBEHXZ) が関数 "void __cdecl mainLoop(void)" (?mainLoop@@YAXXZ) で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル "public: void __thiscall GameLib::Framework::setFrameRate(int)" (?setFrameRate@Framework@GameLib@@QAEXH@Z) が関数 "void __cdecl mainLoop(void)" (?mainLoop@@YAXXZ) で参照されました。
というのが出ました。
調べたところヘッダーがうまくできてないなどとありましたがいじってもうまくいきません。
よければアドバイスをください。
345ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(61,589ポイント)
Date: 2010/09/28(火) 13:02
No:62416
|
|
Title: Re:エラーの対処について
|
|
GameLibとやらのライブラリをリンクしないといけないようです
検索してみたんですが「ゲームプログラマになる前に覚えておきたい技術」という本に付属のやつでしょうか?
それなら本に解説がありそうですが
92ポイント を手に入れた。
|
|
|
|
|
Name: グラマー ..ぴよぴよ(651ポイント)
Date: 2010/09/28(火) 15:46
No:62418
|
|
Title: Re:エラーの対処について
|
|
すみません。
プログラミングはJavaはかなりできるんですが、C++はローベルの本を
やったぐらいで初心者からぬけられないぐらいのレベルです。
「ゲームプログラマになる前に」です。全て本の付属のプログラムやライブラリでです。
本に書いてあるとおりに
ライブラリの追加はリンカ→ライブラリの追加で二つライブラリがフォルダに入っていたので
GameLib.lib GameLib_d.libの二つを入れました。
あとツール→オプション→VC++のところから実行可能からライブラリにかえてライブラリの入っている
フォルダまでのパスをうちました。
ほかにやらなければないらないことがあるならご指摘お願いします。
241ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(61,599ポイント)
Date: 2010/09/28(火) 16:06
No:62419
|
|
Title: Re:エラーの対処について
|
|
ライブラリの追加は「追加の依存ファイル」ですよね
DebugにGameLib_d.lib
ReleaseにGameLib.lib
を追加すればいいはずです
10ポイント を手に入れた。
|
|
|
|
|
Name: グラマー ..ぴよぴよ(734ポイント)
Date: 2010/09/28(火) 17:09
No:62421
| 解決!
|
Title: Re:エラーの対処について
|
|
GameLib_d.libのdはDebugのDだったんですね。
ありがとうございます。
ライブラリファイルのパスを1つにしたら正常に動きました。
ライブラリファイルまでのパスが1つ以上あったことが原因でした。
ご指摘ありがとうございました。
本当に助かりました。
83ポイント を手に入れた。
|
|
|
|
|
Name: DVDM [URL] ..熟練のプログラマー(60,998ポイント)
Date: 2010/09/27(月) 05:16
No:62380
|
|
Title: Re:ファイル分割について
|
|
>>polpolさん
> コードを分割して別ファイルに記述したいのですがうまくいきません
何がどううまくいかないのでしょうか。
リンク先のプロジェクトをダウンロードして実行してみましたが
画像も表示されますし、キー入力で画像も動きました。
128ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..初心者(5,865ポイント)
Date: 2010/09/27(月) 05:21
No:62381
|
|
Title: Re:ファイル分割について
|
|
>>DVDMさん
マニュアルどうりに書いてるので上に緑の敵が表示されるはず
なんですが表示されません
14ポイント を手に入れた。
|
|
|
|
|
Name: DVDM [URL] ..熟練のプログラマー(61,149ポイント)
Date: 2010/09/27(月) 05:30
No:62382
|
|
Title: Re:ファイル分割について
|
|
>>polpolさん
四角君の移動ルーチンが別ファイルに分かれているようですが、
肝心の sikaku 関数が呼ばれていないのが原因ではないでしょうか。
sikaku 関数の定義が、WinMain 関数内で行われているのが気になります。
void sikaku(int SikakuMuki,int SikakuX,int SikakuY,int SikakuGraph);
int WINAPI WinMain(〜〜)
{
}
としておいた方がいいと思います。
151ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..初心者(5,977ポイント)
Date: 2010/09/27(月) 05:40
No:62383
|
|
Title: Re:ファイル分割について
|
|
>>DVDMさん
void sikaku(int SikakuMuki,int SikakuX,int SikakuY,int SikakuGraph);
int WINAPI WinMain(〜〜)
{
void sikaku(int SikakuMuki,int SikakuX,int SikakuY,int SikakuGraph);
}
と書きましたがやはり表示されませんでした。。
112ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..初心者(6,059ポイント)
Date: 2010/09/27(月) 23:55
No:62406
|
|
Title: Re:ファイル分割について
|
|
>WinMain 関数に、sikaku(第一引数, 第二引数, 第三引数, 第四引数);
と書けば、
sikaku(SikakuMuki,SikakuX,SikakuY,SikakuGraph);と書けば
画像は表示されるようになったのですが
その場で止まったまま動きません。
なぜでしょう・・・
82ポイント を手に入れた。
|
|
|
|
|
Name: DVDM [URL] ..熟練のプログラマー(61,156ポイント)
Date: 2010/09/28(火) 01:54
No:62408
|
|
Title: Re:ファイル分割について
|
|
>>polpolさん
DrawGraph は指定した(X, Y)座標に何かの画像を表示するための関数です。
なので、sikaku 関数内の DrawGraph に与えている引数(SiX, SiY)で
polpolさんは描画している事になります。
WinMain 関数内で、sikaku(SikakuMuki, SikakuX, SikakuY, SikakuGraph);
と書けば、SikakuX, SikakuY の値を使って描画する事になりますが、
SikakuX, SikakuY の値が変わっていないので
ひたすらその場所に描画しているため動かないのだと思われます。
解決方法として、現在グローバル変数である、SikakuX, SikakuY を
直接 sikaku 関数内で変更するか、ポインタを使用するかの方法になってくると思います。
私もC言語の基礎が出来ていない様に見受けられました。
個人的にお勧めのサイトを紹介しておきますので、基礎を積み上げた方が宜しいと思います。
URL:http://9cguide.appspot.com/
URL:http://www.geocities.jp/ky_webid/c/index.html
229ポイント を落としてしまった。
|
|
|
|
|
Name: polpol ..初心者(6,190ポイント)
Date: 2010/09/28(火) 04:10
No:62409
|
|
Title: Re:ファイル分割について
|
|
>>DVDMさん
DVDMさんの言うとうり、sikaku 関数内のint SiX,int SiYを
グローバル変数である、SikakuX, SikakuYに変更すれば動きました。
ありがとうございます。助かりました。
詳しいサイトのリンクまで貼っていただき感謝します
C言語はゲームを作る為に最近覚え始たので
確かに知識があやふやなまま手をつけてしまいました
一度本を買って勉強しなおします^^;
131ポイント を手に入れた。
|
|
|
|
Name: shiro4ao ..中級者(13,278ポイント)
Date: 2010/09/27(月) 22:48
No:62398
|
|
Title: int型の配列内の要素を数える
|
|
0〜9の値の入ってるint型配列内の数字を数えたいと思います。
例)
13575844
と配列にあれば
1が1個
3が1個
5が2個
7が1個
8が1個
4が2個
ということを知りたいです。
以下のように実装したのですが、1個あるはずなのに
ret=0
と出力されてしまいました。
配列にはちゃんと値が入ってるようで、なおかつGetNum関数にArr
は渡っているようでした。
どこがおかしかったのでしょう。
(これは余談ですが、GetNumという名前はいかがなものでしょうか
なにかいい名前(?)があれば幸いです。)
=============================================================
#include <stdio.h>
int GetNum(int Arr[],int num)
{
int i,ret=0;
for(i=0;i<num;i++){
if(Arr[i]==num) ret++;
}
return ret;
}
int main(void)
{
int i,Arr[5];
for(i=0;i<4;i++){
Arr[i]=i;
}
printf("ret=%d\n",GetNum(Arr,3));
}
=============================================================
310ポイント を手に入れた。
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(83,144ポイント)
Date: 2010/09/27(月) 22:59
No:62400
|
|
Title: Re:int型の配列内の要素を数える
|
|
3の数字が入ってるのはArr[3]に入っています。
でもGetNum関数のfor文では0番から2番までの要素しかみれてないからだと思います。
なので、
for(i=0;i<=num;i++){
if(Arr[i]==num) ret++;
}
とすれば動くんじゃないかと思います。
名前はGetNumCountとかでいいんじゃないでしょうか。いや、センスないですね。すいません。
59ポイント を手に入れた。
|
|
|
|
|
Name: ぽこ ..プログラマー(31,282ポイント)
Date: 2010/09/27(月) 23:01
No:62401
|
|
Title: Re:int型の配列内の要素を数える
|
|
main()内でArrの初期化をして、
Arr[0]=0
Arr[1]=1
Arr[2]=2
Arr[3]=3
Arr[4]=不定
となって、GetNum(Arr,3)を呼び出しています。
GetNum(int Arr[],int num)の実装を見るに、
配列Arrのインデックスnum-1までしか探索してないので、
GetNum(Arr,3)ではArr[2]までしか探索しません。
Arr[0]からArr[2]までに3は存在しないので、当然戻り値は0になります。
133ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(157,330ポイント)
Date: 2010/09/27(月) 23:01
No:62402
|
|
Title: Re:int型の配列内の要素を数える
|
|
GetNum関数の第2引数の意味を日本語で書いてみてください。
2倍のポイントを手に入れた! 48ポイント を手に入れた。
|
|
|
|
|
Name: yoko ..初心者(8,015ポイント)
Date: 2010/09/27(月) 23:05
No:62403
|
|
Title: Re:int型の配列内の要素を数える
|
|
int GetNum(int Arr[],int num)
{
int i,ret=0;
for(i=0;i<num;i++){
if(Arr[i]==num) ret++;
}
return ret;
}
この関数ですが、for文のところは
i<numではなくi<4ori<=numでないと
numの値にiがなる前にfor文が終了するので
if文は無意味となります。
改善案
#defineを使用して数字を統一すると見やすくなります。
プログラム
#include <stdio.h>
#define N 5
int GetNum(int Arr[],int num)
{
int i,ret=0;
for(i=0;i<N;i++){
if(Arr[i]==num) ret++;
}
return ret;
}
int main(void)
{
int i,Arr[N];
for(i=0;i<N;i++){
Arr[i]=i;
}
printf("ret=%d\n",GetNum(Arr,3));
}
378ポイント を手に入れた。
|
|
|
|
|
Name: あたっしゅ [URL] ..かけだし(1,948ポイント)
Date: 2010/09/27(月) 23:07
No:62404
|
|
Title: Re:int型の配列内の要素を数える
|
|
関数名は、count (数える)というのはどうだろう。
コンパイラは通していないが
const int MAX=10;
int res[ MAX ] = { 0,0,0,0,0, 0,0,0,0,0 };
void count( int arr[], int num ) {
int i;
for( i=0; i<num; i++ ) {
res[ arr[ i ] ]++;
}
}
とか、やらなきゃ、だめだろ。
158ポイント を手に入れた。
|
|
|
|
|
Name: shiro4ao ..中級者(13,347ポイント)
Date: 2010/09/27(月) 23:07
No:62405
| 解決!
|
Title: Re:int型の配列内の要素を数える
|
|
シエルさん
ぽこさん
boxさん
yokoさん
あたっしゅさん
ありがとうございます!!
配列サイズを第三引数に渡してあげたら正常に動作しました。
もっと良く考えてから投稿するべきでした・・・・!
すみません。

69ポイント を手に入れた。
|
|
|
|
Name: アナベベ ..ぴよぴよ(208ポイント)
Date: 2010/09/26(日) 18:03
No:62358
|
|
Title: 3Dのデータについて
|
|
3Dオブジェクトデータについてお聞きします。
3Dオブジェクト(3Dモデル)のデータ形式には、
標準・規格化されたデータ形式があるのでしょうか?
もしあるのなら、広く使われている有名なデータ形式を
3つほど紹介してもらえるとうれしいのですが・・・
次に、
現在のAdobe Flashではどのような3Dデータ形式が使えるのでしょうか?
Flash対応の3Dデータは、java、OpenGL、DirectX、HSPなどにおいて、
そのまま使いまわしができるのでしょうか?
答えられる範囲でかまいませんので、よろしくおねがいします。
208ポイント を手に入れた。
|
|
|
|
Name: あたっしゅ [URL] ..かけだし(1,790ポイント)
Date: 2010/09/27(月) 22:51
No:62399
|
|
Title: Re:3Dのデータについて
|
|
誰も答えていないので
>3Dオブジェクト(3Dモデル)のデータ形式には、
>標準・規格化されたデータ形式があるのでしょうか?
事実上の標準ならある。
>もしあるのなら、広く使われている有名なデータ形式を
>3つほど紹介してもらえるとうれしいのですが・・・
.dxf UV マッピング不可。 http://ja.wikipedia.org/wiki/DXF
.x Microsoft DirectX
>次に、 現在のAdobe Flashではどのような3Dデータ形式が使えるのでしょうか?
Flash の ActionScript の Papervison 3D なら Collada(.dae)。Google Sketch UP(.kmz) もサポート。
>Flash対応の3Dデータは、java、OpenGL、DirectX、HSPなどにおいて、
>そのまま使いまわしができるのでしょうか?
できない。
199ポイント を手に入れた。
|
|
|
|
Name: cosin ..ぴよぴよ(310ポイント)
Date: 2010/09/27(月) 21:35
No:62392
|
|
Title: 【STG】敵機消滅時に敵弾が同時消滅してしまう不具合について
|
|
ただいま「龍神録プログラミングの館」を参考に、初めてのプログラミング勉強として横スクロールシューティングをC/C++とDXライブラリ、開発環境はVisualStudio2008を用いて製作しております。ただいま製作しているプロジェクトに取り掛かり半月ほど経ちまして、自機/自機弾・敵機/敵弾の描画と自機弾/敵機の当たり判定まで差し掛かりました。
しかし、ここで不具合を見つけたのですが、その不具合が『敵機が画面外に出るか、もしくは撃破されると、その敵機が画面上で撃っていた敵弾まで一緒に消えてしまう』というものです。
龍神録を参考としたため、ソースコードのほとんどの基本構造は龍神録と同様のものになっており、異なる点は関数名と座標指定程度のもので、さほど大きな違いはありません。
最初は描画フラグ管理に間違いがあると思い見直したのですが、特に思い当たる箇所を見つけることが出来ず、同様に演算子や変数の確認も行いましたが、上手く解決することが出来ませんでした。
この問題で5日ほど悩みながら何度も見直しを行いましたが、原因箇所がどうやら自分一人では気づくことの出来ないところにあるようです。そこで皆様にお願いがあるのですが、もしよろしければお力添えをお願いできないでしょうか。
ソースコードは龍神録と同様の構造をとっており、一口にソースコードを記述することが難しいため、大変恐縮ですがアップローダーに上げたファイルとさせて頂きました。
※ソースコードファイルURL:
http://www1.axfc.net/uploader/Ne/so/91717.zip&key=cosin
大変お手数をお掛けしますが、何か気になる点やアドバイスなど頂けると大変嬉しいです。よろしくお願いいたします。 
310ポイント を手に入れた。
|
|
|
|
Name: fatens ..上級者(19,851ポイント)
Date: 2010/09/27(月) 22:19
No:62395
|
|
Title: Re:【STG】敵機消滅時に敵弾が同時消滅してしまう不具合について
|
|
敵機が消滅したとき、out.cppの172行目でeneshot[i].flag=2としていますが、
敵弾の描画条件がgraph.cppの39行目ではeneshot[i].flag==1になっています。
そのため、『敵機が画面外に出るか、もしくは撃破されると、その敵機が画面上で撃っていた敵弾まで一緒に消えてしまう』
という状態になっているのだと思います。
描画の条件をeneshot[i].flag>0に変更すると、正しく描画されているように見受けられます。
168ポイント を手に入れた。
|
|
|
|
|
Name: cosin ..ぴよぴよ(508ポイント)
Date: 2010/09/27(月) 22:43
No:62397
| 解決!
|
Title: Re:【STG】敵機消滅時に敵弾が同時消滅してしまう不具合について
|
|
ありがとうございます、ご指摘通りの箇所を確認修正し、無事に解決いたしました!
これほど早く、正確なご指摘を頂けて大変嬉しいです。
敵弾処理の関数に気を取られ、描画関数内の条件文のミスを見逃しておりました。
得手となるには原因を突き止める能力も必須ですね。
初心者と言えど、自分のソースコードの管理ぐらいは出来るようにならなければ。日々精進いたします。
お手数をお掛けいたしました。本当にありがとうございました。
198ポイント を手に入れた。
|
|
|
|
Name: COUTION ..ぴよぴよ(0ポイント)
Date: 2010/09/26(日) 23:59
No:62376
|
|
Title: UDPのネット通信
|
|
結構(?)前に質問させてもらったCOUTIONです
使用言語はVC++2010、DXライブラリです
UDP通信でなんとか4人までの座標の位置を表示させることはできたんですが、
接続するのに使用するポートを全員開放してないと通信プレイできません。
他のネット対戦できるゲームなどを見るとホスト(サーバー)だけポート開放すれば
ネット対戦できますよね?
どうしたら出来るんでしょうか?
それともUDPじゃ出来ないんでしょうか?
それともし好ければ通信プレイのよく使われるソースの書き方や仕組みなど教えてくださいw
一応ソースを載せておきます
アドバイスなどあればお願いします!
void NetSocketSend(){
// UDP通信用のソケットハンドルを作成
NetUDPHandle = MakeUDPSocket( 10800 ) ;
// IPアドレスを設定( ここにある4つのIP値は仮です )
Ip.d1 = 000 ;
Ip.d2 = 000 ;
Ip.d3 = 000 ;
Ip.d4 = 000 ;
}
void setuzokuOK(){
char setuzoku[]="000";
NetWorkSendUDP( NetUDPHandle, Ip, 10800, setuzoku , 4 ) ;
// 文字列の受信を待つ
while( CheckNetWorkRecvUDP( NetUDPHandle ) == FALSE )
{
// ウインドウズメッセージ処理
if( ProcessMessage() < 0 ){
mode=999 ;
break;
}
}
NetWorkRecvUDP( NetUDPHandle, NULL, NULL, StrBuf, 4, NULL ) ;
if(strncmp(StrBuf, "000", 3)==0){
Netmode+=10;
}else mode=999;
}
void NetSocketRecvHost(){
NetUDPHandle = MakeUDPSocket( 10800 ) ;
Netmode+=10;
}
void NetmodeSend(){
char chxp[]="9990000";
char chyp[]="9990000";
sprintf(chxp,"001%04d",ch.x);
sprintf(chyp,"002%04d",ch.y);
NetWorkSendUDP( NetUDPHandle, Ip, 10800, chxp , 8 ) ;
NetWorkSendUDP( NetUDPHandle, Ip, 10800, chyp , 8 ) ;
}
void NetmodeSendHost(){
char chxp[]="9990000";
char chyp[]="9990000";
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(Ipflag[i]==1){
if(i==j){
sprintf(chxp,"%d01%04d",i,ch.x);
sprintf(chyp,"%d02%04d",i,ch.y);
}else{
sprintf(chxp,"%d01%04d",i,chNetx[i]);
sprintf(chyp,"%d02%04d",i,chNety[i]);
}
NetWorkSendUDP( NetUDPHandle, IpS[j], 10800, chxp , 8 ) ;
NetWorkSendUDP( NetUDPHandle, IpS[j], 10800, chyp , 8 ) ;
}
}
}
}
void NetmodeRecvHost(){
char StrBuf2[ 256 ] ; // データバッファ
int i,j,k;
while(CheckNetWorkRecvUDP( NetUDPHandle ) == TRUE){
NetWorkRecvUDP( NetUDPHandle, &Ips, NULL, StrBuf, 8, NULL) ;
if(strncmp(StrBuf, "000", 3)==0){
for(i=0;i<3;i++){
if(Ipflag[i]==0){
NetWorkSendUDP( NetUDPHandle, Ips, 10800, "000" , 4 ) ;
Ipflag[i]=1;
IpS[i].d1 = Ips.d1 ;
IpS[i].d2 = Ips.d2 ;
IpS[i].d3 = Ips.d3 ;
IpS[i].d4 = Ips.d4 ;
i=3;
}
}
}
for(i=0;i<3;i++){
if(Ipflag[i]==1){
if(IpS[i].d1 == Ips.d1&&IpS[i].d2 == Ips.d2&&IpS[i].d3 == Ips.d3&&IpS[i].d4 == Ips.d4){
if(strncmp(StrBuf, "001", 3)==0){
k = strlen(StrBuf);
for(j=3;j<k;j++){
StrBuf2[j-3] = StrBuf[j];
}
StrBuf2[j]='\0';
chNetx[i] = atoi(StrBuf2);
}
if(strncmp(StrBuf, "002", 3)==0){
k = strlen(StrBuf);
for(j=3;j<k;j++){
StrBuf2[j-3] = StrBuf[j];
}
StrBuf2[j]='\0';
chNety[i] = atoi(StrBuf2);
}
}
}
}
}
}
void NetmodeRecv(){
char StrBuf2[ 256 ] ; // データバッファ
int i,j;
while(CheckNetWorkRecvUDP( NetUDPHandle ) == TRUE){
NetWorkRecvUDP( NetUDPHandle, NULL, NULL, StrBuf, 8, NULL) ;
if(strncmp(StrBuf, "001", 3)==0){
i = strlen(StrBuf);
for(j=3;j<i;j++){
StrBuf2[j-3] = StrBuf[j];
}
StrBuf2[j]='\0';
chNetx[0] = atoi(StrBuf2);
}
if(strncmp(StrBuf, "002", 3)==0){
i = strlen(StrBuf);
for(j=3;j<i;j++){
StrBuf2[j-3] = StrBuf[j];
}
StrBuf2[j]='\0';
chNety[0] = atoi(StrBuf2);
}
if(strncmp(StrBuf, "101", 3)==0){
i = strlen(StrBuf);
for(j=3;j<i;j++){
StrBuf2[j-3] = StrBuf[j];
}
StrBuf2[j]='\0';
chNetx[1] = atoi(StrBuf2);
}
if(strncmp(StrBuf, "102", 3)==0){
i = strlen(StrBuf);
for(j=3;j<i;j++){
StrBuf2[j-3] = StrBuf[j];
}
StrBuf2[j]='\0';
chNety[1] = atoi(StrBuf2);
}
if(strncmp(StrBuf, "201", 3)==0){
i = strlen(StrBuf);
for(j=3;j<i;j++){
StrBuf2[j-3] = StrBuf[j];
}
StrBuf2[j]='\0';
chNetx[2] = atoi(StrBuf2);
}
if(strncmp(StrBuf, "202", 3)==0){
i = strlen(StrBuf);
for(j=3;j<i;j++){
StrBuf2[j-3] = StrBuf[j];
}
StrBuf2[j]='\0';
chNety[2] = atoi(StrBuf2);
}
}
}
void NetmodeMain(){
if(Netmode==0){
NetSocketSend();
setuzokuOK();
}else if(Netmode==1){
NetSocketRecvHost();
}
if(Netmode==10){
NetmodeSend();
NetmodeRecv();
}else if(Netmode==11){
NetmodeSendHost();
NetmodeRecvHost();
}
}
1,588ポイント を落としてしまった。
|
|
|
|
Name: softya [URL] ..ハッカー(222,608ポイント)
Date: 2010/09/27(月) 15:16
No:62385
|
|
Title: Re:UDPのネット通信
|
|
UDPなままだと無理だと思います。
ただし、UPnPを使えばソフト的にポート開放できますのでUDPでもポート開放の手間は無くせます。
http://hp.vector.co.jp/authors/VA011804/upnp.htm
知ったかぶりで書いてますがUPnPを使ったことがないので、トラブルには答えられないかもしれません。
あるいは、UDPに比べてリアルタイム性に欠けますがTCPならサーバ/クライアント型にすれば大丈夫です。
問題点というか設計の注意としてクライアントはサーバーに問いかけてサーバーの返却値として情報を受け取る形になりますので、サーバーは問いかけのない限りクライアントに情報を送る方法がありません。
4人で遊ぶすれば1台をサーバーにしてポート開放します。残り三人は、そのサーバーに接続してクライアントして動作します。これでもアクションゲーム類でない限りはTCPでも速度的には問題ないはずです。
2倍のポイントを手に入れた! 506ポイント を手に入れた。
|
|
|
|
|
Name: COUTION ..ぴよぴよ(130ポイント)
Date: 2010/09/27(月) 15:47
No:62386
|
|
Title: Re:UDPのネット通信
|
|
なるほどsoftyaさんありがとうございます
UPnPなら簡単に開放できそうですね
でもオンラインゲームみたいに誰でも何もせず参加出来る感じにしたいのですが
もろアクションゲームな感じで結構速度は必要だと思ってます
ゲーム起動するだけで自動的に開放させるとか出来ないんでしょうか?
オンラインゲームのFPSなどもTCPでやってるんでしょうか?
130ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(222,940ポイント)
Date: 2010/09/27(月) 16:15
No:62387
|
|
Title: Re:UDPのネット通信
|
|
>でもオンラインゲームみたいに誰でも何もせず参加出来る感じにしたいのですが
>もろアクションゲームな感じで結構速度は必要だと思ってます
>ゲーム起動するだけで自動的に開放させるとか出来ないんでしょうか?
>オンラインゲームのFPSなどもTCPでやってるんでしょうか?
メーカーの作っているものは、まずマッチング・コネクション用のサーバーがあります。
こことの接続はサイト閲覧等同様にTCPで接続できますからポート開放も不要です。
ロビーとか対戦相手を探していますって状態ですね。
個人で作るとしたら、レンタルサーバを借りてPHPとかで作るしか無いでしょう。
接続シーケンス
・各個人のクライアントはマッチング・サーバーに接続して対戦相手が揃うのを待ちます。定期的にクライアントはマッチングサーバと通信が必要です。
・対戦相手が揃ったら、それぞれのクライアントの接続ポートを決めます。
・各クライアントには接続に使う使うポートの情報を渡します。
・各クライアントはUPnPでポートを開放して、UDP接続しているのを待ちます。
って感じでどうしょうか。
332ポイント を手に入れた。
|
|
|
|
|
Name: COUTION ..ぴよぴよ(332ポイント)
Date: 2010/09/27(月) 17:28
No:62388
|
|
Title: Re:UDPのネット通信
|
|
レンタルサーバーはちょっとお金がかかるので無理そうです
接続のシーケンスについてですが
すいません、ちょっと勘違いしてました
UPnPってのは各クライアント側が手動でやるのではなくて
各クライアント側がなにもせず自動で開放して通信プレイするってことですよね?
開放させるやり方が分からないので「NPnP C++」で検索してみたところ
ttp://loafer.jp/mixi/diary/class.xsp?2005-12-30-21-57
ttp://ohwhsmm7.blog28.fc2.com/blog-entry-15.html
などのサイトを見つけました
もちろんそのまま貼りつけただけじゃできずDXライブラリしか触れたことないので
よく書いてある意味もわかりません
このようなことをして開放するってことですか?
202ポイント を手に入れた。
|
|
|
|
|
Name: COUTION ..ぴよぴよ(526ポイント)
Date: 2010/09/27(月) 19:18
No:62390
|
|
Title: Re:UDPのネット通信
|
|
softyaさんいろいろ調べてくれてありがとうございます
自分でもいろいろ調べてみたんですが難しくてよく分からないです・・
英語も読めずで・・
とりあえずTCPでやってみようと思います!
2倍のポイントを手に入れた! 194ポイント を手に入れた。
|
|
|
|
|
Name: COUTION ..ぴよぴよ(584ポイント)
Date: 2010/09/27(月) 21:06
No:62391
|
|
Title: Re:UDPのネット通信
|
|
とりえずTCPでやってみたんですが、
結局お互いにポート開放してないとだめみたいです・・
DXライブラリだと無理なんでしょうか?
58ポイント を手に入れた。
|
|
|
|
|
Name: COUTION ..ぴよぴよ(677ポイント)
Date: 2010/09/27(月) 21:57
No:62394
|
|
Title: Re:UDPのネット通信
|
|
ありがとうございます
DXライブラリでクライアントはポート開放せず普通に接続できました
プログラムミスってました・・
やはり速度が多少遅くなったりしてますが、これで頑張ってみます!
93ポイント を手に入れた。
|
|
|
|
|
Name: Tororo ..中級者(10,972ポイント)
Date: 2010/09/26(日) 19:19
No:62363
|
|
Title: Re:無題
|
|
>>自分は使ってみたんですが、特に怪しい行動はしてませんでした。
そんな簡単に使って大丈夫ですか?
>>このソフトって、やばいソフトなんですか?
危ないかもしれませんけど、 ウイルスかもしれないソフトを試す勇気がありませんので分かりません^^;
検出されたのなら使わないほうがよいのでは?
136ポイント を手に入れた。
|
|
|
|
|
Name: naohiro19 ..かけだし(1,558ポイント)
Date: 2010/09/26(日) 19:33
No:62364
|
|
Title: Re:無題
|
|
>友達はウイルスが検出されたそうなんですが・・・
その友達のウィルス定義が古い可能性が高いので、
最新版にアップデートしていないのではと思います。
2倍のポイントを手に入れた! 126ポイント を手に入れた。
|
|
|
|
|
Name: dic ..ハッカー(101,623ポイント)
Date: 2010/09/26(日) 19:39
No:62365
|
|
Title: Re:無題
|
|
http://9cguide.appspot.com/p_9cide.html
にある一番下の使用しているライブラリの説明
※なお、SoftAD はユーザーに悪影響を与えるものではありませんが、
※組織ポリシーなどの理由で SoftAD を無効化して運用したい場合は、
※インストールフォルダに含まれる SoftAd.dll を削除してご利用ください。
とあります
SoftAD で調べたところソフト広告配信 SoftAd
http://www.tamasoft.co.jp/ad/index.html
とありますね
何が送信されるか分かったものではないですから使用を避けることをお勧めします
ウィルスではなくスパイウェアと私は思ってます
// --------追加-------------
きちんとしたC言語を学びたいのであれば、本を買ってわからなかったことをここで聞くのをお勧めします
無料での学習ソフトのようで、いちゃもんのような文法攻めとか、むちゃくちゃな場合もいなめません
一般企業では、きちんとした学習ソフトが配備されているそうなので(聞いた話)
信頼のおける企業から学習ソフトを購入するのがいいと思います
古い考えかもしれませんが、私は上のことをお勧めします 
189ポイント を手に入れた。
|
|
|
|
|
Name: GEN ..ぴよぴよ(304ポイント)
Date: 2010/09/27(月) 00:04
No:62377
| 解決!
|
Title: どうもです、
|
|
いや〜、皆さんのおかげで決断できました。
visualstudioなどは高いし毎年リリースされてどれを使えば・・・な状態になってたんですが、
とりあえずvisual系でいくことにします。
あと、dic ..ハッカーさん
僕が見てない部分までわざわざ見てくださり、ありがと、、
/ ヽ \ \
,' / / l \ ヽ
! / / / ,' | l ハ ヘ、ヽ、_,
. | ! l l / / ,イ ! i ! l ヽ ',` ̄
. l | l l ,/ 〃 ,/ /│ l j l│ ! l
ノ | ! │ | /_// // / ,' ∧ / | / j l│
ノ l ァ| |尢/‐=乞t/ / /∠ニ「厂! / ,/ / リ
イ 八{´l !レ<f{矛:下 ' イ孑テフ イ } / /
. Vハ | r';;z j r';;zリ /}, '//
ヽ ', |  ̄ ,  ̄ チ' /
`ヘ lヽ _ 厶 ./
', {.代ト、 , イ | /
\_'i| > 、 _ , イ/ V l./
/ ヽj {`ヽ ′
. _ / 「´ ヽ} \
_, -‐ ´ l‐--‐、 _ -‐ | ` ー- 、
. r<\\ ヽ '´ ̄ ___ `ヽl| / /ヽ
y⌒ヽ \\ V  ̄ _ `ヽl| / / ∧
./ ヽ. \\ ∨ ̄ `ヽ | / / / l
{ ヽ \\ ヽ / / / / │
171ポイント を手に入れた。
|
|
|
|
Name: blue ..初心者(7,446ポイント)
Date: 2010/09/26(日) 22:17
No:62369
|
|
Title: intと*
|
|
問題
1を入力すると「Jan」、2を入力すると「Fed」というように、そのつきの名前を返すプログラムを文字列の配列を利用して作ってください。
答えのソース↓(//~〜の部分は今回わからないところ)
/* program82.c */
#include <stdio.h>
char *mon(int); //*mon(int *)じゃだめなのか、なぜ(int)なの?
int main()
{
int n;
while (1) {
printf("1-12の数字(0で終了)--- ");
scanf("%d", &n);
if (n == 0)
break;
printf("%s\n", mon(n - 1));
}
return 0;
}
char *mon(int n) //なぜ*をつけるの?
{
char *month[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"};
return month[n];
}
238ポイント を手に入れた。
|
|
|
|
Name: やっくん ..プログラマー(36,147ポイント)
Date: 2010/09/26(日) 23:36
No:62375
|
|
Title: Re:intと*
|
|
どの程度理解されているかわかりませんので回答し辛いですが・・・。
mon関数で何をしているか、というのを理解できれば分るかと思います。
mon関数では、1引数で"整数型"の値を受け取りそれに対応した月を"文字列"で返しています。
int*でないのは、関数にポインタで渡す必要が無いからです。
関数で値を書き換えたいわけでもないし、配列を渡したいわけでもないので。
mon関数の戻り値をchar*とするのは関数の目的である文字列を返すからです。
213ポイント を手に入れた。
|
|
|
|
Name: black_cat ..ぴよぴよ(220ポイント)
Date: 2010/09/26(日) 10:57
No:62339
|
|
Title: C# Box2Dについて
|
|
Yahoo!の知恵袋などで質問したのですが、回答がなくて困っているときに
この掲示板をみつけたので質問させて頂きます。
最近C#でBox2Dを始めたのですが、どうやったらマウスジョイントを使えるのかがわかりません。
同じような投稿があったのは見たのですが、私はまだまだ勉強不足で理解できませんでした。
ttp://dokokano.net/~fslasht/warehouse/programs/testBox2d_20090318.zip
のサンプルでいろいろ試してみたのですが、まったくうまくいきません。
まだまだC#初心者の状態で、Box2Dを扱うのは難しいのでは?と思われるかもしれませんが、
教えていただけるととてもうれしいです。
開発環境は[Visual C# 2010]です。
無理を言って悪いのですが、よろしくお願いします。
220ポイント を手に入れた。
|
|
|
|
Name: Tororo ..中級者(10,815ポイント)
Date: 2010/09/26(日) 11:35
No:62341
|
|
Title: Re:C# Box2Dについて
|
|
>>住所特定反対さん
C言語以外でもOKだったはずですよ。
>>black_catさん
マルチポストはだめですよ。
規約を読まれてみてはいかがですか?
73ポイント を落としてしまった。
|
|
|
|
|
Name: softya [URL] ..ハッカー(221,994ポイント)
Date: 2010/09/26(日) 12:29
No:62345
|
|
Title: Re:C# Box2Dについて
|
|
他のところに質問で回答がないなら削除して構いません。
回答者がいる場合は、削除など回答者に失礼な行為は避けてください。
本来は、規約と注意事項にある通り相互リンクが望ましいです。
検索見てみたところ私の把握できる範囲では、okwave系と知恵袋に投稿されている様ですね。
あと、Box2D自体が珍しい話題なので回答できる人は限られると思います。
56ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..ぴよぴよ(269ポイント)
Date: 2010/09/26(日) 19:08
No:62361
|
|
Title: Re:C# Box2Dについて
|
|
取り消しました。
お騒がせしてすいませんでした。
これでもうここで回答をお願いしてもいいのですよね?
32ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(577,946ポイント)
Date: 2010/09/26(日) 20:09
No:62366
|
|
Title: Re:C# Box2Dについて
|
|
C#版は使ったことがないですが他言語版と同じであると仮定するなら、一般的な使い方を端的に纏めると
・ マウスダウン時に WorldのQueryメソッドでクリック地点周辺のオブジェクトを探します。
・ 見つかったら MouseJointDefにデータを設定し、Worldの CreateJointメソッドで MouseJointを
生成します(この MouseJointは保持しておく)。
ここで同時に複数見つかるケースもあるのでその場合はその数の分だけ生成して下さい。
MouseJointDefの設定値は Body1に GroundBodyを、Body2は対象のオブジェクト Bodyを、
Targetに位置を、MaxForceに引っ張る力の大きさを与えます。
・ マウスが動いたら、先に生成したMouseJointに対して SetTargetでマウス位置を更新します。
・ マウスアップ時にWorldのDestroyJointを呼んで MouseJointを破棄します。
と、こんな感じのながれです。
312ポイント を落としてしまった。
|
|
|
|
|
Name: black_cat ..ぴよぴよ(401ポイント)
Date: 2010/09/26(日) 21:55
No:62368
|
|
Title: Re:C# Box2Dについて
|
|
回答ありがとうございます。
すいません。そこまでは検索で出てきたFlashのソースや説明を見ているとなんとなく分かったのですが、
そこから先をC#でどうすればいいのかがまったく分かりません。
C#版を使われたことがないのですね。では「こうすれば動くのでは?」というような
簡単なアドバイス的なものをもらえると、とてもうれしいです。
132ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(581,114ポイント)
Date: 2010/09/26(日) 22:37
No:62370
|
|
Title: Re:C# Box2Dについて
|
|
んー、そうですね。先の "testBox2d_20090318.zip"サンプルで、マウスの真ん中のボタンで
ドラッグできるようにするなら……。
メンバ変数として
MouseJoint m_mouseJoint;
を追加しておきます。
pictDraw_MouseDownの下の方に
// マウスホイールダウン
if(e.Button == MouseButtons.Middle && m_mouseJoint == null)
{
// マウスダウン地点情報
AABB aabb;
Vec2 range = new Vec2(0.5f, 0.5f);
aabb.LowerBound = vClick - range;
aabb.UpperBound = vClick + range;
// マウスダウン地点にオブジェクトがあるか調べる
Shape[] s = new Shape[1];
if(m_world.Query(aabb, s, 1) > 0 && s[0] != null)
{
// マウスジョイント生成
MouseJointDef mjd = new MouseJointDef();
mjd.Body1 = m_world.GetGroundBody();
mjd.Body2 = s[0].GetBody();
mjd.Target = vClick;
mjd.MaxForce = 1500;
m_mouseJoint = (MouseJoint)m_world.CreateJoint(mjd);
}
}
を加えます。
この部分が「クリック地点周辺のオブジェクトを探し、MouseJointを生成」する部分になります
AABBにマウスダウン地点周辺の情報を格納します。範囲は 0.5としていますが、適当なので調整して下さい。
これを Queryにかけるとその範囲になるシェイプの数が戻り値に入ります。ここで0が戻った場合は
マウスダウン地点周辺にはシェイプが無い、ということになり、1以上であれば指定した配列に
シェイプ情報が格納されます。
シェイプの存在が確認できたら MouseJointDefにデータを入れていきます。
値の中身は先に書いた通りです。
2倍のポイントを手に入れた! 3,168ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(582,120ポイント)
Date: 2010/09/26(日) 22:39
No:62371
|
|
Title: Re:C# Box2Dについて
|
|
あとは更新と破棄ですね。
そんなに説明する項目はないんですが、pictDrawの MouseMove/MouseUpのイベントを追加して、それぞれ
private void pictDraw_MouseMove(object sender, MouseEventArgs e)
{
// マウスジョイント更新
if(m_mouseJoint != null)
{
Vec2 mousePoint = new Vec2((e.X - m_ptOrg.X) / m_fZoom, -(float)(e.Y - m_ptOrg.Y) / m_fZoom);
m_mouseJoint.SetTarget(mousePoint);
}
}
private void pictDraw_MouseUp(object sender, MouseEventArgs e)
{
// マウスホイールクリック
if(e.Button == MouseButtons.Middle && m_mouseJoint != null)
{
// マウスジョイント破棄
m_world.DestroyJoint(m_mouseJoint);
m_mouseJoint = null;
}
}
と、こんな感じです。
後はウインドウが非アクティブになった際にも MouseJointは破棄するなど処理が必要ですね。
1,006ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..ぴよぴよ(428ポイント)
Date: 2010/09/26(日) 22:55
No:62372
|
|
Title: Re:C# Box2Dについて
|
|
エラー 1 ローカル変数 'vClick' は宣言されていないため、使用できません
と出てきてしまいました。
27ポイント を手に入れた。
|
|
|
|
|
Name: black_cat ..ぴよぴよ(478ポイント)
Date: 2010/09/26(日) 23:06
No:62373
| 解決!
|
Title: Re:C# Box2Dについて
|
|
できました!!
Justyさん すごいです!
C#版を扱われたことがないのにこんなに早く回答をくださるとは!
これからも何度もつまずくと思いますが、よろしくお願いします。
50ポイント を手に入れた。
|
|
|
|
Name: あくあみぅ ..ぴよぴよ(189ポイント)
Date: 2010/09/20(月) 20:01
No:62143
|
|
Title: 無題
|
|
[1] 質問文
[1.1] 自分が今行いたい事は何か
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
[1.4] 今何がわからないのか、知りたいのか
[2] 環境
[2.1] OS : Windows, Linux等々
[2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々
[3] その他
・どの程度C言語を理解しているか
・ライブラリを使っている場合は何を使っているか
189ポイント を手に入れた。
|
|
|
|
Name: あくあみぅ ..ぴよぴよ(526ポイント)
Date: 2010/09/20(月) 20:16
No:62144
|
|
Title: すいません間違えました!
|
|
本文を入力しないままEnterを押してしまいました!!
非常に申し訳ありません!!
質問させていただきます!
画像を表示するところで行き詰ってしまいました。画像を表示させたいです。
3.画像を表示する。のページのプログラムコードをコピーして貼り付けて実行したのですが、画像が表示されず、画像が表示されなかった時のプログラムコードの方も試したのですが、「画像の保存場所が違うか、ファイル名が違うため表示できません」とでました。しかし画像の保存場所もファイル名も何度も確認したのですが、合っています。
なぜ実行されないのかわかりません。
ちなみに、OSはWindows7で、コンパイラはVC++ 2008EEを使っています。
そして、C言語はまだ、初めて半年ほどなのであまり理解できていません。
すいませんが回答よろしくお願いします!
337ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(79,812ポイント)
Date: 2010/09/20(月) 20:21
No:62145
|
|
Title: Re:すいません間違えました!
|
|
何度もこの手の質問を見てきましたが、おそらくファイル名が違うかパスが間違っていると
思われます。
回答者側に何回か確認してもらって、やっぱり間違っていたというのが大半です。
勘違いしている可能性もあるので、コードも貼ってもらえますか?
38ポイント を手に入れた。
|
|
|
|
|
Name: あくあみぅ ..ぴよぴよ(718ポイント)
Date: 2010/09/20(月) 20:26
No:62146
|
|
Title: Re:すいません間違えました!
|
|
コードというのはこれのことですか?
#include "DxLib.h"
char st1[]="画像の保存場所が違うか、ファイル名が違うため、表示できません。";
char st2[]="正常に認識されています。";
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
if(LoadGraphScreen( 0 , 0 , "char.PNG" , TRUE ) == -1)
DrawString(50,220,st1,GetColor(255,255,255));
else
DrawString(50,220,st2,GetColor(255,255,255));
WaitKey() ;
DxLib_End() ;
return 0 ;
}
192ポイント を手に入れた。
|
|
|
|
|
Name: あくあみぅ ..ぴよぴよ(768ポイント)
Date: 2010/09/20(月) 20:34
No:62148
| 解決!
|
Title: Re:すいません間違えました!
|
|
すみません出来ました!!
「プロジェクトファイルのあるフォルダに保存する」の意味を取り違えていました!!
本当にありがとうございます!
似たような質問をしてしまい、申し訳ありませんでした。 
50ポイント を手に入れた。
|
|
|
|
|
Name: あくあみぅ ..かけだし(1,029ポイント)
Date: 2010/09/26(日) 21:38
No:62367
|
|
Title: Re:すいません間違えました!
|
|
遅くなってすいません!
http://dixq.net/g/01.html
↑のページを見て、「サンプル実行用フォルダ」に画像を保存したのですが、「画像の保存場所が違うか、ファイル名が違うため、表示できません。」と表示されました。
なので、管理人様が仰っている、その下の問題解決用のページに行って、そこのコードを貼り付けたのですが、また「画像の保存場所が違うか、ファイル名が違うため、表示できません。」と表示されました。
なので前回はここに質問させていただいたのですが・・・
まず、私は「プロジェクトファイルのあるフォルダに保存する」の意味を取り違えていました。
「サンプル実行用フォルダ」には「プロジェクトファイル」がなかったので、本当にプロジェクトファイルのあるフォルダに画像を保存したら成功しました。
私のVC++ 2008EEの設定が何か間違っていたのかもしれませんが・・・
サンプル実行用フォルダに画像を保存しても画像が表示されなかったのです。
261ポイント を手に入れた。
|
|
|
|
Name: へろり ..熟練のプログラマー(41,161ポイント)
Date: 2010/09/26(日) 14:44
No:62346
|
|
Title: クラス継承時のメンバ変数の取り扱い
|
|
いつもお世話になっております。
最近は今まで perl で書いていた使い捨てのプログラムをちこちこと勉強がてらC++で書くようにしているのですが、ちょっと分からないところがあり質問させていただきます。
class BASE{
protected:
int a;
};
class HOGE : public BASE{
private:
int b;
public:
void func();
};
void HOGE::func()
{
HOGE hoge;
BASE base;
hoge.b = 0; //ok
this->a = 0; //ok
base.a = 0; //error
}
main(void)
{
HOGE hoge;
hoge.func();
}
上記のコードにて何故、base.a = 0; がエラーとなるのでしょうか。
そういう仕様だと言われればそれまでなのですが、どうにも納得がいきません。
またこういう場合はどのように記述するのが定石なのでしょうか。 クラス HOGE のメンバ関数 func() は他所からも自由に使える事を前提にお願いします。
初歩的な質問ですがよろしくお願いします。
#余談ですが、クラスのメンバ変数において、クラスの内側からは書き込み可、クラスの外側からは書き込み不可(どちらも読み取りは出来る)なアクセス指定子があったらいいなと思うのは私だけでしょうか。
95ポイント を手に入れた。
|
|
|
|
Name: dic ..ハッカー(101,434ポイント)
Date: 2010/09/26(日) 15:46
No:62347
|
|
Title: Re:クラス継承時のメンバ変数の取り扱い
|
|
#include <iostream>
using namespace std;
class BASE{
protected:
int a;
public:
void SetValue( int val );
int GetValue();
};
void BASE::SetValue( int val )
{
a = val;
}
int BASE::GetValue()
{
return a;
}
class HOGE : public BASE{
private:
int b;
public:
void func();
};
void HOGE::func()
{
HOGE hoge;
BASE base;
hoge.b = 0; //ok
this->a = 0; //ok
// base.a = 0; //error
base.SetValue(0);
}
void main(void)
{
HOGE hoge;
hoge.func();
}
ではどうでしょうか?
258ポイント を手に入れた。
|
|
|
|
|
Name: 438番 ..かけだし(1,091ポイント)
Date: 2010/09/26(日) 15:53
No:62348
|
|
Title: Re:クラス継承時のメンバ変数の取り扱い
|
|
void HOGE::func()
はすでにHOGEクラスメンバ関数なので普通に変数を触れます
なので
HOGE hoge;
BASE base;
ともう一度してしまうと別にクラス型の変数を定義してそちらに代入しようとするので
protectedではエラーが出ます
(publicなら代入可能)
したいことと違っていたらすみません
一応ソース
class BASE{
protected:
int a;
};
class HOGE : public BASE{
private:
int b;
public:
void func();
};
void HOGE::func()
{
b = 0; //ok
this->a = 0; //ok(thisは無くても)
a = 0; //ok
}
void main(void)
{
HOGE hoge;
hoge.func();
}
212ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(221,867ポイント)
Date: 2010/09/26(日) 16:12
No:62349
|
|
Title: Re:クラス継承時のメンバ変数の取り扱い
|
|
何がやりたいのでしょうか?
定義とインスタンスに対する操作がごっちゃになっているような?
HOGE::func()内部で、HOGE hoge;やBASE base;のインスタンスを作っているのは意味があるのでしょうか?
HOGE hoge;のインスタンスに操作してもメンバ関数func()を抜けるときにHOGE hoge;のインスタンスは消滅しますので操作した意味が無いことになります。
つまり、mainのHOGE hoge; と:func() 内の HOGE hoge;は別のインスタンスで別のメモリ空間を持つ別データとなります。
127ポイント を落としてしまった。
|
|
|
|
|
Name: へろり ..熟練のプログラマー(41,558ポイント)
Date: 2010/09/26(日) 16:22
No:62350
|
|
Title: Re:クラス継承時のメンバ変数の取り扱い
|
|
dicさん
>ではどうでしょうか?
これは私も考えました。
しかし、SetValue() GetValue() のようなメンバ関数を用意してしまうと、protected の意味が無いような気がするのですが。
メンバ変数 a のアクセス指定子に限らずフルアクセス出来てしまうということですよね。
クラスの仕様としてその手段を用意して上げるのはいささかどうかと思います。
実際には、GetValue() で返される値は変数 a のコピーですし、SetValue() では内部で assert を仕掛けることもできますので、多少は安全かなと思いますが、気休めのような気がしてならずちょっと敬遠してました。
やっぱりこうするのが一番なのでしょうか。
>438番さん
>ともう一度してしまうと別にクラス型の変数を定義してそちらに代入しようとするので
>protectedではエラーが出ます
>(publicなら代入可能)
とはどう解釈すればよいのでしょうか。
base.a = 0; と、インスタンス(base)を指定してますので、なんら混乱することなく代入は可能だと思うのですが。
追記です。
質問の趣旨は、クラス BASE から派生したクラス HOGE から基底クラスである BASE のメンバ変数 a へ this ポインタを経由すればアクセス出来るのに、他のインスタンスのメンバ変数 a へはアクセスできないのは何故か。 ということです。
よろしくお願いします。 
397ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(228,375ポイント)
Date: 2010/09/26(日) 16:24
No:62351
|
|
Title: Re:クラス継承時のメンバ変数の取り扱い
|
|
> 上記のコードにて何故、base.a = 0; がエラーとなるのでしょうか。
> そういう仕様だと言われればそれまでなのですが、どうにも納得がいきません。
そういう仕様です。
もし、base.a = 0; が可能なら、BASEを継承しさえすれば、全く関係のないところから自在にprotectedメンバにアクセスできてしまいます。
これではprotectedの意味がありません。
> #余談ですが、クラスのメンバ変数において、クラスの内側からは書き込み可、クラスの外側からは書き込み不可(どちらも読み取りは出来る)なアクセス指定子があったらいいなと思うのは私だけでしょうか。
そんなものはなくても、通常のメンバ関数(いわゆるgetter)で実現できます。
115ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..熟練のプログラマー(41,725ポイント)
Date: 2010/09/26(日) 16:48
No:62352
|
|
Title: Re:クラス継承時のメンバ変数の取り扱い
|
|
softyaさん
>何がやりたいのでしょうか?
>HOGE::func()内部で、HOGE hoge;やBASE base;のインスタンスを作っているのは意味があるのでしょうか?
クラス BASE は実際のところは抽象クラスであり、リスト構造になっていて、内部で生成・削除を行います。
HOGE::func()内で、クラス BASE のインスタンスを作っているのは、現在私が抱えている問題を分かりやすくするためです。
が、混乱を招いてしまったようで申し訳ありません。
たかぎさん
>そういう仕様です。
>もし、base.a = 0; が可能なら、BASEを継承しさえすれば、全く関係のないところから自在にprotectedメンバ>にアクセスできてしまいます。
>これではprotectedの意味がありません。
main() 関数から、クラス HOGE のメンバ変数 a にアクセス出来ないのは分かります。
しかし、HOGE::func() はクラス BASE を継承した クラス HOGE のメンバ関数です。
全く関係ないとは思えないのですが。 事実 this ポインタを経由すればアクセスできます。 これはどう解釈すればよろしいですか。
167ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..熟練のプログラマー(41,289ポイント)
Date: 2010/09/26(日) 16:58
No:62353
|
|
Title: Re:クラス継承時のメンバ変数の取り扱い
|
|
>事実 this ポインタを経由すればアクセスできます
thisの型はあくまでHOGE*でしょう。
確かに、HOGEのメンバ関数内であれば、
インスタンス化されたHOGEでも、変数aにアクセス可能です。
しかし、インスタンス化されたBASEでは別の話です。
たとえHOGEがBASEの派生クラスであろうと、
BASEのprotectedな変数であるaにはアクセス不可です。
118ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(228,612ポイント)
Date: 2010/09/26(日) 17:03
No:62354
|
|
Title: Re:クラス継承時のメンバ変数の取り扱い
|
|
> main() 関数から、クラス HOGE のメンバ変数 a にアクセス出来ないのは分かります。
> しかし、HOGE::func() はクラス BASE を継承した クラス HOGE のメンバ関数です。
> 全く関係ないとは思えないのですが。
同じクラスではないからです。
もし、異なるクラスでも、継承関係さえあればprotectedメンバにアクセスできるのであれば、
struct BAR : HOGE
{
static void func(HOGE& hoge);
};
とでもしておけば、BAR::funcを介して、HOGEクラスのメンバが触り放題になります。
しかも後付けで。
これはHOGEクラスの設計者の意図とは異なるはずです。
> 事実 this ポインタを経由すればアクセスできます。
同じクラスだからです。
同じクラスであれば、this経由でなくてもアクセス可能です。
例えば...
void HOGE::func()
{
HOGE hoge;
hoge.a = 0; //ok
}
となるはずです。
237ポイント を手に入れた。
|
|
|
|
|
Name: 438番 ..かけだし(1,637ポイント)
Date: 2010/09/26(日) 17:04
No:62355
|
|
Title: Re:クラス継承時のメンバ変数の取り扱い
|
|
>どう解釈すればよいのでしょうか。
HOGE::func()はBASEクラスの派生クラスですので
hoge.a=0;
ならエラー無く通るはずです
>インスタンス(base)を指定してますので
こうしてみるとわかりやすいかもしれません
void HOGE::func()
{
HOGE hoge;
BASE base;
b=4; //ok
hoge.b = 0; //ok
this->a = 3; //ok
a = 0; //ok
hoge.a=0;
//base.a=0;エラーが出ます
printf("b=%d\nhoge.b=%d\n",b,hoge.b);
printf("hoge.a=%d\n",hoge.a);
//printf("%d\n",base.a);エラーが出ます
}
実行結果
b=4;
hoge.b=0;
hoge.a=0;
インスタンスを作成したので
"b"と"hoge.b"は別物です
"a"というのはこのクラスの元となる"base"クラスが持つ変数ですので
アクセスが可能です
なので"a=0;"と代入が出来ます
(this.aというのはこれにあたります)
つまり今は
a, b (もともとのクラスの変数)
hoge.a, hoge.b (インスタンスhogeの変数)
base.a (インスタンスbaseの変数)
があるわけです
base.aはクラスの外からアクセスしようとしているので
エラーが出ます
publicならアクセス可能なのでエラーが出ません
546ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(221,988ポイント)
Date: 2010/09/26(日) 17:17
No:62356
|
|
Title: Re:クラス継承時のメンバ変数の取り扱い
|
|
こうすると違うメモリ空間であることが実感できるかも。
hoge.b = 0; //ok
cout << &(hoge.b) << endl;
this->a = 0; //ok
cout << &(this->a) << endl;
a = 0; //
cout << &(a) << endl;
hoge.a = 0; //
cout << &(hoge.a) << endl;
this->aとaだけは同じメモリ空間(インスタンス)です。
121ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..熟練のプログラマー(42,222ポイント)
Date: 2010/09/26(日) 18:10
No:62359
|
|
Title: Re:クラス継承時のメンバ変数の取り扱い
|
|
MNS さん
>しかし、インスタンス化されたBASEでは別の話です。
>たとえHOGEがBASEの派生クラスであろうと、
>BASEのprotectedな変数であるaにはアクセス不可です。
そういう仕様なのですね。
やっぱり納得はいきませんが、理解は出来ます。
たかぎさん
>とでもしておけば、BAR::funcを介して、HOGEクラスのメンバが触り放題になります。
>しかも後付けで。
これは確かに危険です。 アクセスレベルを解消するためだけに継承するという発想がありませんでした。
>となるはずです。
いや、も。 目から鱗です。 よくよく考えれば単純な話ですが、確かにその通りですね。
438番さん
>base.aはクラスの外からアクセスしようとしているので
>エラーが出ます
クラス BASE から継承したクラス HOGE もクラス BASE の外になるのですね。 それだと、クラス BASE から派生した クラス HOGE である this ポインタ(HOGE*)からもアクセス不可となるような気がするのですが。 ここがちょっと納得いかなかったのです。
softya さん
インスタンスが全くの別物だというのは分かっているのですが、thisポインタ(クラス BASEから継承した HOGE) からはアクセス出来るが、クラス HOGE 内で生成した別のインスタンス(クラス BASE)に、文法的にアクセス出来ないのは何でだろ? ということで質問させていただきました。
この件はこれで解決とさせていただきます。
回答してくださった皆様ありがとうございました。
忘れてました。 追記です。
たかぎさん
>そんなものはなくても、通常のメンバ関数(いわゆるgetter)で実現できます。
確かにその通りなのですが、メンバ変数が増えると、いちいち用意するのが面倒で。
あったらいーなーと思った次第です。
すみません。 ものぐさな人間なのです。 
497ポイント を手に入れた。
|
|
|
|
Name: ピッチャー ..入門者(3,042ポイント)
Date: 2010/09/19(日) 20:25
No:62068
|
|
Title: 携帯アプリなどについて
|
|
windows上でC言語とDXライブラリを用いてGUIのゲームなどを作った場合、
実行ファイルはwindows環境でしか正常に動かせないと聞きました。
windowsパソコンで作った作品をネットで配布した時、
@マック、リナックスなどを使っている人がダウンロードして、あまり面倒な作業を
しなくても正常に動かせるようにするにはどうすればよいのでしょうか。
Aそれから、C言語で携帯(モバイル向け)のGUIアプリはどうすれば作れるのでしょうか。
JAVAでは比較的簡単に携帯アプリを作れるらしいですが、Cではどうなのでしょうか。
B携帯会社や携帯の機種は多種多様ですが、Cで作品を作る場合、
対象をどれか絞る必要があるのでしょうか。
たとえば東芝製のソフトバンク使用者用に作る、など。
Cあと、JAVAで作られた市販の携帯アプリをよく見かけるのですが、
いろんな携帯会社向けに作られていますが、それは
JAVAのVMやランタイムが入ってさえいれば同じソースで動くという仕組みなのでしょうか。
VMやランタイムは現在の携帯機種には標準で入っているのでしょうか?
とりあえず以上4点について質問させていただきます。
文章が下手で伝わりにくいと思いますが、よろしくおねがいします。
303ポイント を落としてしまった。
|
|
|
|
Name: ぽこ ..プログラマー(31,116ポイント)
Date: 2010/09/19(日) 23:14
No:62079
|
|
Title: Re:携帯アプリなどについて
|
|
> windowsパソコンで作った作品をネットで配布した時、
> @マック、リナックスなどを使っている人がダウンロードして、あまり面倒な作業を
> しなくても正常に動かせるようにするにはどうすればよいのでしょうか。
マルチプラットフォーム対応している言語/環境で作成するのが宜しいかと。
例えばJavaとか。
> Aそれから、C言語で携帯(モバイル向け)のGUIアプリはどうすれば作れるのでしょうか。
> JAVAでは比較的簡単に携帯アプリを作れるらしいですが、Cではどうなのでしょうか。
携帯キャリアがどういうSDKを提供しているかによります。
C言語で開発できないキャリアではC言語で作成することは諦めましょう。
> B携帯会社や携帯の機種は多種多様ですが、Cで作品を作る場合、
> 対象をどれか絞る必要があるのでしょうか。
> たとえば東芝製のソフトバンク使用者用に作る、など。
携帯キャリアが提供しているSDKを使用すれば、それがサポートしている機種では動くと思いますよ。
#本職ではないので、どれほどちゃんと動くかは知りません。
> Cあと、JAVAで作られた市販の携帯アプリをよく見かけるのですが、
> いろんな携帯会社向けに作られていますが、それは
> JAVAのVMやランタイムが入ってさえいれば同じソースで動くという仕組みなのでしょうか。
> VMやランタイムは現在の携帯機種には標準で入っているのでしょうか?
標準で入っていると思いますよ。
ただ、キャリアが違うと同じソースで動くことはないと思います。
#これも本職ではないので、正確なところは知りませんが。
157ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(218,901ポイント)
Date: 2010/09/19(日) 23:40
No:62084
|
|
Title: Re:携帯アプリなどについて
|
|
auのC++(BREW)での開発環境は一般には公開されてなかったのでは?
オープンアプリプレイヤー上で動かすのであればJAVAで開発できます。
たしかMIDP2.0準拠だったと思います。
SoftBankはMEXAという独自のJavaのライブラリを採用していますが、MIDP2.0をベースにしているものなので、MIDP2.0の機能だけで組めばauのオープンアプリプレイヤーと同じソースで動くはずです。
docomoだけはdojaという独自のJavaのライブラリです。(最近はstarという新しいものらしいです)なので、他2キャリアとは互換性はありません。ただし、考え方や組み方は近いものがありますので、キャリア独自の機能を使ってさえいなければ移殖も可能だと思います。
という訳で日本での主要3キャリアは基本的にはJavaに限られています。i-phoneなんかはObjectiveC(もしくはObjectiveC++)なので、どうしてもCやC++を使用したければ、こちらになります。
331ポイント を手に入れた。
|
|
|
|
|
Name: ピッチャー ..入門者(3,160ポイント)
Date: 2010/09/20(月) 00:06
No:62085
|
|
Title: Re:携帯アプリなどについて
|
|
>ぽこさん
なるほど。やっぱり携帯アプリ開発ではJAVAが主流なんですね。
JAVAをやるならオブジェクト指向で書かないと意味がないと聞きます。
個人的にはwindows環境のCで構造化プログラミングを覚えて
ようやく入門レベルを卒業できたのに、
JAVAでオブジェクト指向も勉強せねばならないとは・・・。
>真等さん
調べてみたところ、
auはBREWとかいうjavaVMもどきを搭載していますね。
Cもどきでアプリ作れるようなことが書いてあるけど、
DXライブラリでしかGUIに触れたことがないスレ主としては、
BREWとかいう環境のAPIめんどくさそうです。
ipadアプリがC(Cもどき?)で開発できるとは知りませんでした。
でも海外では流行ってるイメージがありますし、宣伝も凄いですが、
ipadって日本ではどうなんでしょうか・・・。
objectiveCというからにはオブジェクト指向で書かなければ
格好がつかないですよね。
どちらにしろ、DXライブラリ使ってる時点で
windows以外じゃ動作しなさそうなので、
DXライブラリに代わるGUI支援ツールを探さねば・・・。
118ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(218,964ポイント)
Date: 2010/09/20(月) 00:26
No:62088
|
|
Title: Re:携帯アプリなどについて
|
|
DXライブラリはDirectXを扱いやすくラッピングしたライブラリです。
GUIライブラリが必要であるのならば、WINAPI、MFC、.NETなんかがありますね。
JavaならSwingとかかな?
63ポイント を手に入れた。
|
|
|
|
|
Name: ピッチャー ..入門者(3,330ポイント)
Date: 2010/09/20(月) 00:52
No:62093
|
|
Title: Re:携帯アプリなどについて
|
|
>softyaさん
ええ、それは知っていますが、一応配布したいのはゲームでして、
それから、単にグラフィックや音源やキー入力の制御を行うのに
Win32APIは記述がめんどくさそうだと勝手に思っていたので、
下手糞なりに簡単なDXライブラリを使って書いていたわけです。
GTK+というのは便利そうですが、
こちらもオブジェクト指向での記述が基本みたいですね。
オブジェクト指向はまだ勉強不足でして、JAVAを避けているのもこういう理由です。
聞くところによると、最近ではプロアマ問わず初心者でもC言語じゃなく
javaのオブジェクト指向から学ぶという傾向があるみたいですね。
やっぱりC言語よりもjavaから始めるべきだったかも知れません。
これからはオブジェクト指向ができないとダメそうですね。
個人の趣味レベルだったのでC言語の関数操作で充分だったんですがw
>バグさん
やはりOSや機種を超えて作るならjavaですね。余裕があったら勉強してみます。
170ポイント を手に入れた。
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(81,848ポイント)
Date: 2010/09/25(土) 20:51
No:62325
|
|
Title: 仮想関数について
|
|
いつもお世話になります。
今回は仮想関数について質問させてください。
まず下記のコードをご確認ください。
クラスBASEを継承した、クラスA、Bがあります。
class BASE{
public:
int x,y,z;
virtual void Calc(){
z=x+y;
}
};
class A : public BASE{
int x,y,z;
public:
void Calc(){
z=x-y;
}
};
class B : public BASE{
int x,y,z;
public:
void Calc(){
z=x*y;
}
};
そこで質問があります。
質問@
基底クラスのCalc関数を仮想関数にしていますが、その派生クラスである、A、Bのクラスでは
Calc関数をオーバーライドしています。
このように派生クラス側でオーバーライドする場合、BASEクラスを継承し、Calc関数を仮想関数化する意味
はあるのでしょうか?
自分の考えでは、基底クラスのポインタを使って、各派生クラスのインスタンスを作成し、
そのポインタを使って、それぞれのクラスのCalc関数が呼ばれるようにするぐらいしかメリットはないですよね?
つまり、各派生クラスでA a,B bのようにそれぞれでインスタンスを作ってしまえば、
仮想関数にする意味はないのではないかと思っているんです。
質問A
インターフェースクラスについて。
BASEクラスを継承したクラスA、Bのインスタンスでしか、Calc関数は呼び出さないとします。
つまり、BASE baseみたいに基底クラス単体でインスタンス作って、その関数を呼び出さないってことです。
その場合、基底クラスの仮想関数をvirtual void Calc() = 0として、純粋仮想関数化し、
インターフェースクラスにするべきなのでしょうか?
質問B
インターフェースクラスにした場合、「インタフェースクラスには仮想デストラクタを宣言しておくべき」と
このページの下のほうに
書いてありますが、この理由を教えてください。
また、そのインターフェースクラスを継承した派生クラスにも仮想デストラクタを宣言する必要があるのか、
教えてください。
質問C
基底クラスの関数にvirtualをつけて、仮想関数化した場合、その派生クラスには該当の関数にvirtualを
つける必要はありますでしょうか?
いらないと思ったんですが、このページ(下の方)に、派生クラス側にもvirtualをつけてるものがあったものでして^^;
大体以上です。分かりにくくて申し訳ありませんが、よろしくお願い致します。
2倍のポイントを手に入れた! 1,226ポイント を手に入れた。
|
|
|
|
Name: 組木紙織 ..比類無きプログラマー(92,216ポイント)
Date: 2010/09/25(土) 21:31
No:62326
|
|
Title: Re:仮想関数について
|
|
1:
私は、質問の意味や意図が分からないので回答できません。
2:
デフォルトの実装が必要な場合には仮想関数でよい。
デフォルトの実装が必要でない場合には純粋仮想関数にすべき。
と考えています。
純粋仮想関数が一つでもはいっていたら仮想クラスとなります。
したがって、ほかに仮想関数がいくら入っていてもインスタンス化できないクラスとなります。
(質問の意味を十分把握できていないので、的外れかも知れませんが。)
3:
仮想デストラクタは必要です。
"インターフェースクラス"じゃなくても、"ポリモーフィズムとして扱うように考えているクラス"は必要です。
サンプルコードを書いて見ればすぐわかります。
4:
さらに継承をすることを考えているなら必要。そうでないなら必要なし。
#サンプルコードはどのような使われ方をするか知りませんが、良くないコードだと思っています。
316ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(68,277ポイント)
Date: 2010/09/25(土) 21:53
No:62327
|
|
Title: Re:仮想関数について
|
|
> 質問@ に関してです。
基本的に仮想関数にかんしては、クラスに柔軟性を持たせる場合に使います。(私の場合は)
class BASE {
public:
int x,y,z;
BASE() { x = y = z = 5; }; // 5で初期化
virtual int Calc() = 0;
};
class A : public BASE {
public:
int Calc() {
z = x - y;
return z;
}
};
class B : public BASE {
public:
int Calc() {
z = x * y;
return z;
}
};
int main() {
#if 1
BASE c = new A();
#else
BASE c = new B();
#endif
std::cout << c->Calc() << std::endl; // 計算結果を出力
delete c;
return 0;
}
#ifに0を指定すればコンパイル時に動作が変わります(動作未確認)。
例ではインパクトが弱いですが、同じ用法を使って私の場合はDirectXの9と11の動作切換えに使えて便利だと思っています。
235ポイント を手に入れた。
|
|
|
|
|
Name: dic ..ハッカー(101,176ポイント)
Date: 2010/09/25(土) 21:59
No:62328
|
|
Title: Re:仮想関数について
|
|
1.
基本クラスで仮想関数を宣言して
派生クラスで仮想関数の実態を定義します
ポリモーフィズムの利点は分かっているようですが、実践では使ったことがないのではないでしょうか?
#include <iostream>
using namespace std;
class Base
{
public:
virtual void Init();
};
class A : public Base
{
public:
void Init();
};
class B : public Base
{
public:
void Init();
};
// 新しいクラス
class C : public Base
{
public:
void Init();
void Original();
};
void Base::Init(){}
void A::Init(){}
void B::Init(){}
void C::Init(){}
void C::Original(){}
int main()
{
Base *a, *b;
a = new A;
b = new B;
a->Init();
b->Init();
// 新しく追加仮想関数があるので
// Init関数にアクセスできる
Base *c;
c = new C;
c->Init();
// Originalにはアクセスできない
// x c->Original();
// でははじめからこうすると
C *c1 = new C;
c1->Original();
return 0;
}
これでは基本クラスを継承した意味がなくなりますし
まったく基本クラスと派生クラスには関係がなくてもいいので継承を使う意味がないです
「仮想関数は基本的に派生クラスで実装する」という独自の作法を本から学びました
2.
純粋仮想関数を持つクラスはインスタンス化できません
>つまり、BASE baseみたいに基底クラス単体でインスタンス作って、その関数を呼び出さないってことです。
ちょっとここがよくわからないですね
3.4については 組木紙織さんと同じ意見です
519ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(68,415ポイント)
Date: 2010/09/25(土) 22:05
No:62329
|
|
Title: Re:仮想関数について
|
|
追記補足です。
上記の例は、あくまで仮想関数にメリットなどの意味を見出すならという見解の解答です。
よってBASEクラスでは特にCalc()の内容を定義する必要性を感じなかったので純粋仮想関数にして
派生クラスでは計算結果を返すようにと、ある程度意味のあるクラスにしてみました。
注目してほしいのは、計算結果の出力が違う点で、そこにクラスの柔軟性が垣間見れると思います。
そこに 組木紙織さんの言うようにデフォルトの動作が必要な場合は仮想関数として実装すれば良いと思います。
138ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..熟練のプログラマー(41,171ポイント)
Date: 2010/09/25(土) 22:13
No:62330
|
|
Title: Re:仮想関数について
|
|
@
多態性を実現するなら必要でしょう。
>基底クラスのポインタを使って、各派生クラスのインスタンスを作成し、
>そのポインタを使って、それぞれのクラスのCalc関数が呼ばれるようにする
まさにこれです。
多態性を使わないと、継承をする意味があまりありません。
C
確か、不要だった気がします。
(その派生クラスがさらに継承されるとしても)
ですが、付けても付けなくても変わりませんから、
明示するに越したことはないでしょう。

63ポイント を手に入れた。
|
|
|
|
|
Name: gyz ..かけだし(2,310ポイント)
Date: 2010/09/25(土) 22:22
No:62331
|
|
Title: Re:仮想関数について
|
|
私も勉強中の身ですので100%正しいとは言い切れませんが
回答させていただきます
-------------------------------------------
質問@
>派生クラス側でオーバーライドする場合、BASEクラスを継承し、Calc関数を仮想関数化する意味はあるのでしょうか?
派生クラスを継承するクラスを作る予定が無いのなら、厳密には派生クラスのメソッドにvirtualつける必要は無いです
ただ、規約や、オーバーライドしているという分かりやすさを考慮して派生側にもvirtualを付ける場合が多いようです。
仕様変更があって、継承する必要が出てしまうかもしれませんしね。
>基底クラスのポインタを使って、各派生クラスのインスタンスを作成し、
>そのポインタを使って、それぞれのクラスのCalc関数が呼ばれるようにするぐらいしかメリットはないですよね?
ぐらいしかメリットが無いというのは間違ってると思います
仮想関数のもっとも大きなメリットでは無いでしょうか?
多態性はコレなしでは実現出来ないでしょう
-------------------------------------------
質問A
>基底クラス単体でインスタンス作って、その関数を呼び出さない
この場合は純粋仮想関数にして、仮想クラス化するべきだと思います
-------------------------------------------
質問B.
>インターフェースクラスにした場合、「インタフェースクラスには仮想デストラクタを宣言しておくべき」と
>このページの下のほうに
>書いてありますが、この理由を教えてください。
質問@の仮想関数と同じ理由です
仮想デストラクタにしなかった場合、
基底クラスのポインタに派生クラスのインスタンスを格納した場合、基底クラスのデストラクタしか実行されなくなるからです。
>また、そのインターフェースクラスを継承した派生クラスにも仮想デストラクタを宣言する必要があるのか、
>教えてください。
これも質問@の仮想関数と同じです
派生クラスを継承したクラスを使用予定がない場合は、厳密には派生クラスのデストラクタにvirtualは必要ありません
こちら
http://www5c.biglobe.ne.jp/~ecb/cpp/06_09.html
のページの右側のコードの、子クラスのデストラクタのvirtualを消して
実行してみてください、ちゃんと子クラスのデストラクタも動きます。
-------------------------------------------
質問C
質問@の回答と同じ
2倍のポイントを手に入れた! 1,448ポイント を手に入れた。
|
|
|
|
|
Name: gyz ..入門者(3,306ポイント)
Date: 2010/09/25(土) 22:46
No:62332
|
|
Title: Re:仮想関数について
|
|
MNSさんの回答を読んで、
子クラスから派生した孫クラスを作成して試したところ、
親クラスのデストラクタにvirtualがついていれば
子クラスと孫クラスのデストラクタにvirtualが無くても
親クラスのポインタに、子、孫クラスのインスタンスを格納した場合も
子クラスのポインタに、孫クラスのインスタンスを格納した場合も
全てのデストラクタが動くことを確認しました。
オーバーライドした関数についても同様でした。
ですので、私の回答は訂正させていただきます。
以下テストコードです
// 親クラス
class Base{
public:
Base(){
cout << "Base::Base()" << endl;
}
virtual ~Base(){
cout << "Base::~Base()" << endl;
}
virtual void Func(){
cout << "Base::Func()" << endl;
}
};
// 子クラス
class Deriv : public Base{
public:
Deriv(){
cout << "Deriv::Deriv()" << endl;
}
~Deriv(){
cout << "Deriv::~Deriv()" << endl;
}
void Func(){
cout << "Deriv::Func()" << endl;
}
};
// 孫クラス
class Mago : public Deriv{
public:
Mago(){
cout << "Mago::Mago()" << endl;
}
~Mago(){
cout << "Mago::~Mago()" << endl;
}
void Func(){
cout << "Mago::Func()" << endl;
}
};
int main(){
{
Mago mago;
mago.Func();
}
cout << endl;
Base* pBase;
Deriv* pDeriv;
Mago* pMago;
pBase = new Base();
pBase->Func();
delete pBase;
cout << endl;
pBase = new Deriv();
pBase->Func();
delete pBase;
cout << endl;
pBase = new Mago();
pBase->Func();
delete pBase;
cout << endl;
pDeriv = new Deriv();
pDeriv->Func();
delete pDeriv;
cout << endl;
pDeriv = new Mago();
pDeriv->Func();
delete pDeriv;
cout << endl;
pMago = new Mago();
pMago->Func();
delete pMago;
return 0;
}
996ポイント を手に入れた。
|
|
|
|
|
Name: 組木紙織 ..比類無きプログラマー(92,914ポイント)
Date: 2010/09/25(土) 23:07
No:62333
|
|
Title: Re:仮想関数について
|
|
私も訂正をさせていただきます。
>さらに継承をすることを考えているなら必要。そうでないなら必要なし。
↓
さらに継承を考えている場合でも必要はないが、親クラスのvirtualがない場合に注意が必要。
親にvirtualが付いていれば(子ではついていなくても)、孫は親や、子のポインタでポリモーフィズムとして扱うことが出来るが、
親にvirtualが付いていなければ、(子ではvirtualが付いていても)、親クラスのポインタでポリモーフィズムとして扱うことが出来ない。
以下のコードでTYPE1を定義してあれば(TYPE2が定義されてなくても)意図通りの動き方をしますが、
TYPE2だけ定義してあれば、以下のような動作をし、一部意図通りには動きません。
//実行結果
Base
Base
Base
A
B
//ここまで
親でvirtualを消して、子でvirtualをつけ親クラスのポインタで扱う状況は想定できないので、
ほとんど気にしなくてもいいと思います。
#多重継承までは確かめていませんが、いまはそこまで考える必要はないと思うのでここまでとしときます。
/*******************************
TYPE1 Baseにvirtualをつける
TYPE2 Aにvirtualをつける
******************************/
//#define TYPE1
//#define TYPE2
#include <iostream>
class Base
{
public:
#ifdef TYPE1
virtual
#endif
void print(){std::cout << "Base" << std::endl;}
};
class A :public Base
{
public:
#ifdef TYPE2
virtual
#endif
void print(){std::cout << "A" << std::endl;}
};
class B:public A
{
public:
void print(){std::cout << "B" << std::endl;}
};
int main()
{
Base * p_base = new Base;
Base * p_a = new A;
Base * p_b = new B;
p_base->print();
p_a->print();
p_b->print();
A* p_aa =new A;
A* p_ab =new B;
p_aa->print();
p_ab->print();
return 0;
}
698ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(82,825ポイント)
Date: 2010/09/25(土) 23:12
No:62334
|
|
Title: Re:仮想関数について
|
|
>組木紙織さん、arrayさん、dicさん、MNSさん、gyzさん。
わかりにくい質問にもかかわらず回答していただき、ありがとうございます^^
ちょっと長くなりそうですので、まとめて返答させていただきます。
>組木紙織さん、array(サウス)さん
分かりやすい返答、サンプルコードありがとうございます。
お二方の回答で分からなかったのが、デフォルトの実装という言葉です。
これはどういう意味でしょうか?
基底クラス単体でインスタンスを作成した場合ということでしょうか?
>dicさん
回答ありがとうございます。非常にわかりやすいサンプル助かりました。
基底クラスのポインタに派生クラスのインスタンスのポインタが格納されている場合、
そのポインタからは、仮想関数化してない派生クラスの関数を呼び出せないことは知りませんでした。
確かにもっと実際に何回か自分でテストしてみたほうが良さそうです。
>MNSさん
回答ありがとうございます。
virtualはつけてもつけなくても特に変わらないんですね。覚えときます。
>gyzさん
回答ありがとうございます。個人的に一番わかりやすかったです^^
わかりやすさを考慮して、派生側にもvirtualをつけることあるんですね。
つけても特に問題ないようですし、それなら納得です。
仮想デストラクタについても、非常にわかりやすいサイトを貼っていただいて、すごい理解できました。
仮想デストラクタ化しないと、問題が出る理由理解できました。
派生側にもvirtualをつけなくても、派生側のデストラクタはちゃんと実行されるんですね。
これを言ってくれなければ、また質問していたとこでした。本当に助かりました^^
皆さんの回答を見て、完全に理解できたのは、質問B、Cです。
質問@については、つまり、
仮想関数化するってことは基底クラスのポインタを使って、各クラスの同じ名前の関数を呼び出したい
ってことですよね?
ということは、基底クラスのポインタは使わずに、各クラスそれぞれで、
A a;
B b;
のようにインスタンスを作成すれば、仮想関数化する必要はないってことでよろしいでしょうか?
何でこんなにこの質問にこだわってるかというと、ここのサンプルに、
SceneBaseっていうクラスを継承して、各シーンのインスタンスをGameScene.hで作成してるんですが、
別に基底クラスのポインタを使ってないのに、なぜ仮想関数化してる関数があるのかが気になったので、
質問させていただいております。
質問Aについては、
「デフォルトの実装」という言葉の意味が分かれば大丈夫そうです。
返答が遅くなってすみませんでした。本当にありがとうございます。
引き続きよろしくお願い致します
977ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(68,607ポイント)
Date: 2010/09/25(土) 23:25
No:62335
|
|
Title: Re:仮想関数について
|
|
> 質問Aについては、
>「デフォルトの実装」という言葉の意味が分かれば大丈夫そうです。
デフォルトというのは、多態性を持たせると言っても、数多く継承していけば
動作を書き変えなくても良い派生クラスがでてくるかもしれません。
その時に、基底クラスに定義(デフォルト)あれば、特に書き換える必要が無くなります。
逆に基底クラスに純粋仮想関数(デフォルトがない)があると派生クラスでは必ず実装しないといけなくなります。
---
追記。
ちょっと分りにくかったかもしれないので用語に置き換えると
仮想関数化(デフォルトあり)
純粋仮想関数(デフォルトなし)
と考えても問題ない気がします。(問題ありそうなら有識者の方突っ込んで下さい^^;) 
192ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(82,954ポイント)
Date: 2010/09/25(土) 23:37
No:62336
|
|
Title: Re:仮想関数について
|
|
>組木紙織さん。gyzさん。
サンプルありがとうございます。すごい理解が深まりました^^
>>サウスさん。
デフォルトの意味理解できました。もう大丈夫です!
ありがとうございました!お疲れ様です!
後は@の質問だけですね。。。
皆さんお忙しいと思うので、暇な時で全然かまいませんので^^;
129ポイント を手に入れた。
|
|
|
|
|
Name: gyz ..入門者(3,623ポイント)
Date: 2010/09/25(土) 23:44
No:62337
|
|
Title: Re:仮想関数について
|
|
>SceneBaseっていうクラスを継承して、各シーンのインスタンスをGameScene.hで作成してるんですが、
>別に基底クラスのポインタを使ってないのに、なぜ仮想関数化してる関数があるのかが気になったので、
>質問させていただいております。
それはSceneBaseが多態性の実現を目的とした基底クラスでは無いからだと思います
この場合SceneBaseはゲームの各シーンを表すクラスが持つべき、共通かつ最低限の処理を定義しています
具体的にはゲームの状態を更新するupdateメソッドと、
updateメソッド返り値の列挙型です
また、SceneBaseのupdateメソッドは純粋仮想関数になっていますが
コレを継承したクラスは、必ずupdateメソッドを実装しないといけません(たとえ空実装でも)
もし、updateメソッドを実装し忘れると、コンパイル時にエラーとなるので
確実に実装洩れを防げるわけです。
メソッドの数が増えてくれば増えてくるほど、うっかりとしたミスを防ぐ有効な手段になると思います。
あと、継承した各シーン用クラスのupdateがvirtualにしてあるのは
前の質問で回答した通りですね。
317ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(83,085ポイント)
Date: 2010/09/26(日) 00:32
No:62338
| 解決!
|
Title: Re:仮想関数について
|
|
>>gyzさんありがとうございます!
正に私の求めていた回答です。理解できました^^
ありがとうございます!
これにて全ての質問が解決したので、解決ボタンを押させていただきます。
組木紙織さん、arrayさん、dicさん、MNSさん、gyzさん、ありがとうございました!
131ポイント を手に入れた。
|
|
|
|
Name: GEN ..ぴよぴよ(3ポイント)
Date: 2010/09/19(日) 23:31
No:62083
|
|
Title: eclipseでもDXライブラリはつかえますか?
|
|
eclipseでDXライブラリを使うことはできますか?
できれば、方法も教えてください。
3ポイント を手に入れた。
|
|
|
|
Name: dic ..比類無きプログラマー(99,371ポイント)
Date: 2010/09/20(月) 15:19
No:62130
|
|
Title: Re:eclipseでもDXライブラリはつかえますか?
|
|
C/C++コンパイラもあるようですが英語なのでためしたことがないです
C/C++コンパイラ(英語)ができるようなので、おそらくできると思います
やったことないので推測です
55ポイント を手に入れた。
|
|
|
|
|
Name: GEN ..ぴよぴよ(21ポイント)
Date: 2010/09/25(土) 20:41
No:62324
| 解決!
|
Title: Re:eclipseでもDXライブラリはつかえますか?
|
|
お礼申し送れました。
皆さんありがとうございます、挑戦してみます。
17ポイント を手に入れた。
|
|
|
|
Name: DecentLove ..上級者(24,545ポイント)
Date: 2010/09/25(土) 15:47
No:62313
|
|
Title: 自機の描画について
|
|
1日になんどもすいません。
龍神録プログラミングで、敵機の描画の所をやって、実行してみたのですが、敵機が描画されて、自機が描画されなくなりました。
コードも間違ってないと思うのですが、原因として、思い当たるものあれば、書き込みください。
113ポイント を落としてしまった。
|
|
|
|
Name: DecentLove ..上級者(24,659ポイント)
Date: 2010/09/25(土) 17:02
No:62318
|
|
Title: Re:自機の描画について
|
|
すみません、急いでいたので書き込み内容がすごく適当になってしまいました。
まるごと、添付したので参考にしてください。
VC2008使用です。
エラーは特に出ませんし、いつもどおり動いてくれます。
ookamiさんからご指摘を受けステップ実行というものをやってみましたがおかしな点も見つからないようです。
114ポイント を手に入れた。
|
|
|
|
|
Name: fatens ..上級者(19,683ポイント)
Date: 2010/09/25(土) 17:21
No:62319
|
|
Title: Re:自機の描画について
|
|
load関数で自機の画像を読み込んでいますが、その後のini関数で
memset(&ch,0,sizeof(ch_t));//自機データの初期化
によって0クリアされているためだと思います。
龍神録では画像の変数は自機の構造体のメンバではなく、独立した変数になっています。
86ポイント を手に入れた。
|
|
|
|
Name: kon ..ぴよぴよ(624ポイント)
Date: 2010/09/13(月) 19:55
No:61662
|
|
Title: スピードメータのようなものを描画したいと思います
|
|
初めまして、DirectXで3Dのレースゲームを作ろうと考えています。
メタセコイアで簡単なモデルを作成してキーボードで操作することはできるようになりました。
次は、画面の右下あたりにスピードメータのようなものを描画しようと思うのですが、方法が思いつかなくて困っています。
何か良いアイデアはないでしょうか? よろしくお願いします。
2倍のポイントを手に入れた! 316ポイント を手に入れた。
|
|
|
|
Name: kon ..ぴよぴよ(834ポイント)
Date: 2010/09/13(月) 20:32
No:61665
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、お返事ありがとうございます。
質問の内容が具体的じゃなかったので、補足したいと思います。
悩んでいる内容は、どうすれば画面右下にスピードメータを描画できるかを悩んでいます。
最初は、奥行きなし(z軸の値:0)のテクスチャを描画すれば良いのかなと思いましたが、ダメでした。
ネットで調べようにも、どう検索すれば良いかわからない状態で、偶然このサイトを見つけたので書き込みさせていただきました。
210ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(76,232ポイント)
Date: 2010/09/13(月) 20:37
No:61666
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
駄目っていうのは具体的にどういうことですか?
描画されなかったってことですか?
深度テストやステンシルテストなどには問題はありませんか?
ちょっとコードとかがないと原因を突き止めれそうにありません。。
95ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(42,497ポイント)
Date: 2010/09/13(月) 20:39
No:61667
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
メーターっというとあの丸っこいものですか?
(車とかについてる)
円で言うとスピードを0〜360に変換して時計みたいに描写しては?
(スピードを0〜360にするために(スピード*360/最大スピード))
真中から角度におおじて線を引くと言う感じでどうでしょう?
なんか勘違いしてたらすみません。
======
あれ?
タイミングが…遅かったようで。
======
3Dは経験なしなんで、勘違いな、発言してたらすいません。

85ポイント を手に入れた。
|
|
|
|
|
Name: kon ..ぴよぴよ(990ポイント)
Date: 2010/09/13(月) 21:17
No:61668
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、パコネコさん、お返事ありがとうございます。
>>シエルさん
ダメというのは、描画されなかったわけではなく、画面の右下にされなかったという意味です。
スクリーンショットを載せましたのでそちらを見てもらえば現状が分かると思います。
>>パコネコさん
詳しい解説ありがとうございます。
後ほど参考にさせていただきます。
156ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(76,372ポイント)
Date: 2010/09/13(月) 21:21
No:61669
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
こ、このロボットは見覚えがありますwもしかしたら同じ本で勉強されてるのかもw
右下に移動されないということですが、DIRECTX9を使って開発されますか?
もしそうであれば、ポリゴンの頂点フォーマットはどのように設定してますか?
ただの2D描画であれば、頂点変換済み座標を使うと簡単ですよ。
どちらにしろコードを見せていただいたほうが良いかもしれません。
140ポイント を手に入れた。
|
|
|
|
|
Name: kon ..かけだし(1,361ポイント)
Date: 2010/09/13(月) 21:42
No:61670
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、お返事ありがとうございます。
多分、シエルさんと同じ本で勉強していると思います。
本のタイトルは「DirectXゲームグラフィックスプログラミングVer.2.0」 です。
以下は、スピードメータ描画用テクスチャのコードの一部です。
ソースコードの情報が不足であれば、他の部分も載せたいと思います。
MY_VERTEX* v6;
m_pMyVB6->Lock( 0, 0, (void**)&v6, 0);
// 頂点座標の設定(スピードメータ)
v6[0].p = D3DXVECTOR3( 10.0f, 0.0f, NULL );
v6[1].p = D3DXVECTOR3( 30.0f, 0.0f, NULL);
v6[2].p = D3DXVECTOR3( 10.0f, -5.0f, NULL );
v6[3].p = D3DXVECTOR3( 30.0f, -5.0f, NULL );
v6[0].t = D3DXVECTOR2(0.0f, 0.0f);
v6[1].t = D3DXVECTOR2(1.0f, 0.0f);
v6[2].t = D3DXVECTOR2(0.0f, 1.0f);
v6[3].t = D3DXVECTOR2(1.0f, 1.0f);
v6[0].color = v6[1].color = v6[2].color = v6[3].color = D3DXCOLOR(1.0f,0.0f,0.0f,1.0f);
m_pMyVB6->Unlock();
371ポイント を手に入れた。
|
|
|
|
|
Name: kon ..かけだし(1,433ポイント)
Date: 2010/09/13(月) 21:54
No:61674
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、お返事ありがとうございます。
頂点フォーマットは、
#define MY_VERTEX_FVF ( D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1 )
に設定しているので問題ないと思います。
72ポイント を手に入れた。
|
|
|
|
|
Name: kon ..かけだし(1,545ポイント)
Date: 2010/09/14(火) 19:29
No:61726
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
ぬるぽさん、シエルさんお返事ありがとうございます。
>>ぬるぽ さん
まだ、実行はしていませんが完成度が高そうですね。教えていただきありがとうございます。
>>シエルさん
移動行列を使って移動とありますが、テクスチャを移動させるということでしょうか?
112ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(149,060ポイント)
Date: 2010/09/14(火) 20:20
No:61744
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
ヒントを提示しますね。
画面上に固定した位置に表示する場合、通常使用している行列とは別にその位置を指定する為の行列を設定し直す必要があります。
この場合、3D描画用の各変換行列と、2D描画用の各変換行列を用意し、それぞれの描画時に合わせて設定します。
3D描画用の変換行列を指定したままだと、3D空間上に表示されてしまいます。
2D描画用の各変換行列の作り方は、
ワールド行列:
x軸が(2 / 画面横幅)の拡大率、
y軸が(-2 / 画面縦幅)の拡大率で、
x軸とy軸を-1移動する行列。
ビュー行列:
まっすぐz軸の+方向に向かせる行列。(上方向はy軸の+方向)
プロジェクション行列:
正射影行列。(near は 0.0f で)
となります。
これで頂点を画面左上を原点としたピクセル座標で指定すればきれいに表示できるはず、です。
141ポイント を手に入れた。
|
|
|
|
|
Name: kon ..かけだし(1,719ポイント)
Date: 2010/09/15(水) 19:51
No:61799
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
御津凪さん、シエルさんお返事ありがとうございます。
>>御津凪さん
すみませんが、御津凪さんに何点かお聞きしたいことがあります。
・1点目は「3D描画用の各変換行列と、2D描画用の各変換行列を用意しそれぞれの描画時に合わせて設定」とありますが、3Dと2Dの両方を描画するには、どうすれば良いのでしょうか?
・2点目ワールド行列: 「x軸とy軸を-1移動する行列」というのはx軸・y軸に-1を設定すれば良いのでしょうか?
174ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(149,690ポイント)
Date: 2010/09/15(水) 20:37
No:61805
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
> ・1点目
現在描画している処理の中に、 IDirect3DDevice9::SetTransform で各変換行列を設定していると思います。
3D描画全て行った後、ここに2D用の各変換行列を設定して描画処理をします。
描画処理は、その処理を行うときの設定に従って処理されます。
今回の場合だと、現在の描画処理の最後あたりに追記するようにすれば問題なくいけるかと思います。
(深度バッファを使っている場合は念のため2D描画時には切っておくといいでしょう)
> ・2点目
その通りです。
ちなみに下記のような感じに D3DXMATRIX のコンストラクタでまとめることもできます。
D3DXMATRIX world(
2.0f / width, 0.0f, 0.0f, 0.0f,
0.0f, -2.0f / height, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
-1.0f, -1.0f, 0.0f, 1.0f,
);
293ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(2,502ポイント)
Date: 2010/09/16(木) 21:30
No:61882
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
スピードメータ描画用のテクスチャが表示されなくなりました。
多分、2D描画用の設定が原因だと思います。
以下にソースコードを記載します。
// ワールドマトリックスの設定( 何もしないマトリックスの生成)
D3DXMatrixIdentity(&m_world);
D3DXMatrixScaling( &mScale,( 2.0 / CLIENT_WIDTH), (-2.0 / CLIENT_HEIGHT), 1.0f) ;
//移動
D3DXMatrixTranslation( &mMove, -1.0f, -1.0f, 0.0f);
//マトリックス合成
D3DXMatrixMultiply(&m_world,&mScale, &mMove);
// マトリックスをレンダリングパイプラインにセット
pD3DDevice->SetTransform(D3DTS_WORLD, &m_world);
// カメラの位置と方向を設定
D3DXMatrixLookAtLH(&m_view,
&D3DXVECTOR3( 10.0f , 5.0f, 5.0f ), // カメラの位置
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f), // カメラの方向を向ける点
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f)); // カメラの上の方向
// マトリックスをレンダリングパイプラインに設定
pD3DDevice->SetTransform(D3DTS_VIEW, &m_view);
//正射影行列
D3DXMatrixIdentity(&m_proj);
D3DXMatrixOrthoLH(&m_proj, 2.0f, 2.0f, 0.0f, 100.0f);
pD3DDevice->SetTransform(D3DTS_PROJECTION, &m_proj);
// テクスチャをパイプラインにセット(スピードメータ)
pD3DDevice->SetTexture( 0, m_pTexture6);
// VertexBufferの描画
pD3DDevice->SetStreamSource( 0, m_pMyVB6, 0, sizeof(MY_VERTEX) );
pD3DDevice->SetFVF( MY_VERTEX_FVF );
pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
pD3DDevice->SetTexture( 0, NULL);
783ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(149,831ポイント)
Date: 2010/09/16(木) 22:00
No:61888
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
// カメラの位置と方向を設定
D3DXMatrixLookAtLH(&m_view,
&D3DXVECTOR3( 0.0f , 0.0f, -5.0f ), // カメラの位置
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f), // カメラの方向を向ける点
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f)); // カメラの上の方向
としたら、表示されますか?
95ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(2,523ポイント)
Date: 2010/09/17(金) 20:18
No:61952
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
御津凪さん、お返事ありがとうございます。
カメラ位置の設定を変更してみましたが、相変わらず表示されないままです。
21ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(77,493ポイント)
Date: 2010/09/17(金) 20:29
No:61953
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
私なら頂点バッファを、
(-0.5,0.5)(0.5,0.5)(-0.5,-0.5)(0.5,-0.5)の頂点で作成します。(TRIANGLESTRIP)
その後、
D3DXMATRIX world,proj;
のワールド行列と正射影用の行列を作り、
ワールド行列は
D3DXMatrixIdentity(&world)で単位行列を作ったあと、
そのメンバの_11と_22にそれぞれ横の長さと縦の長さを入れます。
正射影行列は
D3DXMatrixIdentity(&proj)で単位行列を作ったあと、
_11に2/ウィンドウ横幅、_22に2/ウィンドウの縦幅を設定します。
あとはそれぞれSetTransformで設定すれば、指定した大きさで描画できます。
この場合画面の中央が(0,0,0)になります。
移動したい場合は移動行列の各xyzの座標をスクリーン座標で設定すればOKです。
たぶんこれでいけるはずです。
315ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(149,931ポイント)
Date: 2010/09/17(金) 20:49
No:61955
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
計算方法は違えど、シエルさんの方がよさそうですね。
(スプライト描画としては適切な値ですし)
表示されない原因をチェックしたいのですが、今現在そんなに手を掛けられない状況になってしまってるので、
誠に申し訳ありませんがシエルさんにバトンタッチします。
105ポイント を落としてしまった。
|
|
|
|
|
Name: kon ..入門者(2,612ポイント)
Date: 2010/09/18(土) 10:47
No:61966
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、御津凪さんお返事ありがとうございます。
シエさんに教えていただいた方法でやってみたのですが、やはりだめでした・・・。
カメラの位置と方向を設定用のm_viewは3Dの時と同じものを使っていますが、2D用は別に宣言して使った方が良いのでしょうか?
ワールドマトリックス・正射影行列は2D用に宣言して使っています。
89ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(2,691ポイント)
Date: 2010/09/18(土) 11:54
No:61968
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、お返事ありがとうございます。
ビュー行列をはずしてみましたが、相変わらずダメでした。
一度シエルさんに、ソースコード(Scene.cpp)をお渡した方が良いでしょうか?
79ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(2,714ポイント)
Date: 2010/09/18(土) 12:18
No:61970
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、お返事ありがとうございます。
ソースコードを添付いたしました。
23ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(77,873ポイント)
Date: 2010/09/18(土) 12:35
No:61971
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
ソース確認しました。
まず、スピードメータ用の頂点バッファの頂点が設定されてないと思いますので、
(-0.5,0.5)(0.5,0.5)(-0.5,-0.5)(0.5,-0.5)の頂点で設定して下さい。
テクスチャ座標も忘れずに。
で、各行列の設定ですが、上にも書いているように、
ワールド行列は
D3DXMatrixIdentity(&world)で単位行列を作ったあと、
そのメンバの_11と_22にそれぞれ横の長さと縦の長さを入れます。
もし、指定の位置に移動したければ、
_41,42,43のxyz座標にスクリーン座標でそれぞれ値を設定して下さい。
その後、SetTransformでワールド行列として設定
ビュー行列は
D3DXMatrixIdentityで単位行列を作って、
そのままSetTransformでビュー行列として設定して下さい。
正射影行列は
D3DXMatrixIdentity(&proj)で単位行列を作ったあと、
_11に2/ウィンドウ横幅、_22に2/ウィンドウの縦幅を設定します。
その後、SetTransformで射影行列として設定
この方法の場合、画面の中央が(0,0,0)になります。
直接行列に値を代入してるので、D3DXMatrixTranslationやD3DXMatrixOrthoLH関数は使いません。
これでいけるはずです。
426ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(2,836ポイント)
Date: 2010/09/18(土) 14:42
No:61974
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさんお返事ありがとうございます。
D3DXMatrixTranslation( &mMove, 1.0f, 1.0f, 0.0f)、D3DXMatrixIdentity(&m_view)をコメントアウトすると描画されました。
ただ、ロボットを回転させるとテクスチャも一緒に回してしまいます。また、ロボットを移動したり回転するとテクスチャが少し震動しています。
なお、拡大縮小をD3DXMatrixScaling( &mScale,( 1.0 / CLIENT_WIDTH), (-1.0 / CLIENT_HEIGHT), 1.0f) にしましまた。
122ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(2,863ポイント)
Date: 2010/09/18(土) 15:04
No:61976
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、お返事ありがとうございます。
ソースコードを添付しておきます。
27ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(78,627ポイント)
Date: 2010/09/18(土) 15:22
No:61977
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
下記のコードでやってみてもらえますか?
//****************スピードメータの画面作成***************
// ワールドマトリックスの設定(/ 何もしないマトリックスの生成)
D3DXMatrixIdentity(&m_world2);
//画像を200×200の大きさで(100.100)の場所に移動。
m_world2._11=200.0f;
m_world2._22=200.0f;
m_world2._41=100.0f;
m_world2._42=100.0f;
// マトリックスをレンダリングパイプラインにセット
pD3DDevice->SetTransform(D3DTS_WORLD, &m_world2);
//D3DXMatrixIdentity(&m_view);
// マトリックスをレンダリングパイプラインに設定
pD3DDevice->SetTransform(D3DTS_VIEW, &m_view);
//正射影行列
D3DXMatrixIdentity(&m_proj2);
m_proj2._11=2.0f/CLIENT_WIDTH;
m_proj2._22=2.0f/CLIENT_HEIGHT;
pD3DDevice->SetTransform(D3DTS_PROJECTION, &m_proj2);
2倍のポイントを手に入れた! 516ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(2,927ポイント)
Date: 2010/09/18(土) 15:39
No:61978
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、お返事ありがとうございます。
初期状態では、テクスチャは表示されずロボットを回転させたりするとテクスチャの端が表示されました。
64ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(2,995ポイント)
Date: 2010/09/18(土) 16:23
No:61981
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさんお返事ありがとうございます。
D3DXMatrixIdentity(&m_view); のコメントアウトを外したら無事に描画されました。
68ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(3,053ポイント)
Date: 2010/09/18(土) 17:18
No:61984
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさんのおかげで、無事にテクスチャを描画することができました。ありがとうございます。
あとは、スピードメータ本体をどうやって描画するかですね。
58ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(3,108ポイント)
Date: 2010/09/18(土) 22:15
No:62012
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、お返事ありがとうございます。
スピードメータのメモリの部分を描画した画像(針のないメータの画像)をテクスチャに貼り付け、貼り付けた画像の上に針(細長い四角形)を描画しようと考えています。
ただ、針の位置を移動させるにはsinやcosなどの三角関数が必要になると思います。
私は、あまり数学が得意でないので、針の位置決めにつてい悩んでる状態です。
55ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(78,871ポイント)
Date: 2010/09/18(土) 22:20
No:62013
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
あ〜あの針が動く感じの描画の仕方ってことですね。
たぶん少し中心を下にずらしてZ軸を中心に回転させればよさそうですが、
アルゴリズム的にはすぐに思いつきそうにありません^^;
どなたか分かるかたフォローお願い致します。
106ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(3,262ポイント)
Date: 2010/09/20(月) 12:31
No:62117
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、お返事ありがとうございます。
針の動きの描画の件に関しては、相変わらす解決していないです・・・。
なので、ひとまず速度を数字で表示しようと思い、ID3DXFontを使って文字描画を試してみましたが上手く表示されませんでした。
今回は、四角形を描画するだけのプログラムに The DirectXと表示させるプログラムを作成しました。
154ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(3,291ポイント)
Date: 2010/09/22(水) 18:56
No:62226
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、お返事ありがとうございます。
一度、ID3DXSpriteの方法を試してみたいと思います。
29ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(80,555ポイント)
Date: 2010/09/24(金) 21:26
No:62297
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
動画確認しました。
つまり、針の始端(ていうのかな?)を中心にして描画したいってことですよね?
うーんこれはちょっと自信がないんですが、まず最初に針の始端(ていうのかな?)部分に中心が
いくように、移動行列を作ります。
その後、回転行列をかけて、回転すればうまくいくと思うのですがどうでしょうか?
ちょっと自信がないので、御津凪さんや他のDirectXに詳しい方から回答をもらったほうがいいかもしれません。
119ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(150,201ポイント)
Date: 2010/09/25(土) 01:45
No:62299
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
戻ってきました。
回転するときは、描画する頂点の中心(ゼロ位置)を軸に回転する為、
今回の場合は一度頂点の中心へ向かわせる移動行列を追加する必要があり、計算順序を次のように組み直す必要があります。
1.ゼロ位置に回転の中心位置を移動させる
2.回転させる
3.元の位置を移動させる(1.の逆)
4.拡大縮小させる
5.移動させる
ちなみに、このような処理を一括して行う D3DXMatrixTransformation 関数があります。
今回の場合だと、
D3DXMATRIX out; // 計算結果行列
D3DXVECTOR3 rotateTrans; // 回転の中心を示す座標
D3DXVECTOR3 scale; // スケーリングベクトル
D3DXQUATERNION rotate; // 回転ベクトル
D3DXVECTOR3 trans; // 移動ベクトル
// 上記値を代入...
D3DXMatrixTransformation( &out, NULL, NULL, &scale, &rotateTrans, &rotate, &trans );
で、そのままワールド行列にセットすれば多分出来上がると思います。
270ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(3,944ポイント)
Date: 2010/09/25(土) 17:38
No:62320
|
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
御津凪さん、お返事ありがとうございました。
御津凪さんのおかげでなんとかスピードメータらしい動きが完成しました。
動作画面をまたアップしました。
http://www.youtube.com/watch?v=BNc5E5rvjmc
下記にスピードメータの針を動かすコードを記載しておきます。
//*************:スピードメータの針を描画******************
hari_scale.x = 1.0;
hari_scale.y = 1.0;
hari_scale.z = 1.0;
hari_trans.x = 320.0f;
hari_trans.y =-200.0f;
hari_trans.z = 0.0f;
// 回転の中心を示す座標
hari_rotateTrans.x = 25.0f; //回転軸を右に25移動
hari_rotateTrans.y = 0.0f;
hari_rotateTrans.z = 0.0f;
//針の回転量を設定
D3DXMatrixRotationZ(&mRoat2,D3DXToRadian(hari_rad));
D3DXQuaternionRotationMatrix(&hari_rotate, &mRoat2);//回転行列からクォータニオンを作成
D3DXMatrixTransformation( &m_world2, NULL, NULL,
&hari_scale, &hari_rotateTrans, &hari_rotate, &hari_trans );
// マトリックスをレンダリングパイプラインにセット
pD3DDevice->SetTransform(D3DTS_WORLD, &m_world2);
472ポイント を手に入れた。
|
|
|
|
|
Name: kon ..入門者(4,018ポイント)
Date: 2010/09/25(土) 17:45
No:62322
| 解決!
|
Title: Re:スピードメータのようなものを描画したいと思います
|
|
シエルさん、御津凪さんに色々と助けていただいたおかげでスピードメータらしい動きを完成することができました。ありがとうございます。
また何か困ったことがあったら書き込みするかもしれないので、その時はお願いします。
74ポイント を手に入れた。
|
|
|
|
Name: しろ ..初心者(7,686ポイント)
Date: 2010/09/19(日) 10:07
No:62034
|
|
Title: 二次元配列の動的確保について
|
|
こんにちは。いつもお世話になります。早速ではありますが、「ポインタの極意」(柴田望洋)のP268にある以下のプログラムをご覧ください。
------------------
#include <stdio.h>
#include <stdlib.h>
int main(void){
int df;
int height;
int (*p)[3];
scanf("%d",&height);
p=(int (*)[3])calloc(height*3,sizeof(int));
if(p==NULL)
printf("失敗\n");
else{
int i,j;
for(i=0;i<height;i++)
for(j=0;j<3;j++)
p[i][j]=0;
for(i=0;i<height;i++)
for(j=0;j<3;j++)
printf("p[%d][%d]=%d\n",i,j,p[i][j]);
free(p);
}
return 0;
}
------
のピープ領域を確保するp=(int (*)[3])calloc(height*3,sizeof(int))の部分の引数を
p=(int (*)[3])calloc(height*3,sizeof(*p))
p=(int (*)[3])calloc(height,sizeof(int (*)[3]))
と変更したとき、上は問題ないのですが、下についてはpを解放する時点でエラーが発生します(確保する時点では問題なく動作します)。確保している領域は変わらないと思うのですが、なにがまずいのか、教えていただけると助かります。よろしくお願いいたします。
356ポイント を手に入れた。
|
|
|
|
Name: しろ ..初心者(7,805ポイント)
Date: 2010/09/19(日) 10:53
No:62037
|
|
Title: Re:二次元配列の動的確保について
|
|
すいません。よくよく考えてみたら
p=(int (*)[3])calloc(height,sizeof(int (*)[3])) というのは
p=(int (*)[3])calloc(height,sizeof(p))
と同じになってしまうので、駄目ですよね。一応この解釈で正しいか、教えていただけると助かります。 よろしくお願いいたします。
119ポイント を手に入れた。
|
|
|
|
|
Name: うしお ..入門者(3,096ポイント)
Date: 2010/09/22(水) 19:29
No:62228
|
|
Title: Re:二次元配列の動的確保について
|
|
ちょっと趣旨とずれていたらすみません
二次元配列の動的確保が、xとy両方を動的に確保するのでしたら、
#include <stdlib.h>
#include <stdio.h>
int main(){
int *pArray2D = 0;
int Width = 5;
int Height = 10;
int x = 0;
int y = 0;
pArray2D = (int*)malloc(sizeof(int) * Width * Height);
for(y = 0 ; y < Height ; ++y)
{
for(x = 0 ; x < Width ; ++x)
{
//アクセス
pArray2D[y*Width + x] = y*Width + x;//ためしにインデックスを代入してみる
printf("%d,",pArray2D[y*Width + x]);
}
printf("\n");
}
free(pArray2D);
return 0;
}
このようなシンプルな形になる気がするのですが、どうでしょう?
217ポイント を手に入れた。
|
|
|
|
|
Name: うしお ..入門者(3,239ポイント)
Date: 2010/09/22(水) 20:13
No:62229
|
|
Title: Re:二次元配列の動的確保について
|
|
追加ですが、
int (*p)[3];
は、
int *p;の配列なので、
p[0] = (int*)calloc(height,sizeof(int));
p[1] = (int*)calloc(height,sizeof(int));
p[2] = (int*)calloc(height,sizeof(int));
このようにしたかったのではないか?と思いました

143ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..中級者(9,853ポイント)
Date: 2010/09/22(水) 21:29
No:62232
|
|
Title: Re:二次元配列の動的確保について
|
|
>int (*p)[3];
>は、
>int *p;の配列なので、
これは間違い。
>int (*p)[3];
は、「pは要素数3の配列へのポインタ」と読みます。
>int *p;の配列なので、
要素がポインタである配列は、例えば
int *p[3]
のように書きます。
()のあるなしで、「配列へのポインタ」と「ポインタの配列」となり、
意味が全然違います。
130ポイント を手に入れた。
|
|
|
|
|
Name: うしお ..入門者(3,314ポイント)
Date: 2010/09/22(水) 22:07
No:62236
|
|
Title: Re:二次元配列の動的確保について
|
|
>>初級者さん(これ名前であってますよね?
>int (*p)[3];
>は、「pは要素数3の配列へのポインタ」と読みます。
あ、そうだったんですね!勘違いしていました、ありがとうございました。
int Array[3];
int (*p)[3] = &Array;
こういうことでしたか!
勉強になりました
75ポイント を手に入れた。
|
|
|
|
|
Name: しろ ..初心者(7,890ポイント)
Date: 2010/09/24(金) 09:06
No:62290
|
|
Title: Re:二次元配列の動的確保について
|
|
お返事が遅くなりまして申し訳ありません。
>うしお様
本論とはそれてしまうのですが、
int *pArray2D = 0;
というのはOKなのでしょうか?
それとも0はint型の0ではなく、(void *)0あるいは(int *)0と同一視していいということでしょうか?
85ポイント を手に入れた。
|
|
|
|
|
Name: しろ ..初心者(7,926ポイント)
Date: 2010/09/25(土) 17:43
No:62321
| 解決!
|
Title: Re:二次元配列の動的確保について
|
|
なるほど、そうでしたか。
とりあえず掲題の件については、解決したので「解決」とさせていただきます。
皆様どうもありがとうございました。
36ポイント を手に入れた。
|
|
|
|
Name: DecentLove ..上級者(22,652ポイント)
Date: 2010/09/25(土) 11:51
No:62305
|
|
Title: 再定義
|
|
龍神録プログラミングで学習中です
typedef structで構造体を定義し。
定義したヘッダファイルをインクルードしたヘッダで、
ch_t ch;としたのですが、実行しようとすると、再定義されています。
などとエラーが出てコンパイルできません。
原因としては、何が考えられるでしょうか。
<struct.h>
typedef struct{
double x;
略
int shot_cnt;
}ch_t;
<define.h>
//フィールドの広さ
#define FIELD_MAX_X 500
#define FIELD_MAX_Y 560
//フィールド左上座標
#define FIELD_X 40
#define FIELD_Y 40
//パッド最大数
#define PAD_MAX 16
#include "struct.h"
<GV.h>
#include "DxLib.h"
#include "define.h"
#include "math.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
#include "function.h"
//構造体の宣言
GLOBAL ch_t ch; //キャラの各種データ
401ポイント を手に入れた。
|
|
|
|
Name: あ〜る ..プログラマー(29,292ポイント)
Date: 2010/09/25(土) 12:00
No:62306
|
|
Title: Re:再定義
|
|
書いてあるまんま、どこかでもう定義してあるとかじゃないでしょうか?
検索機能などでchを検索したりしみたらあったりしません?
もし違うなら僕にはわかりませんすいません、
48ポイント を手に入れた。
|
|
|
|
|
Name: DecentLove ..上級者(24,528ポイント)
Date: 2010/09/25(土) 12:56
No:62309
|
|
Title: Re:再定義
|
|
1>c:\users\\documents\visual studio 2008\projects\first\struct.h(16) : warning C4094: タグのない 'struct' がシンボルなしで宣言されています。
1>c:\users\\documents\visual studio 2008\projects\first\gv.h(14) : error C2146: 構文エラー : ';' が、識別子 'ch' の前に必要です。
1>c:\users\\documents\visual studio 2008\projects\first\gv.h(14) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\\documents\visual studio 2008\projects\first\gv.h(14) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\\documents\visual studio 2008\projects\first\gv.h(14) : error C3872: '0x3000': この文字を識別子で使用することはできません
1>c:\users\\documents\visual studio 2008\projects\first\gv.h(15) : error C2144: 構文エラー : 'int' は ';' によって先行されなければなりません。
1>c:\users\\documents\visual studio 2008\projects\first\gv.h(15) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\\documents\visual studio 2008\projects\first\gv.h(15) : error C2146: 構文エラー : ';' が、識別子 'configpad' の前に必要です。
1>c:\users\\documents\visual studio 2008\projects\first\gv.h(15) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\\documents\visual studio 2008\projects\first\gv.h(15) : error C2377: 'configpad_t' : 再定義されています。typedef は他のどのシンボルでもオーバーロードできません
1> c:\users\chihiro\documents\visual studio 2008\projects\first\struct.h(27) : 'configpad_t' の宣言を確認してください。
1>c:\users\\documents\visual studio 2008\projects\first\gv.h(15) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(4) : error C2228: '.cnt' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(5) : error C2228: '.graph_i' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(5) : error C2228: '.cnt' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(15) : error C2228: '.left' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(15) : error C2228: '.right' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(16) : error C2228: '.down' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(16) : error C2228: '.up' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(30) : error C2228: '.x' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(30) : error C2228: '.y' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(32) : error C2228: '.slow' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(37) : error C2228: '.x' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
1>c:\users\\documents\visual studio 2008\projects\first\char.cpp(37) : error C2228: '.y' の左側はクラス、構造体、共用体でなければなりません
1> 型は 'int' です。
こんな感じです。
1,844ポイント を手に入れた。
|
|
|
|
|
Name: fatens ..上級者(19,597ポイント)
Date: 2010/09/25(土) 13:21
No:62310
|
|
Title: Re:再定義
|
|
とりあえず、function.hの最後に ; を付け忘れていないか確かめてください。
また、GV.hに全角スペースが含まれている可能性があるので、あれば消してください。
71ポイント を手に入れた。
|
|
|
|
Name: ぬるぽ ..中級者(10,130ポイント)
Date: 2010/09/25(土) 09:52
No:62301
|
|
Title: ウインドウモード時に他のウインドウを操作しても、ゲーム進行が止まらないようにする方法
|
|
DXライブラリより
ウインドウモード時でゲームを起動中に
他のウインドウをクリック、例えば立ち上げたIEを
マウスでクリックすると、ゲームの進行が止まりますよね?(音楽は流れ続ける)
止まらないようにする関数みたいなものってないのでしょうか?
ご存知の方がいましたら教えてください。
96ポイント を手に入れた。
|
|
|
|
Name: ookami ..熟練のプログラマー(53,121ポイント)
Date: 2010/09/25(土) 10:25
No:62302
|
|
Title: Re:ウインドウモード時に他のウインドウを操作しても、ゲーム進行が止まらないようにする方法
|
|
たぶん
> SetAlwaysRunFlag, ウインドウがアクティブではない状態でも処理を続行するか、フラグ をセットする
ですかね?
12ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..熟練のプログラマー(41,066ポイント)
Date: 2010/09/25(土) 10:43
No:62303
|
|
Title: Re:ウインドウモード時に他のウインドウを操作しても、ゲーム進行が止まらないようにする方法
|
|
SetAlwaysRunFlag() 関数に TRUE を渡して呼び出します。
31ポイント を手に入れた。
|
|
|
|
|
Name: ぬるぽ ..中級者(10,085ポイント)
Date: 2010/09/25(土) 10:44
No:62304
| 解決!
|
Title: Re:ウインドウモード時に他のウインドウを操作しても、ゲーム進行が止まらないようにする方法
|
|
>ookamiさん
おお、その通りでした!
こんなところに隠れた関数があったのですね。
助かりました。ありがとうございます。
■追記
>へろりさん
同じく、教えてくださりありがとうございました! 
45ポイント を落としてしまった。
|
|
|
|
Name: Laevateinn_495 ..ぴよぴよ(81ポイント)
Date: 2010/09/14(火) 16:33
No:61702
|
|
Title: 龍神録で風神録の一面背景
|
|
龍神録で風神録の一面背景みたいなものを作ろうとしています
ベースは50章です
再現ができないのですが、アレは別のグラフィックを重ねているのでしょうか?
できればやり方を教えていただけないでしょうか
レベルは初心者でリプレイ機能がやっとできるようになった程度です
できればわかりやすくお願いします
81ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,276,606ポイント)
Date: 2010/09/15(水) 08:04
No:61772
|
|
Title: Re:龍神録で風神録の一面背景
|
|
d7のサンプルでよければd7のサンプルを背景に仕込めば良いのではないでしょうか^^;
d7のままではダメなのですか?
具体的に何で困っているか教えて頂けると幸いです。
地面だけであれば、龍神録のプログラムの背景画像を差し替えたら良いだけだと思いますし、
レイヤーを付けて立体的に見せたいなら、地面の画像を2つ用意して、流れる速さを変えれば良いと思います。
(雲など上にくる画像は半透明だったり透けない部分は画像の一部だったりする必要があります)
サンプルのように川の表現をしたりするには少し工夫が必要だと思いますが、まんま川でいいのであれば、
上記サンプルのプログラムをそのまま使って頂ければと思います。
299ポイント を落としてしまった。
|
|
|
|
|
Name: Laevateinn_495 ..ぴよぴよ(126ポイント)
Date: 2010/09/19(日) 19:36
No:62066
|
|
Title: Re:龍神録で風神録の一面背景
|
|
遅くなりましたすいません(あまり時間がないもので...)
妖精大戦争の「魔法の森」(の背景)見たいなものをを作ろうかと思って
風神録に似たステージ(1面)があったので、まねてみたかったのです
d7のサンプルを取り込んでみましたが、スクロールの方法がわからないので...
113ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,279,403ポイント)
Date: 2010/09/19(日) 21:03
No:62070
|
|
Title: Re:龍神録で風神録の一面背景
|
|
魔法の森の背景と龍神録の背景は違うと思うのですが、どちらが良いのでしょう?
魔法の森の背景は3Dなので、3Dで計算する必要があります。
龍神録の背景をスクロールするだけなら、描画している物を全て
y++するなどすればよいと思います。
一枚絵をスクロールする時は、境目をループさせて2枚描画する必要があります。
そのまま背景の画像を y++ させてしまうと下が余って、上が切れてしまうので、背景画像の高さ分もう一枚上に背景を描画する必要があります。
もし背景画像の高さが480であるとすれば
DrawGraph( 0, y, ImageHandle, TRUE );
DrawGraph( 0, y-480, ImageHandle, TRUE );
こんな感じです。ただ魔法の森のように立体的には見えないでしょう。
279ポイント を手に入れた。
|
|
|
|
|
Name: Laevateinn_495 ..ぴよぴよ(191ポイント)
Date: 2010/09/20(月) 02:36
No:62099
|
|
Title: Re:龍神録で風神録の一面背景
|
|
魔法の森とは違うんですか...
魔法の森のほうがきれいですが、自分のレベルで作れませんね...
3Dの方はあんまりいじったことがなくて...
やるなら60章からの「Ini3Dbackground();」と「Main3Dbackground();」ですかね?
65ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,279,687ポイント)
Date: 2010/09/20(月) 03:39
No:62100
|
|
Title: Re:龍神録で風神録の一面背景
|
|
確かに龍神録より魔法の森の方がきれいですね。ちゃんとした3Dではないので、しょうがないと思います。
3Dの解説は、57章から書いていますので、もしご覧になる場合は、そちらからどうぞ。
館の方の目次をご覧になればおわかり頂けると思います。
ただ、あの解説はDXライブラリが3D対応ではなかったころのものです。
現在はちゃんと3D用の関数がありますから、昔の非公開関数を使って無理やり作ったようなコードは使わない方がいいと思います。
一枚の画像をスクロールさせる方法なら解りますか?
背景をスクロールだけで作るならそのままで良いと思いますが、もし3Dを学ばれるのであれば、プロジェクトを別にして
1から3D関数をリファレンスをみながら一つ一つコンパイルしてみると良いと思います。
284ポイント を手に入れた。
|
|
|
|
|
Name: Laevateinn_495 ..ぴよぴよ(335ポイント)
Date: 2010/09/20(月) 04:09
No:62104
|
|
Title: Re:龍神録で風神録の一面背景
|
|
こんな時間に返信すいません
今はちゃんと3D用の変数があるのですか!(3D系をいじってないので知りませんでした)
スクロールは「graph_back00();」の場合「count」の部分ですよね?(たぶんですけど)
ステージが進むごとに増えていって、その数値を「DrawGraphFd」の「int yd」に入れて
スクロールする
ということでしょうか?
144ポイント を手に入れた。
|
|
|
|
Name: yuno ..ぴよぴよ(55ポイント)
Date: 2010/09/23(木) 13:31
No:62243
|
|
Title: 音声のピッチ変更
|
|
ご無沙汰してます
いま、音声のピッチ変更を必要とするプログラムを組んでいるのですが
DXライブラリ には、音声関係はもともと簡易なものしかなく
WEBで検索してみてもなかなか方法が分かりません……
少々難しくなってもよろしいので
誰かご教授願います
以下は制作環境です
OS:Windows XP
ソフト:VS 2005 C++
ライブラリ:DXライブラリ
55ポイント を手に入れた。
|
|
|
|
Name: やっくん ..プログラマー(35,967ポイント)
Date: 2010/09/23(木) 14:37
No:62244
|
|
Title: Re:音声のピッチ変更
|
|
ピッチ変更とは周波数を変化するってことでしょうか?
音声に詳しくないのでわかりませんが、以下のような関数を用いるのはどうでしょう?
的外れでしたら申し訳ないです(^^;
【DXライブラリより】
// メモリに読み込んだWAVEデータの再生周波数を設定する
int SetFrequencySoundMem( int FrequencyPal, int SoundHandle ) ;
// メモリに読み込んだWAVEデータの再生周波数を取得する
int GetFrequencySoundMem( int SoundHandle ) ; 
186ポイント を手に入れた。
|
|
|
|
|
Name: Yuno ..入門者(4,333ポイント)
Date: 2010/09/23(木) 15:27
No:62247
|
|
Title: Re:音声のピッチ変更
|
|
確かにそれでもできることはできますが
再生速度を変えずに…ということなので苦戦しています
流れとしては
音声ファイルのピッチ変更
↓
長さに合わせて伸縮
↓
それぞれのファイルをつなげる
VOCALOIDとかUTAUみたいなやつですね
それの会話版を作ろうとしてるんですが……
あ、それと名前ひさしぶりなので間違えてました(T_T)
yunoではなくYunoでした
すみません
184ポイント を手に入れた。
|
|
|
|
|
Name: やっくん ..プログラマー(35,934ポイント)
Date: 2010/09/23(木) 16:08
No:62253
|
|
Title: Re:音声のピッチ変更
|
|
申し訳ありません;
前に音声データをテキスト形式で少し弄ったくらいしかの知識しかないので誰かにバトンタッチします。
33ポイント を落としてしまった。
|
|
|
|
|
Name: あたっしゅ [URL] ..かけだし(1,591ポイント)
Date: 2010/09/23(木) 16:22
No:62255
|
|
Title: Re:音声のピッチ変更
|
|
再生周波数を変えただけだと、低くしたときは再生時間が長くに、速くした時は再生時間がみじかくなる。
たぶん、それでは、不満なのだろう。
そこで、「高速フーリエ変換(Fast Fourier Transform, FFT)」とその逆変換。
「FFT ソース」で検索すれば、いっぱい、FFT のソース・ファイルが公開されているのが出てくる。
具体的に、どう使うかは、わたしにはわからないので、ほかの人に聞いて。
# レスをオフ書きしているうちに、話が進んでいるが、そのまま、書き込む。
154ポイント を手に入れた。
|
|
|
|
|
Name: 438番 ..ぴよぴよ(879ポイント)
Date: 2010/09/24(金) 23:33
No:62298
|
|
Title: Re:音声のピッチ変更
|
|
なんだか荒れてますね
質問を見る限りやりたいことはサンプリングなどの信号処理なのではないでしょうか
もしそうならDXライブラリは使わなくても出来ると思います
信号処理ならFFTの他にもDFT(離散フーリエ変換)やDCT(離散コサイン変換)
等も一緒に勉強した方が判りやすい気もします
>使い方いまいちわからないです
いきなりC言語のソースを見ても難しいですよ
まずは元の数式の方を見て理解するのが一番早いですが
これについては数学の知識が必要です
最低限三角関数・微分・積分の知識が必要になります
物理で波動やスペクトルを習ったことがあればまだ親しみやすいかもしれません
数学のレベルとしては数V程度では話にならないほど難しいかと思います
もし数学がわからないというなら
三角関数、微分・積分、オイラーの公式、フーリエ級数、ラプラス方程式、フーリエ変換
このあたりから勉強すると良いかと
ボーかロイドなどは"素片接続法"や"HMM合成法"などで検索すれば詳しいサイトが出てくると思いますよ
(この方法で合成していると聞いたことがあります、うろ覚えですみません
また、ここで書くには非常にしんどいので検索していただいたほうが効率がよいと思います)
361ポイント を手に入れた。
|
|
|
|
Name: dic ..ハッカー(100,242ポイント)
Date: 2010/09/24(金) 18:27
No:62292
|
|
Title: Sleepしてない?
|
|
また、原因がよくわからないエラーが出たので相談させてください
現在メインループでSleep関数でFPS制御とCPUを使わないようにしているのですが
Sleep関数がうまく動作してないのかCPUの使用状況が非常に多く
また処理自体も非常に遅くて原因がわかりません
Sleepが失敗しているなら高速で動作するはずなのですが、高速で動作せず
Sleepが成功しているならCPUの使用状況もほとんどしようされないのですが
どちらでもなく原因がわからない状況です
メインループはいたってシンプルで
DEF_DXDRAW->Clear();
gUI.Draw();
DEF_CGAME->Draw();
DEF_CGAME->Move();
DEF_MESSAGE->Draw();
DEF_MESSAGE->Move();
DEF_GAMEMODULE->Draw();
DEF_DXDRAW->Flip( hwndApp );
Sleep( 16 );
と最後にSleep関数を呼んでFPS制御とCPU効率を図っているのです
もちろん厳密には60FPSになりませんが
上に書いたようにSleepが成功してもなく失敗してもなく
どこが問題かけんとうがつかない状態です
各処理も今までほとんど時間がかからず、一瞬で終わるのですが
なぜかここ最近期待しているスピードで処理されないです
何か推測できるエラーなどないでしょうか?
316ポイント を手に入れた。
|
|
|
|
Name: dic ..ハッカー(100,657ポイント)
Date: 2010/09/24(金) 19:16
No:62295
| 解決!
|
Title: Re:Sleepしてない?
|
|
DWORD dw[10];
DWORD s, e;
memset( dw, 0, sizeof(dw) );
s = GetTickCount();
DEF_DXDRAW->Clear();
e = GetTickCount();
dw[0] += e - s;
s = GetTickCount();
gUI.Draw();
e = GetTickCount();
dw[1] += e - s;
s = GetTickCount();
DEF_CGAME->Draw();
e = GetTickCount();
dw[2] += e - s;
s = GetTickCount();
DEF_CGAME->Move();
e = GetTickCount();
dw[3] += e - s;
s = GetTickCount();
DEF_MESSAGE->Draw();
e = GetTickCount();
dw[4] += e - s;
s = GetTickCount();
DEF_MESSAGE->Move();
e = GetTickCount();
dw[5] += e - s;
s = GetTickCount();
DEF_GAMEMODULE->Draw();
e = GetTickCount();
dw[6] += e - s;
s = GetTickCount();
DEF_DXDRAW->Flip( hwndApp );
e = GetTickCount();
dw[7] += e - s;
s = GetTickCount();
Sleep( 16 );
e = GetTickCount();
dw[8] += e - s;
}
}
// メインループ終了
FILE *file = fopen( "time.txt", "w" );
int i;
for( i=0; i<10; i++ )
{
char mes[80];
sprintf( mes, "%2d:%d\n", i, dw[i] );
fputs( mes, file );
}
fclose( file );
[time.txt]
0:0
1:0
2:0
3:0
4:2019
5:0
6:891
7:0
8:11153
9:0
と計測コードを埋め込んだところ 6番目 DEF_GAMEMODULE->Draw() が異常に時間がかかっていたことが
分かりました
HDCにアクセスするのが多いところなので、ここを改善するといつものような速度で動作するようになりました
ありがとうございました 解決にします
//=======[編集]======================
改善後のテキストを載せてました
改善前は下のようになります
[time.txt]
0:0
1:0
2:0
3:0
4:0
5:0
6:37612
7:0
8:1358
9:0

401ポイント を手に入れた。
|
|
|
|
Name: polpol ..入門者(4,098ポイント)
Date: 2010/09/22(水) 02:36
No:62209
|
|
Title: 龍神録で音を鳴らす処理を別ファイルに
|
|
龍神録の13章→http://dixq.net/rp/13.htmlで
音を鳴らす処理を別ファイルに記述しようとしたのですが
うまくいきません。
mainファイルにはmusic_play();と記述し
main2ファイルには以下のように記述しました
#include "DxLib.h"
#define SE_MAX 100
extern int se_flag[SE_MAX];
extern int sound_se[SE_MAX];
void music_play(){
int i;
for(i=0;i<SE_MAX;i++){
if(se_flag[i]==1)
PlaySoundMem(sound_se[i],DX_PLAYTYPE_BACK);
}
}
これで実行すればmymain2.obj : error LNK2005: "void __cdecl music_play(void)" (?music_play@@YAXXZ) は既に mymain.obj で定義されています。
というエラーが出てしまいます。
初歩的な質問ですがよろしくお願いします。。。。
192ポイント を手に入れた。
|
|
|
|
Name: polpol ..入門者(4,139ポイント)
Date: 2010/09/22(水) 12:49
No:62216
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
>シエルさん
extern void music_play();をmainファイルの宣言部分や処理部分に書いても
同じエラーが出ました。
41ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..上級者(21,037ポイント)
Date: 2010/09/22(水) 20:46
No:62230
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
書いたプロジェクト全体か、その現象が再現する最低限のプロジェクトを添付して貰えれば分かりそうな気がしますね。
32ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(577,631ポイント)
Date: 2010/09/22(水) 23:24
No:62238
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
>mymain2.obj : error LNK2005: "void __cdecl music_play(void)" (?music_play@@YAXXZ) は既に mymain.obj で定義されています。
mymain.cppと mymain2.cppの両方に同じ関数名の music_play関数が存在しているのが原因です。
同じ内容の関数であれば、どちらか一方を削除して下さい。
100ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..入門者(4,842ポイント)
Date: 2010/09/23(木) 00:53
No:62239
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
>書いたプロジェクト全体か、その現象が再現する最低限のプロジェクトを添付して貰えれば
コード全体は長すぎて書けないんですが、弾を発射時に音が鳴る処理は一部ですが
以下のように書きました
//敵のショット音を読み込む
sound_se[0]=LoadSoundMem("../dat/se/enemy_shot.wav");
for(i=0;i<SHOT_MAX;i++){//弾幕データ計算
if(shot[i].flag!=0 && 0<=shot[i].knd && shot[i].knd<SHOT_KND_MAX){
shot_bullet[shot[i].knd](i);//.kndの弾幕計算関数を呼ぶ関数ポインタ
shot_calc(i);//i番目の弾幕を計算
shot[i].cnt++;
}
if(shot[i].flag>0){//弾幕データがオンなら
for(j=0;j<SHOT_BULLET_MAX;j++){//その弾幕が持つ弾の最大数分ループ
if(shot[i].bullet2[j].flag!=0){//弾データがオンなら
DrawRotaGraphF(
shot[i].bullet2[j].x, shot[i].bullet2[j].y,
1.0, shot[i].bullet2[j].angle+PI/2,
img_bullet[shot[i].bullet2[j].knd][shot[i].bullet2[j].col],TRUE);
}
}}}
music_play();
music_ini();
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
ちなみにkansuteigi.hという別ファイルもincludeしておりそこに
#include "DxLib.h"
#define SE_MAX 100
extern int se_flag[SE_MAX];
extern int sound_se[SE_MAX];
void music_play(){
int i;
for(i=0;i<SE_MAX;i++){
if(se_flag[i]==1)
PlaySoundMem(sound_se[i],DX_PLAYTYPE_BACK);
}
}
を書くと正常に音が鳴るのでコードの処理部分には問題ないと思うのですが・・・
703ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(80,277ポイント)
Date: 2010/09/23(木) 04:52
No:62240
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
main2ファイルとkansuteigi.hに同じ関数名を定義してるってことですか?
もしそうなら、名前から判断してkansuteigi.hにextern void music_play();と宣言だけ書いて、
定義はmain2ファイルに書いたほうが良さそうです。
ただ状況があまり良く分からないことや、今後のことを考えて
ファイル分割を学んでから、一度作り直すことをお勧めします。
90ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..初心者(5,075ポイント)
Date: 2010/09/23(木) 15:28
No:62248
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
>main2ファイルとkansuteigi.hに同じ関数名を定義してるってことですか?
いえ、kansuteigi.hに上記のコードを書いた時はmain2には何も書いてない空白
の状態です。
新しくmain3.main4...とファイルを作ってそこに上記のコードを書いても
(?music_play@@YAXXZ) は既に mymain.obj で定義されています。と同じエラーが出ます、
すでに定義されていますと言ってるので上記のコードを書かずに実行してみると正常にデバックが起動して音も鳴りました。(音を鳴らす処理はどこにも書かれていないのに・・・)
何度も確認しましたがmainファイルでダブってる所は無いハズなんですが・・・
233ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..初心者(5,138ポイント)
Date: 2010/09/23(木) 15:56
No:62251
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
>mymain.cppのなかに定義されているはずです。
うーん・・・やはり見つかりませんでした(ーー;)
バグ的なもので再インストールしたほうがいいのでしょうか・・・
63ポイント を手に入れた。
|
|
|
|
|
Name: DVDM [URL] ..熟練のプログラマー(60,870ポイント)
Date: 2010/09/23(木) 16:05
No:62252
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
>>polpolさん
直ることは少ないですが、私は困った時はとりあえずリビルドを行うようにしています。
一度試してみては如何でしょうか。
どうしても直らないのなら、プロジェクト一式アップして頂けると解決されやすいと思います。
80ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..初心者(5,199ポイント)
Date: 2010/09/23(木) 16:31
No:62258
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
やはりリビルドしても同じようなエラーが出るようです。
>プロジェクト一式アップをアップできる
そうですね。可能ならソースを見て頂きたいです
いいアップロダを教えてもらっていいでしょうか
61ポイント を手に入れた。
|
|
|
|
|
Name: シエル [URL] ..比類無きプログラマー(80,372ポイント)
Date: 2010/09/23(木) 21:03
No:62270
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
ちょっと見ましたが、全体の構成がぐちゃぐちゃです。
cppファイルをインクルードしてたり、なぜかmain関数があったり、
ヘッダファイルに関数の定義を書いていたり、とりあえず色々問題がありすぎて指摘しきれません。
一度ファイル分割について、勉強しなおすべきだと思います。
もしくは、龍神録のプロジェクトファイルをダウンロードして、
それを参考にして作り直すことをお勧めします。
冷たい回答しかできなくてすいません。よろしくお願いします。
2倍のポイントを手に入れた! 18ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..初心者(5,322ポイント)
Date: 2010/09/23(木) 21:55
No:62273
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
>Justyさん
そうですね。同じく(?music_play@@YAXXZ) は既に mymain.obj で定義されています。
というエラーが出ます
56ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(577,844ポイント)
Date: 2010/09/23(木) 22:12
No:62276
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
話がかみ合っていないようですが、アップロードされていた zip内にある Debug/BuildLog.htmをみるかぎり、
ビルドに成功しています。
試しにこちらでビルドもしてみましたが、やはりビルドは成功します。
つまりこちらからそのエラーを確認することができていません。
何をしたらエラーが出るのですか?
2倍のポイントを手に入れた! 176ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..上級者(24,125ポイント)
Date: 2010/09/23(木) 22:21
No:62280
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
#include "kansuteigi.h"
というのは、ここにkansuteigi.hファイルの中身を差し込むという意味です。
kansuteigi.hにmusic_play関数を定義するコードがありますから、それをインクルードしているmymain.cppで定義しているということになります。
76ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..初心者(5,575ポイント)
Date: 2010/09/23(木) 23:13
No:62283
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
>何をしたらエラーが出るのですか?
kansuteigi.hの最後に記述してある
#include "DxLib.h"
#define SE_MAX 100
extern int se_flag[SE_MAX];
extern int sound_se[SE_MAX];
void music_play(){
int i;
for(i=0;i<SE_MAX;i++){
if(se_flag[i]==1)
PlaySoundMem(sound_se[i],DX_PLAYTYPE_BACK);
}
}
をコピーして→消去→コピーした上のコードをmymain2.cppに貼り付けるとエラーが出ます。
1でも書いてるとうり結局はmymain2.cppにこのコードを貼り付けてエラーが出ないように
するのが目的です
253ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(578,074ポイント)
Date: 2010/09/23(木) 23:32
No:62284
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
理解しました。
原因は mymain.cppで mymain2.cppをインクルードしているので mymain.cpp側で関数が定義されます。
同時に mymain2.cpp自身もプロジェクトに含まれているのでビルドされます。
そうすると、2つのソースコードで同じ関数が含まれることになり、リンク時にエラーになります。
通常、cppファイルで別の cppファイルをインクルードすることはないので、該当するインクルード行を
削除するか mymain2.cppをプロジェクトから外して下さい。
230ポイント を手に入れた。
|
|
|
|
|
Name: polpol ..初心者(5,705ポイント)
Date: 2010/09/23(木) 23:58
No:62285
|
|
Title: Re:龍神録で音を鳴らす処理を別ファイルに
|
|
なるほど。cppファイルをインクルードするのが原因ですか。
よく見るとISLeさんもシエルさんも同じような事書いてますね
勉強になりました
コードが多くなってきたので始めからファイル分割について勉強してみます。
とりあえず解決しました。ありがとうございます
130ポイント を手に入れた。
|
|
|
|
Name: まさ ..初心者(6,928ポイント)
Date: 2010/09/20(月) 16:53
No:62135
|
|
Title: 音がでない
|
|
最近サイトを知り、製作をさせていただいております。
質問ですが、サウンドファイルをメモリに読み込み、再生させたいんですが、音が出ません。
サンプルのコードをコピペして、ファイル名だけ変えてやっても出ませんでした。
考えられる原因はなんでしょうか?
よろしくお願いします。
146ポイント を手に入れた。
|
|
|
|
Name: fatens ..上級者(19,372ポイント)
Date: 2010/09/20(月) 17:05
No:62136
|
|
Title: Re:音がでない
|
|
>サンプルのコードをコピペして、ファイル名だけ変えてやっても出ませんでした。
どのサンプルですか?
>考えられる原因はなんでしょうか?
ファイルは正常に読み込めていますか?
83ポイント を手に入れた。
|
|
|
|
|
Name: まさ ..初心者(6,962ポイント)
Date: 2010/09/23(木) 22:53
No:62282
| 解決!
|
Title: Re:音がでない
|
|
すいません!!
ファイル名が間違ってました!!
くだらない質問でごめんなさい!!
34ポイント を手に入れた。
|
|
|
|
Name: DecentLove ..上級者(22,113ポイント)
Date: 2010/09/23(木) 21:55
No:62272
|
|
Title: いろいろと不具合
|
|
龍神録プログラミングを参考にし、てシューティングを作ろうと思い自分なりに組立て始めたのですが、いきなりつまづいてしまいました。
添付したファイルを見ていただければわかるのですが、
struct.hで構造体を宣言し、GV.hで ch_t ch; としています。
その後、load.cppで
void load(){
LoadDivGraph("jiki.png",16,8,2,32,32,ch.img);
tama.img = LoadGraph("tama.png");
tamaf.img = LoadGraph("ftama.png");
}
その後、function.hにて GLOBAL void load(); として、main.cppでも使えるようにします。
と、ロードを行いとりあえずここまででコンパイルして実行してみるのですが、30個ほどエラーが出て実行できません。
上記でどこかおかしいところなどございましたでしょうか?
詳しいこは添付したファイルを見ていただけばわかります。
どなたかお願いします。
246ポイント を手に入れた。
|
|
|
|
Name: ISLe ..上級者(24,049ポイント)
Date: 2010/09/23(木) 22:08
No:62275
|
|
Title: Re:いろいろと不具合
|
|
> struct.hで構造体を宣言し、GV.hで ch_t ch; としています。
struct.hをインクルードしている箇所がどこにも無いみたいですけど。
25ポイント を手に入れた。
|
|
|
|
Name: SI ..ぴよぴよ(601ポイント)
Date: 2010/09/23(木) 17:42
No:62263
|
|
Title: for文とscanfを使って点数を表示したい
|
|
このプログラムで点数をscanfを使って入力して表示したいです。
そこでfor文をつかってすべて入力したらループを抜けて終了というやりかたでやりたいです。
なのでこの↓の数字をscanfで入力したいわけです。
{73,59,92},
{52,95,70},
{22,19,31}
#include <stdio.h>
#define NINZU 3
#define KAMOKU 3
void main(void)
{
char kamoku[KAMOKU][10]={"国語","数学","英語"};
char name[NINZU][10]={"太郎","次郎","三郎"};
int score[NINZU][KAMOKU]={
{73,59,92},
{52,95,70},
{22,19,31}
};
int total[NINZU];
double ave[NINZU];
char lank[NINZU];
int i,j;
よろしくお願いします。 
562ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(219,065ポイント)
Date: 2010/09/23(木) 17:59
No:62264
|
|
Title: Re:for文とscanfを使って点数を表示したい
|
|
よろしくお願いしますといわれても…
何が分からないのか質問文から全く読み取れないです。
エラーが出て解消方法が分からない?
forループの使用方法?
scanfの使用方法?
もう少し具体的に質問してください。
67ポイント を手に入れた。
|
|
|
|
|
Name: SI ..ぴよぴよ(752ポイント)
Date: 2010/09/23(木) 18:15
No:62265
|
|
Title: Re:for文とscanfを使って点数を表示したい
|
|
for文のループ方法とscanfの使用方法です。
3人の3科目の得点を入力したいのですが、どうすればいいのでしょうか。
下のようにやると太郎君の3科目の得点は表示されるのですが、あと2人の表示方法が思いつきません。
あと"太郎君の国語の点数は"と表示させて次に"数学の点数は"で最後に"英語の点数は"とやるにはどうすればいいんでしょうか。
下のやり方だと全部が国語の点数になります。
for(i=0;i<3;i++)
{
printf("太郎君の国語の点数は");
scanf("%d",&score[0][i]);
}
初心者なので馬鹿な質問かもしれませんがお願いします。
151ポイント を手に入れた。
|
|
|
|
|
Name: パコネコ ..熟練のプログラマー(44,777ポイント)
Date: 2010/09/23(木) 18:58
No:62267
|
|
Title: Re:for文とscanfを使って点数を表示したい
|
|
char buff[100];
for(a=0;a<NINZU;a++)
for(b=0;b<KAMOKU;b++)
{
sprintf(buff,"%s君の%sの点数は",name[a],kamoku[b]);
printf("%s",buff);
scanf("%d",&score[a][b]);
}
こんな感じですか?
===========
すいません
考えてみたら
printf("%s君の%sの点数は",name[a],kamoku[b]);
でいいですね。

103ポイント を手に入れた。
|
|
|
|
|
Name: SI ..ぴよぴよ(766ポイント)
Date: 2010/09/23(木) 19:14
No:62268
| 解決!
|
Title: Re:for文とscanfを使って点数を表示したい
|
|
ありがとうございます。
解決しました。
14ポイント を手に入れた。
|
|
|
|
Name: DecentLove ..上級者(21,811ポイント)
Date: 2010/09/23(木) 14:58
No:62245
|
|
Title: 弾の発射について
|
|
今、ゲームプログラミングの館にて、キャラの移動と弾の発射を参考にして、自機の位置から2段階の速度の弾を発射するプログラムを書いてみました。
shotが普通の弾を打ち出すもので、
fastshotが速い弾を打ち出すものです。
普通の弾の方はしっかり描画されるのですが、速い方はなぜか描画がされません。
速い方の処理は、iの所をfに変えています。
ちなみに、自機の画像は、通常弾と同じものを使用しています。
自機の構造体などに関わる部分は省略して表記させていただきます。
#include "DxLib.h"
struct shot{
int x,y;
int flag;
};
struct fastshot{
int x,y;
int flag;
};
int WINAPI WinMain 〜略〜
int image,i,counter=0; //counter=発射してからのカウントをする変数。
int fimage,f,fcounter = 0;
char Key[256];
struct shot tama[10]; //tamaを10個作る。
struct fastshot ftama[5];
for(i=0;i<10;i++){ //初期化処理
tama[i].x=640/2; tama[i].y=480; //座標代入
tama[i].flag=0; //飛んでいない事を示すフラグ=0
}
SetDrawScreen( DX_SCREEN_BACK ) ;//描画先を裏画面に設定
image = LoadGraph( "tama.png") ;//画像を分割してimage配列に保存
ch.img = LoadGraph ("tama.png");
fimage = LoadGraph("ftama.png");
while(1){
ClearDrawScreen(); //裏画面のデータを全て削除
GetHitKeyStateAll( Key ) ; // すべてのキーの状態を得る
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
〜略〜
ch.walking_flag=0; //歩かないフラグを立てる
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //上向きならch.y座標を減らす
〜略〜
else if(ch.muki==3) //右向きならch.x座標を増やす
ch.x+=5;
}
if( ProcessMessage() == -1 ) break ; //異常がおきたら終了
if(counter<5) //前にエンターを押してから5カウント未満なら
counter++; //カウントアップ
else if( Key[ KEY_INPUT_RETURN ] == 1 ){//5カウント以上たっていたら
counter=0; //カウンターを戻す
for(i=0;i<10;i++){
if(tama[i].flag==0){ //発射していない玉を探し、
tama[i].flag=1; //発射フラグを立てる
tama[i].x = ch.x ;
tama[i].y = ch.y ;
break;
}
}
}
for(i=0;i<10;i++){
if(tama[i].flag==1){ //発射している玉なら
tama[i].y-=4; //座標を8減らす
DrawGraph( tama[i].x , tama[i].y , image , TRUE );//玉を描画
if(tama[i].y < -32){ //もし画面外まで来たら
tama[i].y=480; //初期値に戻し、
tama[i].flag=0; //発射フラグを戻す
}
}
}
if(fcounter<5) //前にエンターを押してから5カウント未満なら
fcounter++; //カウントアップ
else if( Key[ KEY_INPUT_A ] == 1 ){//5カウント以上たっていたら
fcounter=0; //カウンターを戻す
for(f=0;f<5;f++){
if(ftama[f].flag==0){ //発射していない玉を探し、
ftama[f].flag=1; //発射フラグを立てる
ftama[f].x = ch.x ;
ftama[f].y = ch.y ;
break;
}
}
}
for(f=0;f<5;f++){
if(ftama[f].flag==1){ //発射している玉なら
ftama[f].y-=8; //座標を8減らす
DrawGraph( ftama[f].x , ftama[f].y , fimage , TRUE );//玉を描画
if(ftama[f].y < -32){ //もし画面外まで来たら
ftama[f].y=480; //初期値に戻し、
ftama[f].flag=0; //発射フラグを戻す
}
}
}
if( Key[ KEY_INPUT_ESCAPE ] == 1 ) break;//Escボタンが押されたらブレイク
ScreenFlip() ;//裏画面データを表画面へ反映
}
DxLib_End() ;// DXライブラリ使用の終了処理
return 0 ;// ソフトの終了
}
ここがおかしいのでは?などと思い当たる方おられましたらご指摘をお願いします。
1,807ポイント を手に入れた。
|
|
|
Name: DecentLove ..上級者(18,311ポイント)
Date: 2010/09/16(木) 21:55
No:61886
|
|
Title: コンパイル時のエラー
|
|
最近時間ができたので、再びプログラミング勉強を再開しました。
そして、コンパイルしようとすると、
1> : fatal error C1033: プログラム データベース '' を開けません。
というエラーが出てきて先へ進めません。
龍神録のデータを持ってきてコンパイルしてみたのですが、その場合もエラーが出て動きません。
解決策、原因、知っている方はいらっしゃいませんか?
環境は
Win7 32bit
VisualC++ 2008及び 2010
です。
どっちでやってもこのエラーが出てしまいます。
195ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(157,268ポイント)
Date: 2010/09/16(木) 23:55
No:61902
|
|
Title: Re:コンパイル時のエラー
|
|
> そして、コンパイルしようとすると、
> 1> : fatal error C1033: プログラム データベース '' を開けません。
> というエラーが出てきて先へ進めません。
どんなソースコードをコンパイルしようとしたときですか?
> 龍神録のデータを持ってきてコンパイルしてみたのですが、その場合もエラーが出て動きません。
上のと同じエラーですか?
38ポイント を手に入れた。
|
|
|
|
|
Name: DecentLove ..上級者(18,667ポイント)
Date: 2010/09/17(金) 07:06
No:61906
|
|
Title: Re:コンパイル時のエラー
|
|
ええ。すべて同じエラーです。
ソースコードは
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( DxLib_Init() == -1 ) return -1;
WaitKey() ;
DxLib_End() ;
return 0 ;
}
一番最初に使う、ソースコードです。
2倍のポイントを手に入れた! 356ポイント を手に入れた。
|
|
|
|
|
Name: DecentLove ..上級者(18,784ポイント)
Date: 2010/09/17(金) 15:46
No:61935
|
|
Title: Re:コンパイル時のエラー
|
|
naohiro19さん
toyoさん。
URLありがとうございます。今後の参考にさせていただきます。
今、とりあえず何もせずにコンパイルしてみたら、なぜかとおりました。
原因は結局不明のままですが、解決とさせていただきます。
ありがとうございました。
追記、
何故か再びエラーが出るようになってしまいました 
117ポイント を手に入れた。
|
|
|
|
|
Name: fatens ..上級者(19,213ポイント)
Date: 2010/09/18(土) 22:47
No:62015
|
|
Title: Re:コンパイル時のエラー
|
|
>特に気にせず使用してきました。
>変ですかね?
DXライブラリを使用するにはWin32プロジェクトにしないとダメです。
なかなか解決しないようですが、VC++ 2008の再インストールは試されましたか?
64ポイント を手に入れた。
|
|
|
|
|
Name: DecentLove ..上級者(19,278ポイント)
Date: 2010/09/18(土) 22:50
No:62016
|
|
Title: Re:コンパイル時のエラー
|
|
>なかなか解決しないようですが、VC++ 2008の再インストールは試されましたか?
ええ、やってみました。
VC++2010でも同様のエラーで、同様に再インストールしました。いまは、2010の方はアンインストールしましたが、依然として2008はエラーが起こる状態です。
110ポイント を手に入れた。
|
|
|
|
|
Name: DecentLove ..上級者(19,635ポイント)
Date: 2010/09/18(土) 23:02
No:62018
|
|
Title: Re:コンパイル時のエラー
|
|
なんだかよくわかりませんが、例のエラーは消えました。
そのかわり…
1>------ ビルド開始: プロジェクト: ko, 構成: Debug Win32 ------
1>コンパイルしています...
1>ko.cpp
1>マニフェストをリソースにコンパイルしています...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>リンクしています...
1>LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
1>C:\Users\\Documents\Visual Studio 2008\Projects\ko\Debug\ko.exe : fatal error LNK1120: 外部参照 1 が未解決です。
1>ビルドログは "file://c:\Users\\Documents\Visual Studio 2008\Projects\ko\Debug\BuildLog.htm" に保存されました。
1>ko - エラー 2、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
こんなエラーになってしまいました…
357ポイント を手に入れた。
|
|
|
|
|
Name: DecentLove ..上級者(19,789ポイント)
Date: 2010/09/19(日) 13:19
No:62041
|
|
Title: Re:コンパイル時のエラー
|
|
win32プロジェクトのコンソールアプリケーションで作成してみました。
int main();
とだけ書いて実行したときには
1>------ ビルド開始: プロジェクト: okok, 構成: Debug Win32 ------
1>リンクしています...
1>LIBCMTD.lib(crt0.obj) : error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。
1>C:\Users\\Documents\Visual Studio 2008\Projects\okok\Debug\okok.exe : fatal error LNK1120: 外部参照 1 が未解決です。
1>ビルドログは "file://c:\Users\\Documents\Visual Studio 2008\Projects\okok\Debug\BuildLog.htm" に保存されました。
1>okok - エラー 2、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
というエラーが、
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
と書いた場合は、なにやら長いエラーが。(添付画像に描かれているので、ご参照ください。)
ぐぐってみましたが、いまいちよくわかりませんでした。
追記
すみません。LoadGraphScreenをいれていたのが、長いエラーの原因だったようです。気にしないでください。
LoadGraphScreenを消した場合は、 今までどおりのC1033のエラーです。 
82ポイント を手に入れた。
|
|
|
|
|
Name: fatens ..上級者(19,289ポイント)
Date: 2010/09/19(日) 13:36
No:62043
|
|
Title: Re:コンパイル時のエラー
|
|
>win32プロジェクトのコンソールアプリケーションで作成してみました。
再度書きますが、
DXライブラリを使用するにはWin32 プロジェクトにしないとダメです。
76ポイント を手に入れた。
|
|
|
|
|
Name: DecentLove ..上級者(19,894ポイント)
Date: 2010/09/19(日) 13:48
No:62046
|
|
Title: Re:コンパイル時のエラー
|
|
>再度書きますが、
>DXライブラリを使用するにはWin32 プロジェクトにしないとダメです。
なんだか、勘違いしていたようです。
DXライブラリのサイトの使い方に沿ってもう一度やり直してみましたが、
> : fatal error C1033: プログラム データベース '' を開けません。
やはりこのエラーがでたままです。
他のエラーは無くなりました。
105ポイント を手に入れた。
|
|
|
|
|
Name: 五反田 ..かけだし(1,085ポイント)
Date: 2010/09/19(日) 21:27
No:62072
|
|
Title: Re:コンパイル時のエラー
|
|
こんばんは。
見当はずれのことを言っているかもしれませんが、2つ提案?が。
・プロジェクトを置く場所を出来るだけ浅い階層にするとどうなりますか?(出来ればドライブ直下で)
その際、フォルダの名前がアルファベットだけで構成されるようにしてみてください。
・もう一つは、ディスクチェックをかけてみてください。
Microsoftのページを見ると、disk error と書かれていたので、どこか調子が悪いのではないかと思いました。
よければ試してみてください。
最初のほうで貼られたURLに似たようなことが書いてあるみたいです。
52ポイント を手に入れた。
|
|
|
|
|