C言語何でも質問掲示板

Total hit  今日  昨日  



必ずお読み下さい → 規約と注意事項  アンケートはこちら  エラーで投稿できない方はこちら  過去ログ検索はこちら

 
   ジャンプ   
     ・[38157] 研修生 
   関数が呼びだされない ....   
     ・[37841] kazuoni 
     ・[37848] アトラス 
     ・[37849] Justy 
     ・[37927] アトラス 
     ・[37931] Justy 
     ・[37962] アトラス 
     ・[37964] Justy 
     ・[38149] アトラス 
     ・[38151] ねこ 
     ・[38156] アトラス 
   DXライブラリ   
     ・[38145] ねこ 
     ・[38152] 研修生 
   違うタイプの敵を動か ....   
     ・[37940] Justy 
     ・[38144] クロウ 
   angle-PI/2*0.8+PI*0. ....   
     ・[38129] たいちう 
     ・[38131] taiyaki 
     ・[38133] taiyaki 
     ・[38134] ねこ 
     ・[38135] taiyaki 
     ・[38136] sizuma 
     ・[38141] conio 
     ・[38142] sizuma 
   パーフェクトフリ-ズに ....   
     ・[38117] box 
     ・[38118] ベース 
     ・[38120] MNS 
   angle-PI/2*0.8+PI*0. ....   
     ・[38111] ねこ 
     ・[38115] taiyaki 
   VC.netでの質問   
     ・[38113] pooka 
     ・[38114] 餅 
   DXライブラリを使用し ....   
     ・[38106] Justy 
     ・[38107] kb98 
     ・[38108] Justy 
     ・[38109] kb98 
   問題のあるポインタの ....   
     ・[38102] pooka 
     ・[38103] box 
     ・[38104] 初心者 
   ifstream や FileRea ....   
     ・[38094] Justy 
     ・[38095] Ma 
     ・[38096] ねこ 
     ・[38097] Ma 
     ・[38098] Ma 
     ・[38099] MNS 
     ・[38100] Ma 
   コンパイルについて   
     ・[38059] たかぎ 
     ・[38061] sizuma 
     ・[38062] box 
     ・[38064] lbfuvab 
     ・[38090] イカ 
     ・[38091] non 
     ・[38092] イカ 
   PI*2について   
     ・[38081] たいちう 
     ・[38083] taiyaki 
     ・[38085] たいちう 
     ・[38086] たかぎ 
     ・[38087] takoyaki 
     ・[38088] たいちう 
     ・[38089] takoyaki 
   ぷよぷよもどきゲーム   
     ・[38084] 774 
   龍神録の館 キャラを ....   
     ・[38077] pooka 
     ・[38079] shikabane 
   ゲームプログラミング ....   
   無題   
     ・[38053] taiyaki 
     ・[38054] taiyaki 
     ・[38072] taiyajki 
     ・[38073] Justy 
     ・[38074] taiyaki 
     ・[38075] taiyaki 
   キャラクターが移動し ....   
     ・[38065] sizuma 
     ・[38066] ひっさん 
     ・[38067] sizuma 
     ・[38068] ひっさん 
     ・[38069] DVDM 
     ・[38070] ひっさん 
     ・[38071] ひっさん 
   なぜか敵が動かない。   
     ・[38027] Justy 
     ・[38040] situmon 
     ・[38060] situmon 
   差し合い弾幕シューテ ....   
     ・[38051] バグ 
     ・[38055] Kou 
     ・[38056] Q 
     ・[38057] sizuma 
   SelectD3DDeviceについ ....   
     ・[38050] taiyaki 
   2D格ゲーを作ろうと ....   
     ・[37858] situmon 
     ・[37860] ひよこ 
     ・[37861] バグ 
     ・[37862] スペ 
     ・[37863] スペ 
     ・[37865] kazuoni 
     ・[37866] 夢夢 
     ・[37873] スペ 
     ・[37883] TKOZ 
     ・[37884] kazuoni 
     ・[37887] sizuma 
     ・[37905] スペ 
     ・[37906] kazuoni 
     ・[37910] TKOZ 
     ・[37911] TKOZ 
     ・[37915] Kou 
     ・[37929] スペ 
     ・[37932] Kou 
     ・[37933] スペ 
     ・[37934] situmon 
     ・[37937] Kou 
     ・[37941] スペ 
     ・[37942] sizuma 
     ・[37943] sizuma 
     ・[37965] スペ 
     ・[37966] conio 
     ・[37986] スペ 
     ・[37988] TKOZ 
     ・[37992] conio 
     ・[37994] スペ 
     ・[37998] conio 
     ・[37999] conio 
     ・[38029] スペ 
     ・[38042] conio 
     ・[38046] スペ 
     ・[38047] スペ 
   atan2関数のエラー抑制 ....   
     ・[38044] Justy 
     ・[38045] チルチル 
   配列を利用したC++のプ ....   
     ・[38034] kazuoni 
     ・[38038] conio 
     ・[38043] iyhakj 
   ファイルからデータの ....   
     ・[38005] Eda 
     ・[38007] pooka 
     ・[38022] non 
     ・[38024] pooka 
     ・[38039] Eda 
   YUV422形式のデータか ....   
     ・[37975] Justy 
     ・[37976] Justy 
     ・[38012] binoruto 
     ・[38015] Justy 
     ・[38032] binoruto 
     ・[38033] binoruto 
     ・[38035] Justy 
     ・[38036] binoruto 
     ・[38037] Justy 
   Windows 7 VC++   
     ・[38026] mac 
     ・[38028] YuO 
     ・[38030] mac 
   文字列   
     ・[37997] non 
     ・[38000] toyo 
     ・[38025] 勘太郎 
   コンストラクタでの例 ....   
     ・[38013] たかぎ 
     ・[38016] kazuoni 
     ・[38018] たかぎ 
     ・[38021] kazuoni 
   DXライブラリについて   
     ・[37990] fatens 
     ・[38001] いつき 
     ・[38002] fatens 
     ・[38003] いつき 
     ・[38006] fatens 
     ・[38014] いつき 
     ・[38017] fatens 
     ・[38019] いつき 
     ・[38020] いつき 
   60章を活用して天井を ....   
     ・[37984] Justy 
     ・[38011] @ 
   シューティングゲーム ....   
     ・[37766] 山崎 
     ・[37768] fatens 
     ・[37769] ラグ 
     ・[37770] r 
     ・[37771] ひよこ 
     ・[37772] すずめ 
     ・[37773] 山崎 
     ・[37775] チルチル 
     ・[37776] situmon 
     ・[37778] チルチル 
     ・[37779] situmon 
     ・[37780] チルチル 
     ・[37781] situmon 
     ・[37785] 山崎 
     ・[37787] チルチル 
     ・[37788] チルチル 
     ・[37789] ひよこ 
     ・[37791] クロウ 
     ・[37792] Tatu 
     ・[37825] situmon 
     ・[37847] クロウ 
     ・[37856] situmon 
     ・[37857] situmon 
     ・[37872] チルチル 
     ・[37913] situmon 
     ・[37916] チルチル 
     ・[38008] situmon 
   DXアーカイブ内からの ....   
     ・[37991] Ma 
     ・[37993] GPGA 
     ・[37995] GPGA 
     ・[37996] Ma 
   .net環境でTab送り   
     ・[37959] Justy 
     ・[37979] 初心者  
     ・[37981] バグ 
     ・[37982] 初心者 
     ・[37985] 初心者 
   C言語の課題[ピラミッ ....   
     ・[37980] sizuma 
   リソースファイルも一 ....   
     ・[37969] バグ 
     ・[37970] toyo 
     ・[37972] Justy 
     ・[37973] f 
   ゲームプログラミング ....   
     ・[37961] Dixq (管理人) 
     ・[37971] xyz 
   横スクロール   
     ・[37936] sizuma 
     ・[37946] デラ初心者 
     ・[37948] kazuoni 
     ・[37967] デラ初心者 
   サウンドノベルについ ....   
     ・[37882] クロウ 
     ・[37885] kazuoni 
     ・[37886] ペーシャン 
     ・[37920] ペーシャン 
     ・[37928] Kou 
     ・[37930] kazuoni 
     ・[37944] ペーシャン 
     ・[37947] kazuoni 
     ・[37949] Kou 
     ・[37950] sizuma 
     ・[37951] ペーシャン 
     ・[37952] Kou 
     ・[37954] Kou 
     ・[37955] kazuoni 
     ・[37956] クロウ 
     ・[37958] Kou 
     ・[37960] ペーシャン 
     ・[37963] conio 
   ゲームプログラミング ....   
     ・[37938] kazuoni 
     ・[37945] うさぎさん 
   2Dポリゴンに使う画 ....   
     ・[37917] チルチル 
     ・[37922] Justy 
     ・[37924] チルチル 
     ・[37925] ねこ 
     ・[37926] チルチル 
   無題   
     ・[37908] uwlover 
     ・[37912] non 
     ・[37918] uwlover 
     ・[37919] non 
     ・[37921] uwlover 
     ・[37923] non 
   擬似タスクの実装   
     ・[37748] GPGA 
     ・[37751] ねこ 
     ・[37753] GPGA 
     ・[37754] TRUTH 
     ・[37755] TRUTH 
     ・[37758] ねこ 
     ・[37762] GPGA 
     ・[37794] TRUTH 
     ・[37795] Justy 
     ・[37909] TRUTH 

Name: 研修生  ..中級者(12,534ポイント)   Date: 2009/08/17(月) 16:12   No:38154       
Title: ジャンプ    
ゲームプログラミングの館のジャンプの所のサンプルで

#include "DxLib.h"
#include <math.h>

#define g 9.8067
#define y_max 2.000

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; //DXライブラリ初期化 エラーが起きたら終了

int x=320,y=480,image[16],time1,time2,flag=0;
double t;
char Key[256];

SetDrawScreen( DX_SCREEN_BACK ) ;//描画先を裏画面に設定

LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存

while(1){
ClearDrawScreen();//裏画面のデータを全て削除
GetHitKeyStateAll( Key ) ; // すべてのキーの状態を得る
if( ProcessMessage() == -1 ) break ; //異常がおきたら終了

if( Key[ KEY_INPUT_RETURN ] == 1 ){ //エンターが押されたら
time1 = GetNowCount(); //time1にエンターが押された時の時間を格納
flag=1; //飛び上がりフラグを立てる。
}
if(flag==1){
time2 = GetNowCount() ; // 現在経過時間を得る
t = (double)(time2 - time1) / 1000.000; // ミリ秒を秒に変換して、エンターが押されてからの経過時間を計算
y = (int)((sqrt ( 2.000 * g * y_max) * t - 0.500 * g * t * t ) * 480.000 / y_max);//y座標を計算
if(y>=0) // 1回目に回って来たか、画面内にy座標がある時
DrawGraph( x , 480-y , image[8] , TRUE );//画像を描画
else
flag=0; // 画面外に来ると、飛び上がりフラグを戻す
}

if( Key[ KEY_INPUT_ESCAPE ] == 1 ) break; //Escボタンが押されたらブレイク

ScreenFlip() ; //裏画面データを表画面へ反映
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}


これが実行してもジャンプの画像が全くでてこないんですが、見たところずっとyの所がマイナスになっているようでして・・分かる人いませんか?



1,196ポイント を手に入れた。


Name: 研修生  ..中級者(12,547ポイント)   Date: 2009/08/17(月) 16:34   No:38157 解決!     
Title: Re:ジャンプ    
思いっきりミスしてました。自己解決しました。

13ポイント を手に入れた。



Name: アトラス  ..かけだし(1,122ポイント)   Date: 2009/08/06(木) 22:37   No:37840       
Title: 関数が呼びだされない&文字が突然消える    
またまた行き詰ってしまったので質問させていただきます。
1つ目は、debugでビルドするとうまく動くのに、releaseでビルドすると一部の関数が呼びだされなくなります。
--------------------------------------------------------------------------------------------------

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){



if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 || SetMainWindowText( "RPG" ) == -1 ) return -1; //ウィンドウ化と初期化処理

while(f_status != 2){

title();

if( f_status == 0 ){
map(0);

}
if( f_status == 1 ){
map(1);
}
}


DxLib_End();
return 0;
}

-----------------------------------------------------------------------------------------------
f_statusは大域変数です。
title()はタイトル画面で、map()はマップ画面です。
マップでのメニューで「終了」を選択するとmap()関数は終了する設定なのですが、なぜかtitle()は呼びだされず、
map(0)関数が呼びだされ続けます。(ループ1回目だけはtitle()は呼び出されます)
どうしてこうなるのかわからず、大変困ってます。



2つ目は、プログラムの実行中に、突然文字が消えることがあります。
--------------------------------------------------------------------------------------------

void window(int x1,int y1,int x2,int y2){
DrawBox(x1,y1,x2,y2,GetColor(50,50,50),TRUE);
DrawBox(x1,y1,x2,y2,GetColor(0,0,0),FALSE);
DrawBox(x1+1,y1+1,x2-1,y2-1,GetColor(255,255,255),FALSE);
}
void message(char *text){
int Key[256];
int font4=CreateFontToHandle("HGS明朝B",20,5,DX_FONTTYPE_ANTIALIASING_EDGE);
SetDrawScreen( DX_SCREEN_BACK );
while(!ProcessMessage() && GetHitKeyStateAll_2(Key)==0 && Key[ KEY_INPUT_Z ]!=1){
window(0,448,640,480);
DrawFormatStringToHandle(4,454,GetColor(255,255,255),font4,"%s",text);
ScreenFlip();
}

}

文字の描写は、まずDrawBoxでメッセージウィンドウをつくり、そこにDrawStringToHandleとDrawFormatStringToHandleを使って文字を表示させてます。
ですが、たまに文字が全部消えてしまうんです。ウィンドウはなぜか消えません。

どなたか回答よろしくおねがいします。


419ポイント を手に入れた。


Name: kazuoni [URL]  ..比類無きプログラマー(96,806ポイント)   Date: 2009/08/06(木) 22:49   No:37841     
Title: Re:関数が呼びだされない&文字が突然消える    
1は、関数の中身まで提示しないと、わかりかねるかと思います。

2では、その関数がどのように使用されているか提示することが必要かと思いますが・・・
message関数を毎ループよんでいるのだとしたら、
関数に入るたびに、フォントハンドルを作り続けているので、
そこが気になります。


96ポイント を手に入れた。

Name: アトラス  ..かけだし(1,807ポイント)   Date: 2009/08/07(金) 01:23   No:37848     
Title: Re:    
debugとreleaseの違いで起こるエラーなので補助関数の中身は関係ないだろうと思って書きませんでしたが
やはりまずかったみたいですね・・・すみません。
先ほど試しに下のようにmap()の直後にtitle()を追加するとうまくいきましたので、とりあえず自己解決しました。

--------------------------------------------------------------------------------------------

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){



if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 || SetMainWindowText( "RPG" ) == -1 ) return -1; //ウィンドウ化と初期化処理

while(f_status != 2){

title();

if( f_status == 0 ){
map(0);
title();
}
if( f_status == 1 ){
map(1);
title();
}
}


DxLib_End();
return 0;
}

-----------------------------------------------------------------------------------------------


2についてですが、やはり何度もフォントハンドルを作るのは処理が重くなりよくないみたいですね。
だいたい15回くらいmessage関数を呼びだすと文字がすべて消えます。
message()関数は、毎ループではないですが、バトル中に「敵にダメージを与えた」等のイベントが起きるたびに呼んでます。
最初は大域変数としてフォントハンドルを定義していたんですが、それだとメッセージが表示されなかったので
message関数内で定義しています。


685ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(400,516ポイント)   Date: 2009/08/07(金) 01:51   No:37849     
Title: Re:    

>下のようにmap()の直後にtitle()を追加するとうまくいきましたので、とりあえず自己解決しました。

 それは解決とはいえないと思います。
 何が原因かはソースがないのでわかりませんが、根本的に解決しないといつか
(プログラムがより複雑になった段階で)再発したりするとその原因調査・修正のコストは
今よりもっと高いものになります。

 本当にそれでいいのならいいのですが、時間の許す限りきちんと調べた方がいいかと思います。


 あとプログラムの構造も見直すことをお勧めします。
 message関数のようにただメッセージを出す為の関数に ProcessMessage()〜ScreenFlip()のループが
あるような現状の構造では(多分 titleや mapも同様なのでしょうか)そのうち無理が来る可能性が
高いです。


257ポイント を手に入れた。

Name: アトラス  ..かけだし(2,150ポイント)   Date: 2009/08/08(土) 17:11   No:37927     
Title: Re:    
アドバイスありがとうございます。
一応動いたからいいやと思ってましたが、やはりよくないですよね・・・。
map関数の中身を全部消したところ正常に動いてくれたのでやはりmap関数に問題があるみたいです。
あと一つ聞いておきたいことがあって、releaseビルドでは処理が「最適化」されると聞いたのですが、
具体的にはdebugビルドの時とどういう具合に処理が違うのでしょうか?
それが分かれば1については解決できそうな気がします。

ProcessMessage()〜ScreenFlip()についてですが、これは何回も書くのではなく、すべての処理が一通り終わった後1回で済ましたほうがいいということでしょうか。

今まではとりあえずおもいついたままプログラムを書いていってたので、一度全体的に整理してみようと思います。


343ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(401,605ポイント)   Date: 2009/08/08(土) 19:09   No:37931     
Title: Re:    

>具体的にはdebugビルドの時とどういう具合に処理が違うのでしょうか?

 環境やコンパイラによって内容が異なりますし、コンパイラオプションをどう設定したのか
によっても変わってくるので、なかなかひと口には説明しづらいんですが、
よくあるのが

・ 頻繁に使う変数の値を、メモリではなくレジスタに格納する
・ 使わないプログラムや意味のないプログラム、或いは変数を削除する
・ 分岐命令を減らす
・ 複雑な演算式を、同じ結果になるより単純な式で置換する
・ 同じ条件式を削除する
・ 内部的なデバッグ機能の削除

 というもので、実際には非常に多岐にわたっています。
(コンパイラの中にはとても貧弱な最適化性能しかないものもありますが……)

コンパイラ最適化 - Wikipedia
ttp://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E6%9C%80%E9%81%A9%E5%8C%96



>1については解決できそうな気がします

 大抵、未初期化変数や不定な動作となるコードがあったり、ポインタや配列の範囲外への
アクセスが原因であることが多いです。

 慣れないと、Releaseビルドでのデバッグは大変だと思いますが、頑張ってください。



>すべての処理が一通り終わった後1回で済ましたほうがいいということでしょうか

 きちんと設計されて、それが必要なものであれば複数あるのはかまわないのですが、
数が多くなればなるほど後でいろいろと不都合が出ることがあります。

 例えば一例を挙げると、何か全てに共通する処理をそこに追加で入れたい時とか、
何か修正する必要が出てきた時に、それを全ての箇所で行わなければなりません。
 手間ですし、修正が複雑だとミスも出てくるかもしれません。

 ProcessMessage()〜GetHitKeyStateAll()〜ClearDrawScreen()〜ScreenFlip()は
毎フレーム行うべき定型処理、といっても過言ではないものなので、
1カ所にまとまってた方がなにかと管理しやすと思います。


959ポイント を手に入れた。

Name: アトラス  ..かけだし(2,335ポイント)   Date: 2009/08/09(日) 23:26   No:37962     
Title: Re:    
一通りソースの整理してみると、今回はちゃんと動くようになりました。
どの部分がエラーの原因かは結局分からずじまいになってしまいましたが・・・。

2についてなんですが、ビルドログを見ると

フォントハンドル値が異常です

というメッセージが大量に出てました(汗
これはkazuoniさんのおっしゃるように、フォントハンドルを毎回作っているのが原因なのでしょうか?


185ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(401,442ポイント)   Date: 2009/08/10(月) 00:42   No:37964     
Title: Re:    

>これはkazuoniさんのおっしゃるように、フォントハンドルを毎回作っているのが原因なのでしょうか?

 その可能性はあります。
 
 そのメッセージは指定されたフォントハンドルが不正であることを示しています。

 現状作成できるフォントハンドルは 40個までですので、
ハンドルを解放せずに次から次へと新しいフォントハンドルを作り続ければ、
いつかは枯渇します。

 そうなるとフォントハンドルの生成には失敗しますが、それに気付かずに
フォントハンドルを使おうとするとそのメッセージが出ますので、可能性は高いです。


237ポイント を落としてしまった。

Name: アトラス  ..かけだし(2,472ポイント)   Date: 2009/08/17(月) 14:52   No:38149     
Title: Re:    
しばらく間があいてしまい申し訳ありません。

起動時にのみフォントハンドルを作るようソースを書きかえると正常に動いてくれました。
ありがとうございます。


今日もまた一つ質問があるのですが、プログラミングの館のセーブデータの作成、読み込みについて、

freadとfwriteの第2引数は"sizeof(save_data_t)"となってますが、
"sizeof(save_data)"としても問題は無いですか?
自分で試したところ誤作動は起きなかったのですが、気になるので聞いてみました。


137ポイント を手に入れた。

Name: ねこ  ..プログラマー(37,312ポイント)   Date: 2009/08/17(月) 15:29   No:38151     
Title: Re:    
「save_data_t」が構造体、「save_data」がその変数だと予測しますが、それなら問題無いです。
どちらも同じサイズになります。


53ポイント を手に入れた。

Name: アトラス  ..入門者(2,502ポイント)   Date: 2009/08/17(月) 16:30   No:38156 解決!     
Title: Re:    
そうなんですか!
回答ありがとうございました。


2倍のポイントを手に入れた! 30ポイント を手に入れた。



Name: 研修生  ..中級者(11,362ポイント)   Date: 2009/08/17(月) 10:36   No:38143       
Title: DXライブラリ    
ゲームプログラミングをやろうと思いゲームプログラミングの館からDxライブラリを入手したのですが
VC++2005 か VC++2008専用なのでしょうか?私のはVC++6.0なのです。Dxlib.dsp開いてコンパイルして実行
すると女の子の画像は出てくるんですけど点滅しています。他の画像も同様になります。
VC++6.0じゃちゃんとできないのでしょうか?


30ポイント を落としてしまった。


Name: ねこ  ..プログラマー(37,104ポイント)   Date: 2009/08/17(月) 11:51   No:38145     
Title: Re:DXライブラリ    
VC6で試した事は無いのですが、本家HPにはVC6での導入手順があります。
なので対応しているとは思いますが、ライブラリ更新の過程でVC6で不具合が発生した可能性もありますね。

またハードウェア的な要因の可能性もありますので、もし可能ならVC2005か2008で試し同様の不具合が起きないかをチェックするとVC6特有の問題なのか確認出来ると思います。
ハードウェアの問題になると本家HPの掲示板にて管理人さんに聞くしか無いと思います。


198ポイント を手に入れた。

Name: 研修生  ..中級者(11,338ポイント)   Date: 2009/08/17(月) 15:44   No:38152 解決!     
Title: Re:DXライブラリ    
ウィンドウモードなら点滅しないのでこっちで以降と思います。
ありがとうございました。


24ポイント を落としてしまった。



Name: クロウ  ..中級者(11,107ポイント)   Date: 2009/08/08(土) 21:31   No:37939       
Title: 違うタイプの敵を動かす    
おかげさまで、以前から作っていた逃げるマインスイーパもあとは仮となっている音の追加のみとなりました。

今現在、頼んでいる人から上がってくるのを待っているだけなのもなんなので、
新しいゲームを作ろうと「14歳から始めるC言語わくわくゲームプログラミング」を参考にアクションシューティングを作っています。

当たり判定関係は解決し、一応ゲームとして形にはなったのですが、
「違う種類の敵を同時に出現させる」ところで躓いてしまいました。

龍神録プログラミングの館の方も参考にしてみましたが、解決しませんでした。

ソース、データ等々はここに挙げてあります。↓
http://down11.ddo.jp/uploader/download/1249733552.zip/attatch
パスワードはcrowです。

mymain.cppの
void (*pf_initgamefunc)() = InitializeGame05;
void (*pf_drawenemyfunc)() = DrawEnemies05;
の関数ポインタでステージの処理を切り替えていて、enemy05.cppのDrawEnemies05関数で違うタイプの敵(enemy04.cppの処理とenemy05.cpp)を切り替えて動かす処理にしたいと思っていますが、龍神録プログラミングの館のようにswitchで切り替えても画像だけ変わっているが、最初の弱点と砲台と同じ座標に表示されて同じ動きをするという状態でした。

どうにかして、動かないで弾を吐く敵(enemy04.cpp)とパターンデータに従って動く敵(enemy05.cpp)を同じステージ内の処理(DrawEnemies05関数)で動かしたいのです。
ここ2,3日ずっとここで止まっているのでアドバイスをお願いします。





349ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(401,610ポイント)   Date: 2009/08/09(日) 02:22   No:37940     
Title: Re:違うタイプの敵を動かす    
 その本は読んだことがないですが。


>最初の弱点と砲台と同じ座標に表示されて同じ動きをするという状態

 んーと状況が良く飲み込めていないのですが、要するにポインタ関数を切り替えたら
一応異なる2つの関数を切り替えることは出来たけど、エネミーの位置が切り替える前の
座標で表示された、ということでしょうか?


 以下はそうである、と仮定したものです。違っていたら無視していください。

 そうであれば、なんとなくそれは当然なような気がします。
 エネミーの情報を格納している g_enemiesの Enemyクラスには敵の種類を表す
パラメータがありません。

 その為関数を DrawEnemies05->DrawEnemies04に切り替えた時、usedメンバが
TRUEでさえあれば、コールしている関数が処理するべき敵である、と認識してしまい、
DrawEnemies04で処理していた砲台の位置に DrawEnemies05の敵が現れたのでしょう。

 Enemyクラスに敵の種類のパラメータを追加し、各関数は特定の種類の敵しか
処理しないようにしておけば、ひとまず解決できるのではないでしょうか。


5ポイント を手に入れた。

Name: クロウ  ..中級者(11,494ポイント)   Date: 2009/08/17(月) 11:18   No:38144 解決!     
Title: Re:違うタイプの敵を動かす    
Enemy構造体を全ファイルで共通のものにしするように格闘した結果、うまくいきました。
ありがとうございました。


24ポイント を手に入れた。



Name: taiyaki  ..かけだし(1,803ポイント)   Date: 2009/08/16(日) 18:16   No:38123       
Title: angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)について2}    
angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180);についてで質問した者ですが、なぜ+rang(180)(0〜1度)する必要があるのでしょうか?

31ポイント を手に入れた。


Name: たいちう  ..プログラマー(33,337ポイント)   Date: 2009/08/16(日) 20:36   No:38129     
Title: Re:angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)について2}    
> なぜ+rang(180)(0〜1度)する必要があるのでしょうか?

rang(PI/180)を足さないで実行した場合と比べてください。
違いは分かりましたか?
目的は弾を揃えないためでしょう。

必ずしも必要な処理ではないですが、弾にゆらぎを与えたほうが良いと
作者が考えたためでしょう。元ネタのZUN氏の弾幕のセンスと、それを再現するための
Dixq氏の工夫です。

# 今後このような場合は、元のスレで質問を続けるのが宜しいかと。


2倍のポイントを手に入れた! 296ポイント を手に入れた。

Name: taiyaki  ..かけだし(1,844ポイント)   Date: 2009/08/16(日) 21:44   No:38131 解決!     
Title: Re:angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)について2}    
回答ありがとうございます。外すと確かに弾を揃えています。回答ありがとうございました。


41ポイント を手に入れた。

Name: taiyaki  ..かけだし(1,876ポイント)   Date: 2009/08/16(日) 22:54   No:38133     
Title: Re:angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)について2}    
新たな問題に詰まりました。angle-PI/2*0.8+PI*0.8/7*irang(PI/180)の+PI*0.8/7をやると、逆に+されてしますから逆に反対になるのではないでしょうか? なぜ反対にならないのでしょうか?

32ポイント を手に入れた。

Name: ねこ  ..プログラマー(36,906ポイント)   Date: 2009/08/16(日) 23:46   No:38134     
Title: Re:angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)について2}    
質問の意味が分かりません。やるって何ですか?
質問は正確に、意図を明確にお願いします。


34ポイント を手に入れた。

Name: taiyaki  ..かけだし(1,976ポイント)   Date: 2009/08/17(月) 00:13   No:38135     
Title: Re:angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)について2}    
失礼しました。なぜangle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)と入力すると+PI*0.8/7*iと思っている角度(iが1だとすると+20.571429)と逆の角度(-20.571429)になってしまうのでしょうか?例えばangleが180だとしてそこから72(PI/2*0.8)を引いて108から+20.571429を足して128.571429になると思うのですが、この計算は間違っているのでしょうか?

100ポイント を手に入れた。

Name: sizuma [URL]  ..中級者(13,464ポイント)   Date: 2009/08/17(月) 00:50   No:38136     
Title: Re:angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)について2}    
元ソースを読んでないし、いまいち質問も理解できてないんですが。
間違えてたらスルーしてください。

たぶん、angleが、敵か自分の向いてる方角なのでは?
自機だとすると、90度ですよね。
そこから7Wayショットを打つ間隔を考えると

38,58,79,100...(計算はテキトーな暗算です)

ですよね。


122ポイント を手に入れた。

Name: conio  ..プログラマー(38,862ポイント)   Date: 2009/08/17(月) 08:10   No:38141     
Title: Re:angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)について2}    
とりあえず、
angle = 180、PI = 180だとしたら下記の様になるんじゃないでしょうか。
(桁が多いところは、切り上げてます)
----------------------------------------------------------------------------
angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)

【i = 0】
= 180 - 180/2*0.8 + PI*0.8/7*0 + rang(PI/180)
= 180 - 72 + 0 + (-1 〜 1)
= 108 + (-1 〜 1)
= 107 〜 109

【i = 1】
= 180 - 180/2*0.8 + PI*0.8/7*1 + rang(PI/180)
= 180 - 72 + 20.5 + (-1 〜 1)
= 128.5 + (-1 〜 1)
= 127.5 〜 129.5

【i = 2】
= 180 - 180/2*0.8 + PI*0.8/7*2 + rang(PI/180)
= 180 - 72 + 41.1 + (-1 〜 1)
= 149.1 + (-1 〜 1)
= 148.1 〜 150.1

【i = 3】
= 180 - 180/2*0.8 + PI*0.8/7*3 + rang(PI/180)
= 180 - 72 + 61.7 + (-1 〜 1)
= 169.7 + (-1 〜 1)
= 168.7 〜 170.7

【i = 4】
= 180 - 180/2*0.8 + PI*0.8/7*4 + rang(PI/180)
= 180 - 72 + 82.2 + (-1 〜 1)
= 190.2 + (-1 〜 1)
= 189.2 〜 191.2

【i = 5】
= 180 - 180/2*0.8 + PI*0.8/7*5 + rang(PI/180)
= 180 - 72 + 102.8 + (-1 〜 1)
= 210.8 + (-1 〜 1)
= 209.8 〜 211.8

【i = 6】
= 180 - 180/2*0.8 + PI*0.8/7*6 + rang(PI/180)
= 180 - 72 + 123.4 + (-1 〜 1)
= 231.4 + (-1 〜 1)
= 230.4 〜 232.4
----------------------------------------------------------------------------

>>失礼しました。なぜangle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)と入力すると+PI*0.8/7*iと思っている角度(iが1だとすると+20.571429)と逆の角度(-20.571429)になってしまうのでしょうか?
>>例えばangleが180だとしてそこから72(PI/2*0.8)を引いて108〜

"逆になる"という表現が良く分からないのですが、

例えば真下(270°)に弾を3つ発射した場合、@ABの内の@の方向(270 - 72 = 約208)に
発射される理由が分からない、という事ですかね?
 @AB
/ | \

「何故270°よりも角度が小さい方向(-72°)へ発射されるのか?」と。

それを仮定として話を進めますが、それはi = 0の時にプラスされる角度が0になるからです。
なので、PI/2*0.8の値の分だけマイナスの角度に発射されます。


990ポイント を手に入れた。

Name: sizuma [URL]  ..中級者(13,503ポイント)   Date: 2009/08/17(月) 08:56   No:38142     
Title: Re:angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)について2}    
ん?前のスレをよんで7wayショットって書いたけど、僕が書いた角度だと6wayショット?
なぜかiが1から6までで計算してました。
140を7分割したら8wayになりますね。
(シューティングわからないんですが、これって8wayですよね^^;)

それとも別に6発弾を撃てば6wayショットで、7発撃てば7wayショットっていうんですかね?
ただ単に7分割したら7wayショットでしょうか・・・


39ポイント を手に入れた。



Name: ベース  ..ぴよぴよ(259ポイント)   Date: 2009/08/16(日) 16:41   No:38116       
Title: パーフェクトフリ-ズについて    
はじめて質問させていただきます。第28章のパーフェクトフリーズで
if(t==0 || t==210){
          //40<x<FMX-40  50<y<150 の範囲で100離れた位置に80カウントで移動する

          move_boss_pos(40,50,FMX-40,150,100, 80);

}

で1000カウントして移動させようとしているのですが、なぜか
if(210<t && t<270 && t%3==0){
        angle=bossatan2();

        for(i=0;i<8;i++){

            if((k=search_boss_shot())!=-1){

                boss_shot.bullet[k].col   = 0;

                boss_shot.bullet[k].x     = boss.x;

                boss_shot.bullet[k].y     = boss.y;

                boss_shot.bullet[k].knd   = 7;

                //自機とボスとの成す角を基準に8方向に発射する

                boss_shot.bullet[k].angle = angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180);

                boss_shot.bullet[k].flag  = 1;

                boss_shot.bullet[k].cnt   = 0;

                boss_shot.bullet[k].spd   = 3.0+rang(0.3);

                boss_shot.bullet[k].state = 2;

                boss_shot.bullet[k].kaiten= 1;

            }

}
を通ってしまい、移動しながら弾を打っているように見えます。
なぜなのでしょうか?


259ポイント を手に入れた。


Name: box  ..ハッカー(142,604ポイント)   Date: 2009/08/16(日) 16:57   No:38117     
Title: Re:パーフェクトフリ-ズについて    
そのif文の直前で t の値を確認してみてください。
いくつになっていますか?


36ポイント を手に入れた。

Name: ベース  ..ぴよぴよ(274ポイント)   Date: 2009/08/16(日) 17:05   No:38118     
Title: Re:パーフェクトフリ-ズについて    
回答ありがとうございます。213です。

15ポイント を手に入れた。

Name: MNS  ..中級者(13,792ポイント)   Date: 2009/08/16(日) 17:34   No:38120     
Title: Re:パーフェクトフリ-ズについて    
tが213ならば、
if(210<t && t<270 && t%3==0)
の条件を満たしていますので、実行されるのはしょうがないと思います

tの値が途中で変わってしまっている、ということでしょうか


42ポイント を手に入れた。



Name: taiyaki  ..かけだし(1,712ポイント)   Date: 2009/08/16(日) 02:10   No:38110       
Title: angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180);について    
龍神録の28章でangle-PI/2*0.8+PI*0.8/7*i+rang(PI/180)というところが意味がわかりません。
誰かわかりやすい説明よろしくお願いします。


35ポイント を手に入れた。


Name: ねこ  ..プログラマー(36,872ポイント)   Date: 2009/08/16(日) 10:39   No:38111     
Title: Re:angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180);について    
元ソース読んでないけど
指定角度−72〜指定角度+72の範囲で7WAYショットを打ち
それぞれの弾に0〜1度程度の誤差をランダムで加算してます。

angle=指定角度
−72=-PI/2*0.8
〜+72=PI*0.8/7*i
0〜1程度の誤差=rang(PI/180)

角度計算で分かりにくい時はPIを180と置き換えて紙に描いてみると良いですよ。



145ポイント を手に入れた。

Name: taiyaki  ..かけだし(1,772ポイント)   Date: 2009/08/16(日) 16:18   No:38115 解決!     
Title: Re:angle-PI/2*0.8+PI*0.8/7*i+rang(PI/180);について    
回答ありがとうございます。わかりました。ありがとうございました。

2倍のポイントを手に入れた! 60ポイント を手に入れた。



Name:  ..入門者(2,873ポイント)   Date: 2009/08/16(日) 12:48   No:38112       
Title: VC.netでの質問    
何度も投稿してしまい申し訳ございません。
VC++でアプリを作っております。
皆さんのおかげで2つのフォーム間での値のやり取り(サブ→メイン)へ
はなんとかできました。
しかしその逆ができす困っております。
(メインの値をサブに送りたいです。)

F2で名前を変更するフォームを呼び出すのですが
ここでタブ名を渡してあげたいです。

添付ファイルがメインフォームです


//サブフォーム
#pragma once

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;


namespace Sample {

/// <summary>
/// Form2 の概要
///
/// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
/// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
/// 変更する必要があります。この変更を行わないと、
/// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
/// 正しく相互に利用できなくなります。
/// </summary>
public ref class Form2 : public System::Windows::Forms::Form
{
public:
Form2(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//
}
public: String^ GetTextBoxText(){
return nameTextBox->Text;
}
/*
public: void TextBoxSet(String^ Str){
this->nameTextBox->Text = Str;
}
*/
protected:
/// <summary>
/// 使用中のリソースをすべてクリーンアップします。
/// </summary>
~Form2()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Button^ nameButton;
private: System::Windows::Forms::TextBox^ nameTextBox;

protected:

private:
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
void InitializeComponent(void)
{
this->nameButton = (gcnew System::Windows::Forms::Button());
this->nameTextBox = (gcnew System::Windows::Forms::TextBox());
this->SuspendLayout();
//
// nameButton
//
this->nameButton->Location = System::Drawing::Point(70, 36);
this->nameButton->Name = L"nameButton";
this->nameButton->Size = System::Drawing::Size(57, 23);
this->nameButton->TabIndex = 0;
this->nameButton->Text = L"変更";
this->nameButton->UseVisualStyleBackColor = true;
this->nameButton->Click += gcnew System::EventHandler(this, &Form2::nameButton_Click);
// this->nameButton->Select();
//
// nameTextBox
//
this->nameTextBox->Location = System::Drawing::Point(12, 11);
this->nameTextBox->Name = L"nameTextBox";
this->nameTextBox->Size = System::Drawing::Size(170, 19);
this->nameTextBox->TabIndex = 1;
this->nameTextBox->ImeMode = System::Windows::Forms::ImeMode::Hiragana;
this->nameTextBox->Text = Form1
//tabPage[this->tabControl1->SelectedIndex]->Text = nameForm->GetTextBoxText();
// this->nameTextBox->SelectionStart();
//
// Form2
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(192, 66);
this->Controls->Add(this->nameTextBox);
this->Controls->Add(this->nameButton);
this->Load += gcnew System::EventHandler(this, &Form2::Form2_Load);
// this->Icon = (cli::safe_cast<System::Drawing::Icon^ >(resources->GetObject(L"$this.Icon")));
this->MaximizeBox = false;
// this->MaximumSize = System::Drawing::Size(200, 100);
this->MinimizeBox = false;
this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle;
// this->MinimumSize = System::Drawing::Size(200, 100);
this->Name = L"Form1";
this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
this->Text = L"Tab名変更";
this->KeyPreview = true;
this->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &Form2::Form2_KeyDown);
this->ResumeLayout(false);
this->PerformLayout();

}
#pragma endregion

//フォームロード時
private: System::Void Form2_Load(System::Object^ sender, System::EventArgs^ e) {
this->nameTextBox->Text = this->GetTextBoxText();
}
private: System::Void nameButton_Click(System::Object^ sender, System::EventArgs^ e) {
// tabPage[this->tabControl1->SelectedIndex]->Text = this->nameTextBox->Text;
this->Close();
}

private: System::Void Form2_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e){
// F2
if(e->KeyCode == System::Windows::Forms::Keys::F2){
this->nameTextBox->Text = "";
this->Close();
}
}
};
}


1,790ポイント を手に入れた。


Name: pooka [URL]  ..中級者(12,642ポイント)   Date: 2009/08/16(日) 14:03   No:38113     
Title: Re:VC.netでの質問    
メインの方のTabNameSet関数で
nameForm->TextBoxSet(tabPage[this->tabControl1->SelectedIndex]->Text);
nameForm->ShowDialog(this);
この順にすれば渡せると思います。


2倍のポイントを手に入れた! 182ポイント を手に入れた。

Name:  ..入門者(2,885ポイント)   Date: 2009/08/16(日) 14:46   No:38114 解決!     
Title: Re:VC.netでの質問    
できました〜
ありがとうございます。


12ポイント を手に入れた。



Name: kb98  ..ぴよぴよ(107ポイント)   Date: 2009/08/15(土) 16:58   No:38105 解決!       
Title: DXライブラリを使用して画像が表示できない    
以下の「ゲームプログラミングの館」さんのサンプルコードを
実行したのですが、画像が表示されません。


#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 ;
}


実行するとウィンドウは表示されますが、その後モニタにノイズが
走ったり、数度点滅したりしますが画像も文字列も表示されることはなく
ウィンドウは黒いままです。エラーや警告メッセージはなしです。
素人目に見ても、モニタ点滅時に描画処理を行おうとしているのに
何らかのトラブルが発生してる雰囲気が感じられます。

私の実行環境は、
Windows Vista Home Premium SP2
Visual C++ 2008 EE です。

上記のサンプルコードを友人のWindowsXP SP3にて実行させてもらうと
正常に動作します。(VCの設定は私のPCと同じ状態にさせてもらいました)
"char.PNG"の保存場所が違うということはないようです。

関係があるか分かりませんが、グラボはGeForce9800GT
DirectXバージョンは10です。
友人PCのグラボは聞きそびれました、DirectXバージョンは9だったかと。

ハードの相性やソフトのバージョンの問題なのかまるで検討が
つかないためご意見を伺えましたら大変助かります。



107ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(404,518ポイント)   Date: 2009/08/15(土) 17:48   No:38106     
Title: Re:DXライブラリを使用して画像が表示できない    

>以下の「ゲームプログラミングの館」さんのサンプルコードを
>実行したのですが、画像が表示されません

 表の画面に描いてそのまま表示するこのサンプルは Vistaでは
正常に動作しないかもしれません。

 試しに、そのサンプルコードの WinMain関数の中を以下のように
書き直してみてください。

int WINAPI WinMain( HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode( TRUE ) ;
    if( DxLib_Init() == -1 ) return -1;
    SetDrawScreen(DX_SCREEN_BACK);
    
    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));
    
    ScreenFlip();
    WaitKey() ;
    DxLib_End() ;
    return 0 ;
}

 これは同サンプルコードを裏画面に一度描画してから切り替えて表示するように
したものです。

 これで何か表示される……かもしれません。

 が、これでもダメなら同じくWinMain関数の中を

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
    ChangeWindowMode(TRUE);
    if(DxLib_Init() == -1) return 0;

    SetDrawScreen( DX_SCREEN_BACK );
    
    int image = LoadGraph("char.png");
    while(!ProcessMessage())
    {
        ClearDrawScreen();
        if(image == -1)
            DrawString(50,220,st1,GetColor(255,255,255));
        else
            DrawString(50,220,st2,GetColor(255,255,255));
        ScreenFlip();
    }
    DxLib_End();
    return 0;
}

としてみて下さい。

 もしこれもダメでしたら、プロジェクトのディレクトリに Log.txtというファイルが
あるかと思います。

 そのファイルを見て、何かエラーとか失敗などの文字がないか調べてみてください。


523ポイント を手に入れた。

Name: kb98  ..ぴよぴよ(232ポイント)   Date: 2009/08/15(土) 20:15   No:38107     
Title: Re:DXライブラリを使用して画像が表示できない    
Justy様
ご返事いただきありがとうございます。

ご提示いただいた2つのコードを実行してみました。
1つ目のコード、裏画面→表画面では今までと同様の結果となりました。
黒ウィンドウ・モニタ点滅です。

Logでは「周期的エフェクトの作成に失敗しました。」という
もの以外にはエラー・失敗などで該当するものは見つかりませんでした。

2つ目のコードでは、しばらく点滅したのちにエラー終了しました。
Logは上記の「周期的〜」以外に、
DxLib_VC2005用.exe の 0x77cd9b2b で初回の例外が発生しました
 : 0xC0000005: 場所 0x06a58000 に書き込み中にアクセス違反が発生しました。
DxLib_VC2005用.exe の 0x77cd9b2b でハンドルされていない例外が発生しました
 : 0xC0000005: 場所 0x06a58000 に書き込み中にアクセス違反が発生しました。
プログラム '[3652] DxLib_VC2005用.exe: ネイティブ' はコード -1073741819 (0xc0000005)
 で終了しました。

元のサンプルコードを開く際に、VC++2008に互換処理を云々とありましたが、
そのあたりの問題なのでしょうか。
サンプルコード自体は「VC2008用_2005用」とはなっていました。


125ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(405,119ポイント)   Date: 2009/08/15(土) 21:17   No:38108     
Title: Re:DXライブラリを使用して画像が表示できない    
 この2つもダメとなると、困りましたね……。
 ちょっと普通の問題ではないようです。



>周期的エフェクトの作成に失敗しました

 それはフォースフィードバック関連のジョイパッド周りのエラーのようです。



>DxLib_VC2005用.exe の 0x77cd9b2b で初回の例外が発生しました

 Vistaで実行したときのメモリマップとかは詳しくはないのですが、
XPと似通ってると仮定するなら、なんかDXライブラリよりさらに下の階層で
何か問題が起きているようにもみえますね。



>元のサンプルコードを開く際に、VC++2008に互換処理を云々とありましたが

 VS2005用のプロジェクトを VS2008用に変換する処理だと思うので、
そこはあまり関係ないかと思います。




 さて、以後のチェック項目としては

・ 私用している DXライブラリは最新版(2.25b)かどうか確認してください。

・ ジョイパッドが刺さっていたら抜いてください

・ 2つめのコードで ChangeWindowMode(TRUE)を ChangeWindowMode(FALSE)にしても
同様の現象になるかどうか見てください
(フルスクリーンで実行されるので注意。終了するときは Alt+F4を押してください)

・ グラフィックスなどのドライバは最新かどうか確認してください。

くらいしか思いつきません。

 上記項目全てチェックしても改善されないようでしたら
DXライブラリ本家の掲示板の方に相談されるのがいいかと思います。


DXライブラリ置き場 HOME
ttp://homepage2.nifty.com/natupaji/DxLib/index.html

DXライブラリ質問掲示板
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?


601ポイント を手に入れた。

Name: kb98  ..ぴよぴよ(431ポイント)   Date: 2009/08/15(土) 22:59   No:38109     
Title: Re:DXライブラリを使用して画像が表示できない    
Justy様
度々ありがとうございます。

教えていただいたチェック項目について調べてみました。
> ・ 私用している DXライブラリは最新版(2.25b)かどうか確認してください。

2.25bでした。


> ・ ジョイパッドが刺さっていたら抜いてください


「周期的エフェクトの作成に失敗しました 」のメッセージは確かに消えました。
ありがとうございます。


> ・ 2つめのコードで ChangeWindowMode(TRUE)を ChangeWindowMode(FALSE)にしても
> 同様の現象になるかどうか見てください

点滅こそしませんが、何も表示されませんでした。


> ・ グラフィックスなどのドライバは最新かどうか確認してください。

グラボのドライバはつい最近アップデートしたので問題ないかと思います。



当面は廃棄予定だった古いノートPCで作業してみます…。

DXライブラリ様のところにも伺ってみようと思います。
色々とありがとうございました。


199ポイント を手に入れた。



Name: 初心者  ..プログラマー(34,872ポイント)   Date: 2009/08/15(土) 13:56   No:38101       
Title: 問題のあるポインタの変換 という警告がでます…。    
OS:windows
コンパイラ:Borland C++ Compiler 5.5

5人の生徒の三教科の点数の最高点と最低点、
科目ごとの平均点、生徒の平均点を求めるプログラムなのですが、


#include <stdio.h>/*C:\Users\ryo\desktop\C\Source*/

#define STD_NO 5
#define SUB_NO 3

int top_sub(int vc[][SUB_NO],int sub,int sw)
{
int i;
int tmp=vc[0][sub];

for(i=1;i<STD_NO;i++){
if(sw)
tmp=(vc[i][sub]>tmp)?vc[i][sub]:tmp;
else
tmp=(vc[i][sub]<tmp)?vc[i][sub]:tmp;
}
return(tmp);
}

int sum(int vc[][STD_NO],int sub)
{
int i;
int sum=0;

for(i=0;i<STD_NO;i++)
sum+=vc[i][sub];
return(sum);
}

double ave(int vc[][SUB_NO],int sub)   /*←この関数で警告がでます。*/
{
return((double)sum(vc,sub)/STD_NO);
}

int sum_st(int vc[][SUB_NO],int no)
{
int i;
int sum=0;
for(i=0;i<SUB_NO;i++)
sum+=vc[no][i];
return(sum);
}

double ave_st(int vc[][SUB_NO],int no)
{
return((double)sum_st(vc,no)/SUB_NO);
}

void print_list(int vc[][SUB_NO])
{
int i,j;
puts("No 国語 数学 英語");
puts("-------------------");

for(i=0;i<STD_NO;i++){
printf("%2d ",i+1);
for(j=0;j<SUB_NO;j++)
printf("%4d",vc[i][j]);
putchar('\n');
}
puts("-------------------");
}

int main (void)
{
int i;
int tensu[STD_NO][SUB_NO];

for(i=0;i<STD_NO;i++){
printf("[%2d番:]",i+1);
printf("国語:"); scanf("%d",&tensu[i][0]);
printf(" 数学:"); scanf("%d",&tensu[i][1]);
printf(" 英語:"); scanf("%d",&tensu[i][2]);
}
putchar('\n');

print_list(tensu);

printf("【国語】最高点:%d\n",top_sub(tensu,0,1));
printf(" 最低点:%d\n",top_sub(tensu,0,0));
printf(" 平均点:%.1f\n",ave(tensu,0));

printf("【数学】最高点:%d\n",top_sub(tensu,1,1));
printf(" 最低点:%d\n",top_sub(tensu,1,0));
printf(" 平均点:%.1f\n",ave(tensu,1));

printf("【英語】最高点:%d\n",top_sub(tensu,2,1));
printf(" 最低点:%d\n",top_sub(tensu,2,0));
printf(" 平均点:%.1f\n",ave(tensu,2));

puts("各学生の3教科の平均点");

for(i=0;i<STD_NO;i++)
printf("%2d:%.1f\n",i+1,ave_st(tensu,i));

return(0);
}

コンパイルしようとすると、
「警告 W8075 sample.c 32:問題のあるポインタの変換(関数 ave)」
という警告がでます。
警告を無視して実行すると、やはり平均点だけおかしな値になります…。
どうしたらいいのでしょうか…。
長文で見づらくて大変申し訳ないですが、時間がありましたらどうかご教授下さい。


232ポイント を手に入れた。


Name: pooka [URL]  ..中級者(12,460ポイント)   Date: 2009/08/15(土) 14:18   No:38102     
Title: Re:問題のあるポインタの変換 という警告がでます…。    
int sum(int vc[][STD_NO],int sub)
{
//省略
}
赤字の所はSUB_NOではないでしょうか?


49ポイント を手に入れた。

Name: box  ..ハッカー(142,568ポイント)   Date: 2009/08/15(土) 14:19   No:38103     
Title: Re:問題のあるポインタの変換 という警告がでます…。    
配列の第1次元と第2次元は、それぞれ
学生番号、科目番号のどちらですか?

プログラム全体にわたって今一度整理してみるとよいでしょう。


37ポイント を手に入れた。

Name: 初心者  ..プログラマー(34,948ポイント)   Date: 2009/08/15(土) 14:32   No:38104 解決!     
Title: Re:問題のあるポインタの変換 という警告がでます…。    
指摘して頂いたところを直した結果、無事コンパイルする事ができました。
今後、自分でプログラムが解り易いように整理するように心がけます。
回答して下さった方々、本当に有難うございました。


76ポイント を手に入れた。



Name: Ma  ..中級者(10,155ポイント)   Date: 2009/08/15(土) 08:42   No:38093       
Title: ifstream や FileRead_open でファイルを開けない    
標準ライブラリの
 ifstream

DXライブラリの
 FileRead_open
を使って、あるテキストファイルを開こうとしているのですが、どうもエラー発生(戻り値がエラー)して
開けません。

環境は、 Visual Studio Express Edition 2008 です。
DXライブラリを使用しています。


問題となっているのは、このコードです。

int eventsFileHandle = FileRead_open(eventPath.c_str());


eventsPath は std::string で、 "stages/最新のステージ/events.txt" となっています。
この結果は、eventsFileHandle が 0 となります。

(ブレイクポイントを置いて確認しました。)


フォルダ構成は、

作業ディレクトリ
|-stages
| |-最新のステージ
| | |-events.txt

です。


ファイルがそのディレクトリにない、 ということはありません。(何度も確認しました。)
また、日本語のパスを使用するために

//日本語のファイルパスを使うために必要。
locale::global(locale("japanese"));

これを、起動時に呼んでいます。


また、以前 / の代わりに \ を使っているのを見たことがあるので、\ もためしましたが、ダメでした。
(そういえば、パス指定の時の / と \ の違いが分かりません…)


情報足りない場合は、伝えてくだされば順次追加します。

以上、よろしくお願いします。


355ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(403,995ポイント)   Date: 2009/08/15(土) 10:01   No:38094     
Title: Re:ifstream や FileRead_open でファイルを開けない    

>ステージ/events.txt

 その events.txtですが別のツールで開いていませんか?
 例えば Excelとか。

 もし開いているようなら閉じてから試してください。


 次にもし「作業ディレクトリ」というのが VisualStudioのプロジェクト設定の
作業ディレクトリのことならいいのですが、そうではなくフォルダ名なのでしたら、
VisualStudioのプロジェクト設定の作業ディレクトリとしてそのフォルダを指定して
みてください。


148ポイント を手に入れた。

Name: Ma  ..中級者(10,181ポイント)   Date: 2009/08/15(土) 11:26   No:38095     
Title: Re:ifstream や FileRead_open でファイルを開けない    
>その events.txtですが別のツールで開いていませんか?
いいえ、開いていません。


> 次にもし「作業ディレクトリ」というのが VisualStudioのプロジェクト設定の
>作業ディレクトリのことならいいのですが、そうではなくフォルダ名なのでしたら、
>VisualStudioのプロジェクト設定の作業ディレクトリとしてそのフォルダを指定して
>みてください。

前者です。
プロジェクト設定で作業ディレクトリに指定したフォルダであって、フォルダ名ではありません。


(明記していなくてすいませんでした。)

*再起動して再挑戦してみましたが、直っていなかったので、間違って開いていることはなさそうです。


26ポイント を手に入れた。

Name: ねこ  ..プログラマー(36,727ポイント)   Date: 2009/08/15(土) 11:45   No:38096     
Title: Re:ifstream や FileRead_open でファイルを開けない    
1.Cドライブ直下にファイルを置いて絶対パスで試してみる
2.1で大丈夫だったら「最新ステージ」を半角にして試してみる
3.2がだめだったらファイルに変な属性が付いてる可能性を考慮して新規作成してテキストの中身をコピーして試す
4.OpenFile関数等でもハンドルが取得できないのか試す

後「\」の場合"stages\\最新のステージ\\events.txt"こんな感じになります。
\t(タブ)等の指定方法があるため、「\」は2個で「\」になります。


162ポイント を落としてしまった。

Name: Ma  ..中級者(10,343ポイント)   Date: 2009/08/15(土) 11:50   No:38097     
Title: Re:ifstream や FileRead_open でファイルを開けない    
>後「\」の場合"stages\\最新のステージ\\events.txt"こんな感じになります。
>\t(タブ)等の指定方法があるため、「\」は2個で「\」になります。

はい、\\ の使い方は知ってはいます。
ただ、\ を使おうが、 / を使おうが違いはなく、どちらでも良いのだろうか? という素朴な疑問でした。







int eventsFileHandle = FileRead_open("stages/最新のステージ/events.txt");

こうしたら、正常に動作しました。

const char* name = "stages/最新のステージ/events.txt";
int eventsFileHandle = FileRead_open(name);

これでも、正常に動作しました。
つまり、c_str() を使うとダメなのでしょう。

なぜでしょうか・・・。



*追記

const char* name = eventPath.c_str();
int eventsFileHandle = FileRead_open(name);

この方法だと、ダメでした・・・。なぜだぁ。


162ポイント を手に入れた。

Name: Ma  ..中級者(10,258ポイント)   Date: 2009/08/15(土) 12:01   No:38098     
Title: Re:ifstream や FileRead_open でファイルを開けない    
const char* name = eventPath.c_str();
int eventsFileHandle = FileRead_open(name);

を実行したときの画像です。
*ブレイクポイントは、コード通過後にいれています。


*追記

char* name = new char[126];
strcpy_s(name,126,eventPath.c_str());
int eventsFileHandle = FileRead_open(name);

これでも、ダメでした・・・。



いまさらですが、「ねこ」さんが提示してくださった方法の返答を。

>1.Cドライブ直下にファイルを置いて絶対パスで試してみる
作業ディレクトリ直下で、引数に直接文字列を渡したらOKでした。
つまり、 ("events.txt") で開けました。

>2.1で大丈夫だったら「最新ステージ」を半角にして試してみる
"stages/最新のステージ/events.txt"
を直接渡したら、開けました。


>3.2がだめだったらファイルに変な属性が付いてる可能性を考慮して新規作成してテキストの中身をコピーして試す。
2 OKでした。


>4.OpenFile関数等でもハンドルが取得できないのか試す。
直接渡したら開けたので、やらなくてもいいかな。

 (チェックの意図だとは思いますが、DXアーカイブを開けないといけません。)



85ポイント を落としてしまった。

Name: MNS  ..中級者(13,750ポイント)   Date: 2009/08/15(土) 12:06   No:38099     
Title: Re:ifstream や FileRead_open でファイルを開けない    
文字列のはじめに半角スペースが入っている気がするのですが、気のせいでしょうか?

36ポイント を手に入れた。

Name: Ma  ..中級者(10,305ポイント)   Date: 2009/08/15(土) 12:13   No:38100 解決!     
Title: Re:ifstream や FileRead_open でファイルを開けない    
>文字列のはじめに半角スペースが入っている気がするのですが、気のせいでしょうか?

Σなぬ!
そのとおりです・・・ね。。。

本当に、本当に、大変お騒がせしてすいませんでした。(恥ずかしい・・・)
m(_ _)m


47ポイント を手に入れた。



Name: イカ  ..ぴよぴよ(5ポイント)   Date: 2009/08/13(木) 21:02   No:38058       
Title: コンパイルについて    
あの、すごく初歩的なことなんですけどプログラムを書いてコンパイルしますよね?
下のような、プログラムを書いたんですけど何もおきないで勝手に終了?されます

void main(void)
{
}

どうしたらいいんでしょうか。


5ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(110,193ポイント)   Date: 2009/08/13(木) 21:07   No:38059     
Title: Re:コンパイルについて    
未定義の動作ですので、コンパイルできるかどうかも含めて、何が起きても不思議ではありません。


26ポイント を手に入れた。

Name: sizuma [URL]  ..中級者(13,272ポイント)   Date: 2009/08/13(木) 21:25   No:38061     
Title: Re:コンパイルについて    
C言語ですよね?
あなたはこのプログラムで何が起こるとおもって実行したんですか?
初歩的なことだなんてどうでもいいんで、状況を詳しく教えていただかないと答えられないです。

Cではmainは
int main(void)
int main(int argc,char *argv[])
のどちらかです。

どこかのサイトを参考にして実行したのであれば、そのサンプルコードがのってるサイトを参考にするのはやめて、違うサイトを見ることをオススメします。


98ポイント を手に入れた。

Name: box  ..ハッカー(142,531ポイント)   Date: 2009/08/13(木) 21:32   No:38062     
Title: Re:コンパイルについて    
> 下のような、プログラムを書いたんですけど何もおきないで勝手に終了?されます

{ と } の間に、何か出力する文を書いてほしいです。
そのプログラムは「何もしない」プログラムです。

それから、何というコンパイラを使ったかを教えてほしいです。


62ポイント を手に入れた。

Name: lbfuvab  ..上級者(21,711ポイント)   Date: 2009/08/13(木) 21:41   No:38064     
Title: Re:コンパイルについて    
少なくともVCやBCCなら何もせず終了します。

16ポイント を手に入れた。

Name: イカ  ..ぴよぴよ(163ポイント)   Date: 2009/08/14(金) 21:33   No:38090     
Title: Re:コンパイルについて    
すいません、環境はVC2008のEEです。
えっと、この文?はウィンドウをだすプログラムだと思ってましたがちがうんですね。すいませんでした。
あと、VCやBCCだとどうしてなにもせずに終わってしまうんでしょうか?(この文だと終わるってことでしょうか?)

#include<stdio.h>

void main(void)
{
printf("あいうえお\n);
}


こういう文を打ってもすぐに終了して終わってしまうんですがどうしたらいいんでしょう?
ちなみに、参照してるサイトはここです(0からのゲームプロラミング)


158ポイント を手に入れた。

Name: non  ..熟練のプログラマー(60,298ポイント)   Date: 2009/08/14(金) 21:49   No:38091     
Title: Re:コンパイルについて    
デバッグ−デバッグなしで開始 から実行してみたら?



23ポイント を手に入れた。

Name: イカ  ..ぴよぴよ(185ポイント)   Date: 2009/08/14(金) 21:52   No:38092 解決!     
Title: Re:コンパイルについて    
nonさん、ありがとうございます。できました。

22ポイント を手に入れた。



Name: tkoykai  ..ぴよぴよ(74ポイント)   Date: 2009/08/14(金) 16:35   No:38080       
Title: PI*2について    
龍神録プログラミングの館の27章で初歩的な数学のことでわからなくなりました。
boss_shot.bullet[k].angle = boss_shot.base_angle[0]+PI2/20*i;の
PI2(PI*2)とはなぜこういう式になるのかわからないのでわかるかたいらしたら教えてください。


74ポイント を手に入れた。


Name: たいちう  ..プログラマー(33,042ポイント)   Date: 2009/08/14(金) 16:51   No:38081     
Title: Re:PI*2について    
三角関数の基礎を知っておく必要があります。
360°が 2×π なのは、ご存知でしょうか?

(PI2/20)は、360°を20等分した角度である18°。
それに0〜19をかけることで、0, 18, 36, 54,,,342の角度を計算しています。


15ポイント を手に入れた。

Name: taiyaki  ..かけだし(1,677ポイント)   Date: 2009/08/14(金) 17:00   No:38083     
Title: Re:PI*2について    
回答ありがとうございます。質問ついでになにか数学でよい書籍はないでしょうか?

25ポイント を手に入れた。

Name: たいちう  ..プログラマー(33,161ポイント)   Date: 2009/08/14(金) 17:24   No:38085     
Title: Re:PI*2について    
高校の数学の教科書は?ネタじゃなくて。
最も金をかけて解りやすいように作っている本ですが。
それで足りなければ、高校生用の参考書が山ほど出ています。

もし高校のときに挫折したことがあったとしても、
目的を持って勉強すれば違う結果になると思う。

taiyakiさんが中学生以下だった場合でも、教科書をお勧め。
自分の学年から順に教科書を読み進めるのが王道。
高校生以上だった場合でも、自分が確実に理解している学年から
読み進めるのが良いかと。


# 回答の前提として、「三角関数が高校で教えられている」としてるけど、
# 多分今もそうだよね。


119ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(110,251ポイント)   Date: 2009/08/14(金) 18:00   No:38086     
Title: Re:PI*2について    
> # 回答の前提として、「三角関数が高校で教えられている」としてるけど、
> # 多分今もそうだよね。

商業科などの状況はわかりませんが、普通科や工業科では(少なくとも建前上は)教えられています。
ですので、高校の教科書や参考書を勧めるのは正解です。


58ポイント を手に入れた。

Name: takoyaki  ..中級者(13,278ポイント)   Date: 2009/08/14(金) 18:59   No:38087     
Title: Re:PI*2について    
回答ありがとうございます。数学の本を買ってみたいと思います。ところで数学1〜3A〜Cありますがどれを買えばよいのでしょうか?

35ポイント を手に入れた。

Name: たいちう  ..プログラマー(33,041ポイント)   Date: 2009/08/14(金) 19:11   No:38088     
Title: Re:PI*2について    
自分で調べるつもりは無いのですか?
数学に限らず、プログラミング全般にも言えることですが、
自分が知りたい知識が載っていて、自分が理解できそうな本を探します。
常に自分が主体です。

今回は高校の数学の一部が対象ですので、かなり小さな本屋でも
何冊か本があるはずです。自分にあったものを見つけましょう。

三角関数の基本をしっかり押さえてから、
このサイトの解説を読めば、よく理解できると思います。
それでも分からない所をこの掲示板でまた尋ねてください。


120ポイント を落としてしまった。

Name: takoyaki  ..中級者(13,296ポイント)   Date: 2009/08/14(金) 19:18   No:38089 解決!     
Title: Re:PI*2について    
回答ありがとうございます。自分で探してみたいと思います。

18ポイント を手に入れた。



Name: 774  ..ぴよぴよ(879ポイント)   Date: 2009/08/14(金) 16:59   No:38082       
Title: ぷよぷよもどきゲーム    
ぷよぷよじゃなくてぽよぽよにしたら許可おりるんじゃないですか?
でもそれだったら許可とらなくてもいいかな、配布だし。
すごい完成度高そうですね。


76ポイント を手に入れた。


Name: 774  ..ぴよぴよ(917ポイント)   Date: 2009/08/14(金) 17:04   No:38084     
Title: Re:ぷよぷよもどきゲーム    
まちがえました
あれはBLACKというんですね。
ときめも対戦パズルだまのようでおもしろそうです。


38ポイント を手に入れた。



Name: shikabane  ..ぴよぴよ(78ポイント)   Date: 2009/08/14(金) 02:51   No:38076       
Title: 龍神録の館 キャラを描画のプログラムについて    
タイトルにもあるように、龍神録プログラミングの館 4 キャラを描画してみようの項で、
graph.cppを書き換えビルドした際

error C2039: 'img' : 'ch_t' のメンバではありません。

と表示されてしまいます。
一応、最後のmain.cppの書き換えまでやったり、最初から書き直してみたりしましたが、
結果は変わりませんでした。

[2] 環境  
 [2.1] OS : WindowsVista
 [2.2] コンパイラ名 : Microsoft Visual Studio 2008

[3] その他
 今回からC言語を勉強中

回答お願いします。


78ポイント を手に入れた。


Name: pooka [URL]  ..中級者(12,411ポイント)   Date: 2009/08/14(金) 03:02   No:38077     
Title: Re:龍神録の館 キャラを描画のプログラムについて    
struct.hのキャラクターに関する構造体に
int img;//画像
があるか確認してみてください。


2倍のポイントを手に入れた! 66ポイント を手に入れた。

Name: shikabane  ..ぴよぴよ(141ポイント)   Date: 2009/08/14(金) 13:13   No:38079 解決!     
Title: Re:龍神録の館 キャラを描画のプログラムについて    
>struct.hのキャラクターに関する構造体に
>int img;//画像
>があるか確認してみてください。

返答ありがとうございます。
確認したところ、一部に間違いがありましたので書き直し、ビルドしたところ成功しました。


63ポイント を手に入れた。



Name: 774  ..ぴよぴよ(803ポイント)   Date: 2009/08/14(金) 11:55   No:38078       
Title: ゲームプログラミングの館のウェブページ    
ゲームプログラミングの館のウェブページをダウンロードしようとしたらできませんでした
できないようになってるのかな?


2ポイント を手に入れた。




Name: taiyaki  ..かけだし(1,579ポイント)   Date: 2009/08/13(木) 15:29   No:38052       
Title: 無題    
windowを表示したいのですが、このファイルの中で
HRESULT SelectAdapterFormat(UINT Adapter, D3DDEVTYPE Device, D3DDISPLAYMODE dmode)
{
	HRESULT hr = S_OK;</pre>


	// ウインドウ・モード

	ZeroMemory(&g_D3DPPWindow, sizeof(g_D3DPPWindow));

	g_D3DPPWindow.BackBufferCount			= 1;

	g_D3DPPWindow.SwapEffect				= D3DSWAPEFFECT_DISCARD;

	g_D3DPPWindow.hDeviceWindow				= g_hWindow;

	g_D3DPPWindow.Windowed					= TRUE;

	g_D3DPPWindow.PresentationInterval		= g_Interval;


	for (int i=0; i<sizeof(g_fmtDisplay)/sizeof(g_fmtDisplay[0]); i++)

	{

		hr = g_pD3D->CheckDeviceType(Adapter, Device, dmode.Format, g_fmtDisplay[i], TRUE);

		if (SUCCEEDED(hr))

		{

			g_D3DPPWindow.BackBufferFormat = g_fmtDisplay[i];

			break;

		}

	}

	if (FAILED(hr))

		return DXTRACE_ERR(L"SelectAdapterFormat CheckDeviceType Window", hr);


         ・

         ・

 
のところなんですけど、
if (FAILED(hr))

		return DXTRACE_ERR(L"SelectAdapterFormat CheckDeviceType Window", hr);

<pre>   ↑↑↑ここ↑↑↑
でどうしても失敗してしまいます。どうしたら、うまく回避できるのでしょうか?


770ポイント を手に入れた。


Name: taiyaki  ..かけだし(1,597ポイント)   Date: 2009/08/13(木) 15:31   No:38053     
Title: DirectXについて    
タイトルつけるの忘れてしまいました。

18ポイント を手に入れた。

Name: taiyaki  ..かけだし(1,607ポイント)   Date: 2009/08/13(木) 15:36   No:38054     
Title: Re:DirectXについて    
開発環境なのですが。vc2005c++です。

10ポイント を手に入れた。

Name: taiyajki  ..ぴよぴよ(3ポイント)   Date: 2009/08/13(木) 23:54   No:38072     
Title: Re:DirectXについて    
このソースで無事に実行できた方いらっしゃいませんか?

3ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(403,847ポイント)   Date: 2009/08/14(金) 00:16   No:38073     
Title: Re:DirectXについて    

>このファイルの中で〜のところなんですけど、

 その SelectAdapterFormat関数が D3D9Sample02.cppファイル内に見あたらないのですが。



>このソースで無事に実行できた方いらっしゃいませんか

 動きませんでした。
 canvas.ddsがないので、テクスチャとスプライトの生成に失敗し、
g_pD3DXSpriteが NULLのままメンバを呼び出した為、0xC0000005の
アクセス違反が発生しています。


200ポイント を手に入れた。

Name: taiyaki  ..かけだし(1,615ポイント)   Date: 2009/08/14(金) 00:27   No:38074     
Title: Re:DirectXについて    
Justyさん

8ポイント を手に入れた。

Name: taiyaki  ..かけだし(1,652ポイント)   Date: 2009/08/14(金) 00:30   No:38075 解決!     
Title: Re:DirectXについて    
Justyさんありがとうございます。canvas.ddsの存在に気づきませんでした。なんとか表示することができました。

37ポイント を手に入れた。



Name: ひっさん  ..ぴよぴよ(91ポイント)   Date: 2009/08/13(木) 21:40   No:38063       
Title: キャラクターが移動しません    
はじめまして。C言語超初心者です。

ゲームプログラミングの館を見てプログラムの勉強をしているのですが、19節のサンプルプログラムが動きません。
右キーを入力してもキャラが移動しません。
そのままコピーしたので間違いはないはずですし、Escキーを入力すればちゃんと終了もするので、キー入力状態の取得はできているようです。
ノートパソコンを使っているのですが、これはキーボードのせいなのでしょうか?
そうだとすれば、解決方法はあるのでしょうか?

どなたか、助言をお願いします。


91ポイント を手に入れた。


Name: sizuma [URL]  ..中級者(13,292ポイント)   Date: 2009/08/13(木) 21:43   No:38065     
Title: Re:キャラクターが移動しません    
一応コピーペしたコードをそのまま貼り付けてもらえますか?
コンパイラは何を使っているんでしょうか?


20ポイント を手に入れた。

Name: ひっさん  ..ぴよぴよ(625ポイント)   Date: 2009/08/13(木) 22:12   No:38066     
Title: Re:キャラクターが移動しません    
コードは
#include "DxLib.h"


typedef struct{
int x,y,img;
}ch_t;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

int image[16];
char Key[256];
ch_t ch;

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

ch.x =320;
ch.y =240;

SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了

if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.x++ ; //xの値を1増やす

ch.img=image[12];

DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;

ScreenFlip();//裏画面を表画面に反映
}

DxLib_End();
return 0;
}

上の通りです。

コンパイラはVisualC++2008です。
ちなみにOSはVISTA(BASIC)で、PCの型はFUJITSUのFMV-BIBLO NF40Uです。


534ポイント を手に入れた。

Name: sizuma [URL]  ..中級者(13,342ポイント)   Date: 2009/08/13(木) 22:21   No:38067     
Title: Re:キャラクターが移動しません    
僕の環境では問題なく動きました。
VC++2008EE、XP

キャラが表示されないのではなくてキャラが動かないのですよね?


50ポイント を手に入れた。

Name: ひっさん  ..ぴよぴよ(648ポイント)   Date: 2009/08/13(木) 22:26   No:38068     
Title: Re:キャラクターが移動しません    
そうです。
表示までは何ら問題なく動作します。


23ポイント を手に入れた。

Name: DVDM [URL]  ..入門者(2,992ポイント)   Date: 2009/08/13(木) 22:27   No:38069     
Title: Re:キャラクターが移動しません    
>>ひっさんさん
私の環境でもばっちり動きました。
XP HomeEdition Version2002 ServicePack3
VC++ 2008 ExpressEdition。

リビルド(Alt+F7)して治るという事はないですよ・・・ね?
あるいは、ソースをいじってる段階でこの掲示板にアップされたソースと現在のソースが食い違っていると言う事もありませんよ・・・ね?


62ポイント を手に入れた。

Name: ひっさん  ..ぴよぴよ(758ポイント)   Date: 2009/08/13(木) 22:38   No:38070     
Title: Re:キャラクターが移動しません    
リビルドしても治りません。
先ほどコピペしなおしてみましたが、やはりキャラは動きませんでした。

あと、右下にウイルスバスター2008の「不審な変更を拒否しました」という警告が出ますが、これは関係あるんでしょうか?


110ポイント を手に入れた。

Name: ひっさん  ..ぴよぴよ(833ポイント)   Date: 2009/08/13(木) 22:53   No:38071 解決!     
Title: Re:キャラクターが移動しません    
すみません!
「不審な変更〜」という警告が出ないように設定しなおしたところ、ばっちり動くようになりました!

お騒がせして申し訳ありませんでした……


75ポイント を手に入れた。



Name: situmon  ..プログラマー(38,698ポイント)   Date: 2009/08/11(火) 16:32   No:38009       
Title: なぜか敵が動かない。    
シューティングゲームの館のコードを使っていたのですが、
そろそろ本格的にやりたいので、
龍神録の館のコードも少しづつ組み込んでいるのですが、
できないところができてしまったのでアドバイス、ヒントをお願いします。

//物理的計算を点と距離指定で登録をする(指定時間tで定位置に戻す)
void input_phy_pos(double x,double y,int t,int i){//t=移動にかける時間
double ymax_x,ymax_y;
if(t==0)t=1;
enemy[i].phy.flag=1;//登録オン
enemy[i].phy.cnt=0;//カウンタ初期化
enemy[i].phy.set_t=t;//移動にかける時間をセット
ymax_x=enemy[i].x-x;//移動したい水平距離
enemy[i].phy.v0x=2*ymax_x/t;//水平成分の初速度
enemy[i].phy.ax =2*ymax_x/(t*t);//水平成分の加速度
enemy[i].phy.prex=enemy[i].x;//初期x座標
ymax_y=enemy[i].y-y;//移動したい鉛直距離
enemy[i].phy.v0y=2*ymax_y/t;//鉛直成分の初速度
enemy[i].phy.ay =2*ymax_y/(t*t);//鉛直成分の加速度
enemy[i].phy.prey=enemy[i].y;//初期y座標
}

//今いる位置からdist離れた位置にtカウントで移動する
int move_boss_pos(double x1,double y1,double x2,double y2,double dist, int t,int i){
int a=0;
double x,y,angle;
for(a=0;a<1000;a++){
x=enemy[i].x,y=enemy[i].y;//今のボスの位置をセット
angle=rang(PI);//適当に向かう方向を決める
x+=cos(angle)*dist;//そちらに移動させる
y+=sin(angle)*dist;
if(x1<=x&&x<=x2 && y1<=y&&y<=y2){//その点が移動可能範囲なら
input_phy_pos(x,y,t,i);
return 0;
}
}
return -1;//1000回試してダメならエラー
}

で、まず、敵でもボスのような動きができるようにしました。
というのはこれはボスの動きのための関数なのですが、
自分の作っているコードにはボスの関数は作ってないため、
普通の敵を使ってボスを作ろうとしているので、
このようにしました。
そしてそれを使うため、

void Enemy_pat6(int i){
if(enemy[i].count>0 && enemy[i].count<6000 && enemy[i].count%60==0 ){
move_boss_pos(40,40,300,150,10,10,i)
}
}

としてそれを

case 4300:
enemy[i].pat=6;
enemy[i].flag=1;
enemy[i].count=0;
enemy[i].img=13;
enemy[i].x=200;
enemy[i].y=50;
enemy[i].hp=100;
break;

でよびだしたのに、
動いてくれません。
どうしてでしょうか?




846ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(402,963ポイント)   Date: 2009/08/12(水) 02:12   No:38027     
Title: Re:なぜか敵が動かない。    
 case 4300や Enemy_pat6にブレイクポイントを張ってみては?

 case 4300でヒットしなければその 4300になってほしい変数を、
Enemy_pat6がヒットしなければその呼び出し元を、
両方ともヒットしているならさらに先を調べてみてください。


84ポイント を手に入れた。

Name: situmon  ..プログラマー(38,736ポイント)   Date: 2009/08/12(水) 20:04   No:38040     
Title: Re:なぜか敵が動かない。    
ブレイクポイントの使い方がよくわかりませんがやってみます。

2倍のポイントを手に入れた! 38ポイント を手に入れた。

Name: situmon  ..プログラマー(38,783ポイント)   Date: 2009/08/13(木) 21:23   No:38060 解決!     
Title: Re:なぜか敵が動かない。    
答えてもらったのに申し訳ないですが、
実装するのをやめました。
すいません。
ありがとうございました。
これからもよろしくおねがいします。


47ポイント を手に入れた。



Name: スペ  ..入門者(2,515ポイント)   Date: 2009/08/13(木) 14:41   No:38048       
Title: 差し合い弾幕シューティングを作ろうとしているのですが・・・    
技術的な問題で、2D格ゲーから弾幕シューティングに企画を変更しました。
まず、テンプレを。

[1] 質問文
 [1.1] 自分が今行いたい事は何か
    ・差し合い対戦弾幕シューティングの製作(一対一対戦シューティングもどき)

 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
    ・自分キャラの表示、敵キャラの出現までは製作できました

 [1.3] どのようなエラーやトラブルで困っているか
    ・↓と同じ
 [1.4] 今何がわからないのか、知りたいのか
 ・製作を龍神録プログラミングの館を見ながらやっているのですが、自分のゲームで必要の無い部分(ザコ敵など)を省きたいんです。しかし、どのプログラムが不要でどれが必要なのかわかりません。今できているのは「製作を龍神録プログラミングの館10」までのソースの画像ファイルを自分のに差し替えただけの状態です。
[2] 環境  
 [2.1] OS : Windows vista
 [2.2] コンパイラ名 : VC++ 2008EE
[3] その他
 どの程度C言語を理解しているか
・ほんの数日前に勉強を始めたばかりです。

 ライブラリを使っている場合は何を使っているか
  ・DxLib_VC2008_and_2005用

実装:
・2D背景と同じ画像で作った画像弾幕をよけながら相手に近づいて斬るゲーム。
・イメージ的には「ショット″を範囲を一定に限定して斬り″に」「ザコ敵を無しにして格闘ゲームみたいな一対一に」「弾幕にあたると動き止る(相手が近いと斬られる)」「一回あたるとミス″からHP制″」にしただけの龍神録(これだけならそんなに難易度高くないと思うので……)。
・あと、背景をスクロールではなく一定にして、普通の格闘ゲームのように微妙に動いているだけの背景に。それにともなって、画面が狭くなってしまうのでウィンドウサイズを大きくしたいと考えています。





523ポイント を手に入れた。


Name: バグ  ..ハッカー(165,820ポイント)   Date: 2009/08/13(木) 15:05   No:38051     
Title: Re:差し合い弾幕シューティングを作ろうとしているのですが・・・    
>>ほんの数日前に勉強を始めたばかりです。

厳しいことを言うようですが、この状態でいきなり本格的なゲームを作るのは無理だと思います。
まずは、もっともっと簡単なミニゲームを作って、徐々にレベルアップしていった方がよいと思いますよ。
例えば、じゃんけんとか、もぐら叩きとか、スペースインベーダーとか…


>>差し合い対戦弾幕シューティングの製作(一対一対戦シューティングもどき)

こういう作品でしたら、かなり原始的なゲームではありますが、ポンとかは参考にならないでしょうか?

ポン参考URL
ttp://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%B3_(%E3%82%B2%E3%83%BC%E3%83%A0)


>>製作を龍神録プログラミングの館を見ながらやっているのですが、自分のゲームで必要の無い部分(ザコ敵など)を省きたいんです。しかし、どのプログラムが不要でどれが必要なのかわかりません。

作り手が分からないのであれば、回答者に分かるはずがありません(^_^;)
まずは、龍神録のソースを見て、何をしているのかを理解できるようになってください。話はそれからだと思います。


412ポイント を手に入れた。

Name: Kou  ..初心者(8,360ポイント)   Date: 2009/08/13(木) 18:47   No:38055     
Title: Re:差し合い弾幕シューティングを作ろうとしているのですが・・・    

私もバグさんと似たような意見になりますが、まずは龍神録のプログラムが大体でも良いので、コードレベルで
どこで何をしてるのか理解できるようにならないと、大規模なゲームの作成は厳しいのではないでしょうか?

サンプルといってもこの手の規模になると、ヘッダファイルやソースの分割で、変数や構造体の定義(グローバル)
が別になっていたりするので、ぱっと見ただけ、あるいはその部分をコピペしたりしただけでは動かない場合が
ほとんどです。

逆にこの規模の他人が作成したプログラムをある程度理解できるレベルになれば(それほど大変な勉強じゃないですよ)、
それを参考にする事は難しくないと思うので、自分でも「この部分は必要」・「ここは不要」の
判断ができるのではないでしょうか?

特に今回の質問の場合テクニック等ではなく、ごく基本的な言語の理解レベルの話のようなので、冷たい言い方に
なりますが、まずはある程度でも自分で理解できるだけの力をつけましょう。


2倍のポイントを手に入れた! 632ポイント を手に入れた。

Name: Q  ..ぴよぴよ(709ポイント)   Date: 2009/08/13(木) 19:16   No:38056     
Title: Re:差し合い弾幕シューティングを作ろうとしているのですが・・・    
本題とは関係ないのですが、preタグで囲った文章は
適当に改行しないと横長になりそのスレ全てが
引きずられるし、IE以外のブラウザでは一行ごとに
余計な改行が入るのでちょっと••••••。



106ポイント を落としてしまった。

Name: sizuma [URL]  ..中級者(13,174ポイント)   Date: 2009/08/13(木) 19:18   No:38057     
Title: Re:差し合い弾幕シューティングを作ろうとしているのですが・・・    
何を目的にゲームを作ろうと思っているのでしょうか?
自分で作ってみて、それを人にさせて遊ばせたいという理由でしょうか?
仲間内の企画的なノリで作ろうとしているのでしょうか?

前者ならばバグさんやKouさんと同じ意見になるのですが、まずは努力が必要です。
ちょっと設定をいじる(移動スピードを変える、など)くらいならすぐ出来るようになると思いますけど、自分で考えた機能を実装しようとなると、経験がないとできないでしょう。
自分で考えたゲームについて、ある程度のプログラムの構造が設計できないとできないです。
(もちろん検索してヒットするアルゴリズムもあるでしょうけど)

インベーダーを見て、どういう風にコードを書けば同じような動きが再現できるかわかりますか?
わからないですよね。
というわけで、バグさんやKouさんが書かれてるように勉強してみてください。


291ポイント を手に入れた。



Name: taiyaki  ..ぴよぴよ(802ポイント)   Date: 2009/08/13(木) 14:54   No:38049       
Title: SelectD3DDeviceについて    
ゲームプログラミングをしているのですが、わからないところがあるので質問させていただきました。
HRESULT InitDXGraphics(void)
{
	// Direct3Dオブジェクトの作成

	g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);

	if (g_pD3D == NULL)

		return DXTRACE_ERR(L"InitDXGraphics Direct3DCreate9", E_FAIL);

<pre>
	// デバイス設定の選択

	UINT Adapter;

	D3DDEVTYPE Device;

	HRESULT hr = SelectD3DDevice(Adapter, Device);

	if (FAILED(hr))

		return DXTRACE_ERR(L"InitDXGraphics SelectD3DDevice", hr);


	// D3DDeviceオブジェクトの作成

	if (g_bWindow)

		g_D3DPP = g_D3DPPWindow;

	else

		g_D3DPP = g_D3DPPFull;

<pre>
	hr = g_pD3D->CreateDevice(Adapter, Device, g_hWindow,

						D3DCREATE_HARDWARE_VERTEXPROCESSING, &g_D3DPP, &g_pD3DDevice);

	if (FAILED(hr))

	{

		hr = g_pD3D->CreateDevice(Adapter, Device, g_hWindow,

						D3DCREATE_SOFTWARE_VERTEXPROCESSING, &g_D3DPP, &g_pD3DDevice);

		if (FAILED(hr))

			return DXTRACE_ERR(L"InitDXGraphics CreateDevice", hr);

	}


	// ビューポートの設定

	D3DVIEWPORT9 vp;

	vp.X		= 0;

	vp.Y		= 0;

	vp.Width	= g_D3DPP.BackBufferWidth;

	vp.Height	= g_D3DPP.BackBufferHeight;

	vp.MinZ		= 0.0f;

	vp.MaxZ		= 1.0f;

	hr = g_pD3DDevice->SetViewport(&vp);

	if (FAILED(hr))

		return DXTRACE_ERR(L"InitDXGraphics SetViewport", hr);

	// スプライトに表示するテクスチャの初期化

	hr = D3DXCreateTextureFromFile(g_pD3DDevice, g_szSpriteFile, &g_pD3DTexture);

	if (FAILED(hr))

		return DXTRACE_ERR(L"InitDXGraphics D3DXCreateTextureFromFile", hr);


	// スプライト機能の初期化

	hr = D3DXCreateSprite(g_pD3DDevice, &g_pD3DXSprite);

	if (FAILED(hr))

		return DXTRACE_ERR(L"InitDXGraphics D3DXCreateSprite", hr);


	return S_OK;

}
	HRESULT hr = SelectD3DDevice(Adapter, Device);

	if (FAILED(hr))

		return DXTRACE_ERR(L"InitDXGraphics SelectD3DDevice", hr);

のところが通ってしまって困っています。通らなく無事に処理できるように
したいのですがどうしたらいいのでしょうか?


802ポイント を手に入れた。


Name: taiyaki  ..ぴよぴよ(809ポイント)   Date: 2009/08/13(木) 14:57   No:38050 解決!     
Title: Re:SelectD3DDeviceについて    
すみません。解決しました。

7ポイント を手に入れた。



Name: スペ  ..ぴよぴよ(572ポイント)   Date: 2009/08/07(金) 08:36   No:37855       
Title: 2D格ゲーを作ろうとしたんですが・・・    
皆さんはじめまして(初めてなので変なところがあるかもしれませんがご容赦願います)
まずはテンプレをば。

--------------------------------------------------------------------------------

[1] 質問文
 [1.1] 自分が今行いたい事は何か
    ・初代サムライスピリッツのような2D格闘ゲームの製作

 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
    ・格ゲーはシューティングを応用して作れると聞いたので、プログラミングの館を一通りやってみまし     た。

 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
    ・土台(キャラが立っている状態で足をつけているところ)を作り、そこにキャラを立たせる方法がわ     かりません。

 [1.4] 今何がわからないのか、知りたいのか
 ・キャラを地面に立たせる方法
    ・どんな風に応用すればシューティングを格ゲーにできるのか
[2] 環境  
 [2.1] OS : Windows vista
 [2.2] コンパイラ名 : VC++ 2008EE
[3] その他
 どの程度C言語を理解しているか
・ほんの数日前に勉強を始めたばかりです。

 ライブラリを使っている場合は何を使っているか
  ・DxLib_VC2008_and_2005用

--------------------------------------------------------------------------------
フレームデータやモーションは(まず2キャラ分)決まっており絵師も見つかったのですが、プログラムに強い人がいなかったのでやむを得ず私がプログラミングを担当することとなりました。しかし早速つまずいてしまいました(やはり素人がやるには無茶なのでしょうか?)。
どうか、アドバイスをお願いします。






572ポイント を手に入れた。


Name: situmon  ..プログラマー(37,735ポイント)   Date: 2009/08/07(金) 09:25   No:37858     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
素人ですが、
最初に、サンプルプログラミングのサンプルによいものが載っているかもしれません。
リンゴをとるゲームは参考によいかもしれません。
>・格ゲーはシューティングを応用して作れると聞いたので、プログラミングの館を一通りやってみました。
一通りやってみた・・・とはどういう意味ですか?
実際にコピペして実行したのか、自分でいちど同じものを書いたのか。
一度書いてみると覚えます。
>・どんな風に応用すればシューティングを格ゲーにできるのか
まちがえていたらすいませんが、当たり判定は参考になるのではないでしょうか?
あとパンチのほかにショットを加えるなら(相手にショットを打つ)
参考になりますよ。

>・ほんの数日前に勉強を始めたばかりです。

まえ、もっとC言語の本を読んだほうがいいといわれましたが、
そのとおりで、いままで何もかも質問していましたが、
C言語の本を読んでかなり疑問が減りました。
特に明快入門C++の本はいいです。
といっても読破というかすべて覚えたわけではないですが。



252ポイント を手に入れた。

Name: ひよこ  ..熟練のプログラマー(47,980ポイント)   Date: 2009/08/07(金) 09:33   No:37860     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
格闘ゲームなら足場を作るには簡単に

キャラのY座標++;
//自然に落ちてくる(重力)

if(キャラのY座標>足場になる位置)キャラのY座標=足場になる位置;
//キャラのY座標が足場になる位置より下に行ったらキャラのY座標を足場になる位置にする

立っているように見せるこれは絵で表します。


94ポイント を手に入れた。

Name: バグ  ..ハッカー(165,204ポイント)   Date: 2009/08/07(金) 09:35   No:37861     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
『地面に立たせる』という風に考えるのではなく、『ジャンプ時以外は上下に動かない』と考えてはどうでしょうか?

48ポイント を手に入れた。

Name: スペ  ..ぴよぴよ(701ポイント)   Date: 2009/08/07(金) 09:36   No:37862     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
アドバイスありがとうございます。
リンゴのゲームですか。参考にしてみます。

>一通りやってみた・・・とはどういう意味ですか?
 コピペして実行しました。かんばって書いてみますね。

とりあえず、本を読むことからはじめようと思います。ありがとうございました。



129ポイント を手に入れた。

Name: スペ  ..ぴよぴよ(743ポイント)   Date: 2009/08/07(金) 09:51   No:37863     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
早い対応ありがとうございます。
なるほど・・・・・・参考にさせてもらいますね。


42ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(97,015ポイント)   Date: 2009/08/07(金) 10:42   No:37865     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
バグさんのお考えのように、通常時はy座標に上下動かない
で十分かと思います。ただ、常に浮いたキャラを作るのなら、
描写でちょっといじらなければなりませんが・・・。

>フレームデータ
ってことは、外部読み込みですか^^;
なかなか大変そうですね。
・・・でも、絵師がいることは、やる気が倍増しそうですね^^
(本当にうらやまry)

>どんな風に応用すればシューティングを格ゲーにできるのか
situmonさんのおっしゃる、あたり判定は確かに参考になるかと思います。
っというか、図形同士の衝突が分かればいいかと思いますけどね^^;

がんばってください^^


209ポイント を手に入れた。

Name: 夢夢  ..かけだし(2,405ポイント)   Date: 2009/08/07(金) 11:42   No:37866     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
インベーダーを90度回転した感じを想像してみてください。
どちらも敵の方に向かって弾を撃ちます。それがパンチと思ってください。
当たるとお互いにダメージを受けます。

格闘ゲームはそれに、防御(押している間ダメージを受けない、又はダメージが減少する)
技(当たり判定の大きさの違い・ダメージ量の違い)
が付きます。

まずは、簡単な対戦シューティング(お互いが上下に動き弾を打ち合う)を作り、
そこから徐々に格闘ゲームに近づける方法がいいと思います。


164ポイント を手に入れた。

Name: スペ  ..ぴよぴよ(963ポイント)   Date: 2009/08/07(金) 19:10   No:37873     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
>『地面に立たせる』という風に考えるのではなく、『ジャンプ時以外は上下に動かない』
>インベーダーを90度回転した感じ

 ということは、「横シューティングの上下移動をジャンプで行うゲーム」というのをベースに作ればいいんですかね? 


>キャラのY座標++;
//自然に落ちてくる(重力)

if(キャラのY座標>足場になる位置)キャラのY座標=足場になる位置;
//キャラのY座標が足場になる位置より下に行ったらキャラのY座標を足場になる位置にする

というのがよくわからないんですけど、参考になるページってありますか?


220ポイント を手に入れた。

Name: TKOZ  ..プログラマー(29,324ポイント)   Date: 2009/08/07(金) 22:22   No:37883     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
コンピュータの座標軸は、

原点(0,0)→→→→→(640,0)





(0,480)      (640,480)

となっています。
従って、キャラのY座標をcyとし、足場になる位置を460にします。
すると、
if(cy>460) cy=460;となります。
//cyが460より大きければ460にする


2倍のポイントを手に入れた! 326ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(97,398ポイント)   Date: 2009/08/07(金) 22:30   No:37884     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
いや、どちらかというと、シューティングは考えないほうがいいんじゃ・・・
とも思います^^;
弾は画面外までいっても、パンチはユーザーが決めた範囲のみのあたり判定だし、
参考にするところが少量かなっと。

とりあえず、ここの管理人さんが紹介している
ゲームプログラミングの館を見て、それを参考に試行錯誤を始めることが
一番じゃないかって思います。
ゲームの流れを考えるには、初めての人にはもってこいかと。

>>キャラのY座標++;
>//自然に落ちてくる(重力)

>if(キャラのY座標>足場になる位置)キャラのY座標=足場になる位置;
>//キャラのY座標が足場になる位置より下に行ったらキャラのY座標を足場になる位置にする

これはジャンプの処理(?)なんで、今はそんなに気にすることないかと。
これよりも、どのような実装にするかを考えるべきです。
マ○オみたいに、下に落ちることもあるかもしれないですし、
ある程度の速度で地面に落ちたら、地面がへこんで、
地面より、下に行くかもしれないですよね。
そうなると、また実装しなおしになります。

とにかく、まずは、どのように自分が実装したいかを
固めるべきかと。


383ポイント を手に入れた。

Name: sizuma [URL]  ..中級者(12,401ポイント)   Date: 2009/08/07(金) 22:59   No:37887     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
>コピペして実行しました。かんばって書いてみますね。
せっかく2D格闘を作ろうっていう計画があるんだから、ゲームプログラミングの館をリファレンス(参考)として使った方がいいのでは?
それか実際に利用しそうな機能を意識して探しながら最初から読んでみる、とか。


とりあえず、まずは何をすればいいのかを考えると
>初代サムライスピリッツのような2D格闘ゲーム
やったことないのでわからないのですが、ゲーム画面だけを考えるとまず最初に出来そうなのは

・背景を表示させてキャラを動かす

これは
3.画像を表示する。
12.画像を動かす
を重点的に参考にすればいけそうですよね。


最初はこんな風にして動くプログラムを書きながら、機能を追加していく方が簡単ではないでしょうか?
・画像が表示できた
    ↓
・前後に動かせた
    ↓
・敵も表示できた
    ↓
・敵を通り抜けないように当たり判定ができた
    ↓
以下どんどん続く。



333ポイント を手に入れた。

Name: スペ  ..ぴよぴよ(839ポイント)   Date: 2009/08/08(土) 07:43   No:37905     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
>とにかく、まずは、どのように自分が実装したいかを固めるべきかと。
実装とは、どういう仕様にするかということですか?

>従って、キャラのY座標をcyとし、足場になる位置を460にします。
すると、
if(cy>460) cy=460;となります。
//cyが460より大きければ460にする


これは、どうやって設定すればいいんでしょうか?(ゲームプログラミングの館に似たようなのを見つけられなかったので)


124ポイント を落としてしまった。

Name: kazuoni [URL]  ..比類無きプログラマー(97,563ポイント)   Date: 2009/08/08(土) 09:36   No:37906     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
日本語間違えてました。。
どのような仕様にするかですね。
途中から変更することも別に悪くないですが、
やはり、変更箇所が多いと、バグを起こす可能性も上がってきます。
なので、先に、ある程度決めたほうがいいかなって思います。


97ポイント を手に入れた。

Name: TKOZ  ..プログラマー(29,255ポイント)   Date: 2009/08/08(土) 11:54   No:37910     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
サンプルプログラムです。

キックのアニメーションが出来ませんが、
ジャンプ処理や、左右の移動処理の参考になると思います。

DXライブラリのLibファイル等は入っていないので、追加して
コンパイルして下さい。


69ポイント を落としてしまった。

Name: TKOZ  ..プログラマー(29,262ポイント)   Date: 2009/08/08(土) 11:57   No:37911     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
スクリーンショットです。


7ポイント を手に入れた。

Name: Kou  ..初心者(6,390ポイント)   Date: 2009/08/08(土) 13:59   No:37915     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
同じ初心者としての意見なので、みなさんの様な専門的な答えにはならないと思いますが、
参考になれば幸いです。

以下長文になります。

・キャラを地面に立たせる。
 ・仕様として地面になるグラフィックがあるのであれば、まずそれを表示してみる。(DrawGraph等)
 ・上記で地面の画像が無いのであれば、画面y座標の最大値が地面になる。
 ・キャラ画像(通常の立ち絵)を表示してみる。(DrawGraph等)
 ・キャラ画像のy座標を上下に微調整して、地面との調度良い位置を決定し、その座標を#defineで定数にする。
 ・上記までで、通常の立ち状態になります。

 仮コード
#define CH_MAX_Y 400 //通常のたち位置がy座標400とする場合

void DrawGraphAll( void ); //前方宣言が抜けていたのを修正しました。

  WinMain(・・・)
double cx, cy; //キャラx、y座標
int gh_char; //キャラ画像ハンドル

//DxLibの初期化処理など

gh_char = LoadGraph( "画像パス" );
cx = 100;
cy = CH_MAX_Y;

while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){
//様々な処理
    //入力判定、当たり判定など

DrawGraphAll(); //画像描画関数呼び出し
}

//DxLibの終了処理
}

void DrawGraphAll( void ){
//プレーヤー画像の描画
//描画関数内にプレーヤー、敵、背景の処理をまとめるのが定石。(場合によって、さらに描画処理を分ける)
DrawRotaGraphF( cx, cy, 1.0f, 0.0f, gh_char, TRUE );
}

簡単にだと、こんな感じになると思います。

・キャラの移動、ジャンプ等
 ・キャラの移動に関しては、こちらのサイトのサンプルが大変参考になります。
 ・ジャンプもサンプルにあったと思いますが、単純にキー入力の判定と、y座標の計算(重力を加味した方がリアル)だけです。

・当たり判定
 ・格闘ゲームの場合、体、手、足、武器、飛び道具など様々な当たり判定が必要です。
 ・飛び道具(波動拳みたいなもの)の場合は、シューティングの弾の当たり判定が似ていると思います。
 ・その他(体、手、足など)はその時のモーションにや仕様によって変わりますが、キャラの構造体に当たり判定
  用xy座標の配列を確保して、配列の各要素を体、手などに割り振ります。
 ・後は状況によって当たり判定用配列の座標を更新して、条件分岐で当たり判定処理をするのが考え方として
  楽ではないかと思います。(簡略化等は後で考えた方が良いと思いますよ)
 ・とりあえず必要になる変数やデータが揃ってしまえば、各処理はシューティングのコードも十分参考になると思います。

初心者の素人考えなので、どこまで参考になるかわかりませんが、お役に立てれば幸いです。


1,117ポイント を手に入れた。

Name: スペ  ..かけだし(1,139ポイント)   Date: 2009/08/08(土) 17:36   No:37929     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
サンプルありがとうございます! 早速参考にしてみます!
移動以外だと、やっぱり当たり判定が大変みたいですね……。がんばります。


実装は
イメージは、
・初代サムライスピリッツのような一撃の威力が高い斬り合いゲーム。
で、具体的には
・コマンド入力技は必殺技と一撃即死技。
・大武器、中武器、弱武器、大素手、中素手、小素手の6ボタン。大武器と大素手は、格小中ボタンを同時押し。あと、レバー入れ+大素手or大武器で投げ。
・表示するパラメータはHPのみで、残り四割以下で即死技使用可能フラグが立つ。
・非表示パラメータで武器HPがあり、ガードすると減る。零になると武器が壊れる。
・先行入力(チェーンコンボ)コンボは無し。目押しコンボ("相手のダメージ硬直F−自分の攻撃硬直F=有利時間"なので、"有利時間Fよりも発生の早い技ならコンボはつながる)。
・空振りした一部通常技を必殺技でキャンセル可能。(技毎にキャンセル受付F設定)
・削りダメージ有り。全技一律。
・ジャンプは一部キャラ以外一段ジャンプ。
・一ラウンドあたりの試合時間は99カウント。
・カウンターヒット時は相手のダメージ硬直増加(結果、有利Fが増える)。
という感じです。
キャラ毎に個別で設定したいのは
・HPの総量(防御係数ほうが簡単ですかね?)
・武器HPの総量
・食らい判定の大きさと移動速度と体重(落下速度)
・各種技の性能(範囲、判定の大きさ等)
です。


300ポイント を手に入れた。

Name: Kou  ..初心者(6,907ポイント)   Date: 2009/08/08(土) 19:11   No:37932     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    

仕様を見る限り、かなり大変そうですね・・・(汗)

sizumaさんの回答にあったように、まずは画像の表示や、移動処理、単純な当たり判定処理・・・など一段階
毎に実装を目指した方が初心者(私もですが)には、結果的に近道になると思いますよ。

格闘ゲームの当たり判定処理は矩形での判定が多かったと思いますが、最初は円の判定で実装して、うまく行ったら、
矩形の判定を考えてみてはどうでしょうか?(矩形の場合矩形の回転が必要になる為)
こちらのサンプルには結構基本的な処理のサンプルがあるので、参考にしてみてください。

後は技の判定発生フレームや喰らい時の硬直フレームの管理が大変だと思います。
スト2の昇竜拳みたいに、しゃがみ状態から立ち上がり寸前までは無敵とか、うまく処理しないと相打ち上等!なゲームになるので・・・


236ポイント を手に入れた。

Name: スペ  ..かけだし(1,287ポイント)   Date: 2009/08/08(土) 19:49   No:37933     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
実装のやつはあくまで最終形なんで、それを目指して一個一個やってきたいと思います。


質問なんですが、ファイルというのはどういう風に分けて作ればいいのでしょうか?
"りんご落ちゲー"では背景やキャラは一緒のファイルに入っているのに、"龍神録"では沢山のファイルがあります。これはなぜなんですか?
そして、格ゲーではどんな風にファイルを作るのがいいんでしょうか?


148ポイント を手に入れた。

Name: situmon  ..プログラマー(37,763ポイント)   Date: 2009/08/08(土) 20:25   No:37934     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
りんご落ちげーは少しの画像しか使わないのでいいだろうと思ったからでしょう。
龍神録は非常にたくさんの画像を使うので一つ一つ分けたほうがいいです。
たとえば、
敵ならenemy、プレイヤーならplayerと自分にわかりやすい形で分けるのがいいと思います。


80ポイント を手に入れた。

Name: Kou  ..初心者(7,131ポイント)   Date: 2009/08/08(土) 21:14   No:37937     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
画像のファイル分けですが単純に分けるなら、キャラ毎に分けるのが管理の面で楽だと思いますよ。
キャラひとりでも、通常立ち、パンチ各種、キック各種、斬る、投げ、ジャンプ、喰らいモーション・・・
これがアニメーションする中間画像プラス、左右向き分あるわけですから・・・できればキャラひとり分でも
2〜3枚位に分けないと、画像ファイルの容量が大きくなりすぎるかも・・・
後は、背景やエフェクト、その他など自分が管理しやすいようにフォルダ分けしておけば良いのではないでしょうか?


224ポイント を手に入れた。

Name: スペ  ..かけだし(1,399ポイント)   Date: 2009/08/09(日) 08:12   No:37941     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
分けてみると結構な数になりましたが、ずいぶん見やすくなりました。回答ありがとうございました。


背景ファイルに"ゲームプログラミングの館4. 透過処理をした画像を表示する"を、PCキャラファイルに、19. キャラをキー入力によって移動させる"を丸々コピペしたら「1 つ以上の複数回定義されているシンボルが見つかりました」とエラーが出ました。どうやって解決すればいいのでしょうか?


112ポイント を手に入れた。

Name: sizuma [URL]  ..中級者(12,671ポイント)   Date: 2009/08/09(日) 08:34   No:37942     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
とりあえずここ読んでみてください
2、ウィンドウの表示http://dixq.net/g/#2

というか
>一通りやってみた・・・とはどういう意味ですか?
>コピペして実行しました。かんばって書いてみますね。

コピペして実行は一通りできたんじゃなかったんですか??

追記
あぁ、ゲームプログラミングの館ってコンテンツごとにコンパイルできるサンプルが置いてるんですね。
失礼しました


80ポイント を手に入れた。

Name: sizuma [URL]  ..中級者(12,761ポイント)   Date: 2009/08/09(日) 08:45   No:37943     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
読みましたか?
ココ
って書いてある部分が、(主に)参考にする部分です。
コピペするにしても、ココでどんな処理をしているのかを理解して、処理を加えていってください。
ココのソースをそのままコピペしてもほぼ動かないと思いますので。

サンプル2つを1つのソースにまるまるコピペして実行してみた、と解釈したのですが。
こういう解釈でよかったですかね?


90ポイント を手に入れた。

Name: スペ  ..かけだし(1,651ポイント)   Date: 2009/08/10(月) 07:11   No:37965     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
遅れてすみません。皆さんのおかげで前回のエラーは解決したのですが、また新しいエラーが出てしまいました。

キャラの描写のときに「error C2228: '.img' の左側はクラス、構造体、共用体でなければなりません」というエラーがでるのですが、どうすればいいのでしょうか?
龍神録プログラミング(第四章)のほうで動いているのを(「#include "../include/GV.h"」を「#include "DxLib.h"」に変えただけです)使っているはずなのですがうまくエラーが出てしまいます。

「#include "../include/GV.h"」を変更したのがまずかったのでしょうか?


252ポイント を手に入れた。

Name: conio [URL]  ..プログラマー(36,547ポイント)   Date: 2009/08/10(月) 09:56   No:37966     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
-----------------
#include "●●●"
-----------------
↑これがどういう事をしているのか、分かりますか?


おそらく、変数や関数の定義が取り込まれなかったのではないのでしょうか。
その為、「得体の知れない変数にメンバアクセス演算子(.)を使った」事になり、
エラーが出たのでは?

>>キャラの描写のときに「error C2228: '.img' の左側はクラス、構造体、共用体でなければなりません」というエラーがでるのですが、どうすればいいのでしょうか?
「#include "../include/GV.h"」 →「#include "DxLib.h"」に変更してエラーが出たのであれば、
それを、もう一度「#include "../include/GV.h"」に戻せば良いと思います。

あと、「GV.h」の方で「DxLib.h」をインクルードしているみたいなので、
「GV.h」をインクルードすれば、「DxLib.h」も同時にインクルードされると思います。


236ポイント を手に入れた。

Name: スペ  ..かけだし(1,710ポイント)   Date: 2009/08/11(火) 06:55   No:37986     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
元に戻してみたのですが、そうしたら今度は「 fatal error C1083: include ファイルを開けません。'../include/GV.h': No such file or directory」とでてきました。

どうやって解決すればいいですか?


59ポイント を手に入れた。

Name: TKOZ  ..プログラマー(29,303ポイント)   Date: 2009/08/11(火) 08:59   No:37988     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
現在のソースコード(プログラム)をアップロードしてはいかがですか?
そうすれば、みな、分かりやすく答えられると思います。


41ポイント を手に入れた。

Name: conio [URL]  ..プログラマー(36,728ポイント)   Date: 2009/08/11(火) 10:04   No:37992     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    

#include"../include/GV.h"

としているのでしょうか?

恐らく、フォルダやファイルの位置がおかしいのだと思います。
相対パスの指定が間違っているのでしょう。


で、#include"../include/GV.h"というのは、
---------------------------------------------------------------------------------
1つ上のディレクトリにある、"include"というフォルダの中にある
GV.hというヘッダファイルをインクルードする
---------------------------------------------------------------------------------
という意味になります。

そこにGV.hがあるのか調べてみてください。
もしくは、#include"../include/GV.h"と記述したソースファイルの場所がおかしくないかを
確認してください。

┏━━━━━━━━━━━━━━┓
┃ ┏━━━━━━━━━┓  ┃
┃┏┫フォルダ"include" ┣┓ ┃
┃┃┗━━━━━━━━━┛┃ ┃
┃┃※ここにGV.hがあるのか┃ ┃
┃┃ 調べる       ┃ ┃
┃┗━━━━━━━━━━━┛ ┃
┃ ┏━━━━━━━━━━┓ ┃
┃┏┫フォルダ(名は不明)┣┓┃
┃┃┗━━━━━━━━━━┛┃┃
┃┃#include"../include/GV.h"┃┃
┃┃と書かれたソースファイル┃┃
┃┗━━━━━━━━━━━━┛┃
┗━━━━━━━━━━━━━━┛

で、どのソースファイルがどのフォルダに入っているのかが分からないので、
解決できなければ、具体的なファイルの位置などを書いてみてください。


181ポイント を手に入れた。

Name: スペ  ..かけだし(1,784ポイント)   Date: 2009/08/11(火) 10:18   No:37994     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
沢山のファイルに分けたので、アップは難しいかもしれません・・・


あの、さっき気づいたんですけど、もしかして龍神録プログラミングの手順に従って作る(自分で作った新規プロジェクトにコピペしていく)ではエラーが出ますか? それが原因な気がしてきたんですが・・・


74ポイント を手に入れた。

Name: conio [URL]  ..プログラマー(37,096ポイント)   Date: 2009/08/11(火) 10:55   No:37998     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
>>沢山のファイルに分けたので、アップは難しいかもしれません・・・
ソースファイル自体は別に問題ではありません。

どんなフォルダがあり、そのフォルダの中にどんなソースファイルが入っているのか、
という階層構造の問題です。

>>あの、さっき気づいたんですけど、もしかして龍神録プログラミングの手順に従って作る(自分で作った新規プロジェクトにコピペしていく)ではエラーが出ますか? それが原因な気がしてきたんですが・・・

新規プロジェクトを作る、ということは場所も変わりますから
当然、ファイルを読み取れない場合も出てくると思います。

とりあえず、フォルダ分けをしなければ全部
---------------------
#include"GV.h"
---------------------
みたいに直接 「ヘッダ名.h」みたいに出来ますよ。
(ゴチャゴチャしてしまいますけども)

-------------------------
#include"../include/GV.h"
-------------------------
みたいにしたいのであれば、ソースファイルだけでなく、フォルダなどの構造も
そっくりそのままコピーしないと駄目かと。


368ポイント を手に入れた。

Name: conio  ..プログラマー(37,679ポイント)   Date: 2009/08/11(火) 12:49   No:37999     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    

実際にダウンロードしてみたのですが、
プロジェクトファイルのある場所に"mydat"というフォルダがありますね。
で、大体こんな感じになってます。
----------------------------------------
   mydat
    ┃
 ┏━━┻━━┳━━━┓
include  source  PSD
 ┃     ┃
 ┃     ┃
define.h  char.cpp
func.h   ini.cpp
GV.h   <以下略>
struct.h
function.h
----------------------------------------
  
新しいプロジェクトとして製作しているとの事ですが、
--------------------------------------------------------------------------------------
@新しく作ったプロジェクトの所に、"mydat"フォルダがあるか
A#include"../include/GV.h"と記述したソースファイルは"source"というフォルダの中にあるか
BGV.hは"include"というフォルダにあるか
--------------------------------------------------------------------------------------
これを調べてみてください。


また、新しく作ったプロジェクトの所に、フォルダも何も作っていないのであれば、
"mydat"フォルダをそのままコピーして持って来ればよいと思います。


583ポイント を手に入れた。

Name: スペ  ..かけだし(1,873ポイント)   Date: 2009/08/12(水) 03:20   No:38029     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
ありがとうございました!わかりやすい説明で、うまく理解できました! アドバイス通りにやったら開くことができました。

質問なんですが、龍神録に入っている「DxDirectX.h」と「DxLib.h」とは一体なにをしているファイルなのでしょうか? 


89ポイント を手に入れた。

Name: conio [URL]  ..プログラマー(37,872ポイント)   Date: 2009/08/12(水) 22:40   No:38042     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
DXライブラリのヘッダファイルですね。
中身を見たことは無いのですが、

画像を表示する関数や文字列を表示する関数、
音楽を扱う関数など、

ゲームに利用するような基本的な機能を提供しています。


78ポイント を手に入れた。

Name: スペ  ..かけだし(1,985ポイント)   Date: 2009/08/13(木) 13:46   No:38046     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
そうだったんですか。疑問がなくなってすっきりしました。

何日か考えていたのですが、技術的に無理がありそうなので、実装とジャンルを変更して作っていこうと思います。それに伴い質問を立て直そうと思います。いままで質問に答えてくださった方々、本当にありがとうございました。


112ポイント を手に入れた。

Name: スペ  ..かけだし(1,992ポイント)   Date: 2009/08/13(木) 13:48   No:38047 解決!     
Title: Re:2D格ゲーを作ろうとしたんですが・・・    
解決に設定し忘れた(汗)

7ポイント を手に入れた。



Name: チルチル  ..プログラマー(39,384ポイント)   Date: 2009/08/12(水) 20:07   No:38041       
Title: atan2関数のエラー抑制について    
atan2関数の引数に両方とも0に近い数値を渡すとエラーが出ますよね
これが出るとソフトが一時停止してしまうので出ないようにしたいのですが
私が思い付くのはatan2関数をAtan2関数にでも置き換えて
数値が両方とも0の場合はランダムな角度を返すようにするぐらいです
何かエラーが出ないようにする方法は無いでしょうか?
ある場合は何が返って来るのでしょうか?
BCCでBorlandC++ Compiler 5.5を使用しております


108ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(403,647ポイント)   Date: 2009/08/13(木) 00:36   No:38044     
Title: Re:atan2関数のエラー抑制について    
 とりあえず、エラーが出なくなる方法としては過去ログを。

C言語何でも質問掲示板
ttp://www.play21.jp/board/formz.cgi?action=res&resno=33007&page=&lognum=101&id=dixq&rln=33065#33017



>ランダムな角度を返すようにするぐらいです

 これで意図に沿った動きになるのならいいのですが……。
 両方が0なら角度は求められないので、根本的に処理を分岐させるのが無難です。


232ポイント を落としてしまった。

Name: チルチル  ..プログラマー(39,491ポイント)   Date: 2009/08/13(木) 01:46   No:38045 解決!     
Title: Re:atan2関数のエラー抑制について    
過去ログの通りやってみるとエラーが出なくなりました

意図に沿った動きにはならないと思いますが
角度が求められなくても角度は必要なので
何が返って来るのかは謎ですが
処理を続行するしかなさそうです

どうもありがとうございました


107ポイント を手に入れた。



Name: iyhakj  ..ぴよぴよ(887ポイント)   Date: 2009/08/12(水) 08:43   No:38031       
Title: 配列を利用したC++のプログラム    
只今、C++で配列のプログラムについて教わっているのですが、今回その配列を使い、考えて
プログラムを作成してみろと課題が出されました。

そこで皆さんに質問です。どのようなプログラムを作ったらよいでしょうか?
オススメなどありましたら、ぜひ教えていただきたいです。

現在自分は基本的な命令文は教わりました。for,while,printf,scanf,if else,switch case等です。
二次元配列はまだ教わっていません。

よろしくお願いします。


127ポイント を手に入れた。


Name: kazuoni [URL]  ..比類無きプログラマー(98,307ポイント)   Date: 2009/08/12(水) 09:41   No:38034     
Title: Re:配列を利用したC++のプログラム    
なんでも良いと思いますよ。w
正直、検索かければ、多くのサンプルコードが紹介されているので、
それを丸うつし参考にすればよいかと^^;

昇順、降順ソートなんてのもよいかもしれないです。


56ポイント を手に入れた。

Name: conio  ..プログラマー(37,794ポイント)   Date: 2009/08/12(水) 14:13   No:38038     
Title: Re:配列を利用したC++のプログラム    

・配列の要素をひっくり返す
-------------------------------
test[0] = 6 ⇒ test[0] = 80
test[1] = 30 ⇒ test[1] = 24
test[2] = 24 ⇒ test[2] = 30
test[3] = 80 ⇒ test[3] = 6
-------------------------------

・昇順、または降順にソートする
-------------------------------
test[0] = 4 ⇒ test[0] = 2
test[1] = 8 ⇒ test[1] = 4
test[2] = 10 ⇒ test[2] = 8
test[3] = 2 ⇒ test[3] = 10
-------------------------------

とりあえず、こんな感じの問題はどうでしょう?


115ポイント を手に入れた。

Name: iyhakj  ..ぴよぴよ(978ポイント)   Date: 2009/08/13(木) 00:19   No:38043 解決!     
Title: Re:配列を利用したC++のプログラム    
>>kazuoniさん
回答ありがとうございます!m(_ _)m
もう少し自分で調べてみます。

>>conioさん
回答ありがとうございます!m(_ _)m
いいですね!さっそく作ってみようと思います。


91ポイント を手に入れた。



Name: Eda  ..かけだし(1,045ポイント)   Date: 2009/08/11(火) 14:12   No:38004       
Title: ファイルからデータの読み込み    
テンプレに沿って質問させていただきます。
[1] 質問文
 [1.1] 自分が今行いたい事は何か
    ファイルからデータの読み込み
 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
    数値計算のために必要なデータの読み込みが上手くいきません。
    下にそのプログラムを簡単にモデル化したものを示します。
    これは読み込んだものをそのまま出力するプログラムのつもりです。

#include <stdio.h>
#include <math.h>
#define B 3600
#define Q 10
/*****************************/
int main()
{
int i,PN,M1;
double U0,H,K,KD0[Q],KD1[Q],KD2[Q],KD3[Q],KD4[Q],KV0[Q],KV1[Q],KV2[Q];
double R0[Q],R01[Q],R2[Q],R3[Q],R4[Q],R5[Q],NL[Q],NLC[Q],NH[Q],NHC[Q],HA[Q],JPN[Q];
FILE *in_file,*out_file;
char in_filename[Q],out_filename[Q];
i=0;
/*read file*/
printf("Input filename: ");
scanf("%s",in_filename);
in_file = fopen(in_filename,"r");
fscanf(in_file,"%lf%lf%d%lf%d%lf",&H,&K,&PN,&NH[i],&M1,&U0);
for(i=0;i<3;i++){
fscanf(in_file,"%lf%lf%lf%lf%lf",&KD0[i],&KD1[i],&KD2[i],&KD3[i],&KD4[i]);
}
for(i=0;i<3;i++){
fscanf(in_file,"%lf%lf%lf",&KV0[i],&KV1[i],&KV2[i]);
}
for(i=0;i<3;i++){
fscanf(in_file,"%lf%lf%lf%lf%lf%lf",&R0[i],&R01[i],&R2[i],&R3[i],&R4[i],&R5[i]);
}
for(i=0;i<3;i++){
fscanf(in_file,"%lf%lf%lf%lf",&NL[i],&NLC[i],&NH[i],&NHC[i]);
}
for(i=0;i<3;i++){
fscanf(in_file,"%lf",&HA[i]);
}
for(i=0;i<2;i++){
fscanf(in_file,"%lf",&JPN[i]);
}
printf("Output filename: ");
scanf("%s",out_filename);
out_file = fopen(out_filename,"w");
for(i=0;i<3;i++){
fprintf(out_file,"%lf%lf%lf%lf%lf%lf\n",&H,&K,&PN,&NH[i],&M1,&U0);
}
for(i=0;i<3;i++){
fprintf(out_file,"%lf%lf%lf%lf%lf\n",&KD0[i],&KD1[i],&KD2[i],&KD3[i],&KD4[i]);
}
for(i=0;i<3;i++){
fprintf(out_file,"%lf%lf%lf\n",&KV0[i],&KV1[i],&KV2[i]);
}
for(i=0;i<3;i++){
fprintf(out_file,"%lf%lf%lf%lf%lf\lf\n",&R0[i],&R01[i],&R2[i],&R3[i],&R4[i],&R5[i]);
}
for(i=0;i<3;i++){
fprintf(out_file,"%lf%lf%lf%lf\n",&NL[i],&NLC[i],&NH[i],&NHC[i]);
}
for(i=0;i<3;i++){
fprintf(out_file,"%lf\n",&HA[i]);
}
for(i=0;i<1;i++){
fprintf(out_file,"%lf\n",&JPN[i]);
}
fclose(in_file);
fclose(out_file);
return 0;
}

 [1.3] どのようなエラーやトラブルで困っているか(コンパイルエラーは無し)
    出力して得られた結果が私の思っているものと異なる。
 [1.4] 今何がわからないのか、知りたいのか

[2] 環境  
 [2.1] OS : WindowsXP
 [2.2] コンパイラ名 :Borand C++
[3] その他
 ・どの程度C言語を理解しているか
大学で軽く習った程度



452ポイント を手に入れた。


Name: Eda  ..かけだし(1,547ポイント)   Date: 2009/08/11(火) 14:17   No:38005     
Title: Re:ファイルからデータの読み込み    
念のため、入力ファイルと出力ファイルも記載します。

入力ファイル
-1.50486915050162E-06 143670.851675779 3 1 2093 -9.57304853288856E-07
-9.57 1 0 0 0
-9.5 1 0 0 0
-9.5 1 0 0 0
8 1 0
8 1 0
8 1 0
1 0 0 0 0 0
1 0 0 0 0 0
-1 0 0 0 0 0
0 0 .25 .25
.45 .45 .55 .549027557934215
.75 .75 1 1.00003160034355
.00000001
.00000001
.00000001
500
595


出力ファイル
0.0000000.0000000.0000000.0000000.0000000.000000
0.0000000.0000000.0000000.0000000.0000000.000000
0.0000000.0000000.0000000.0000000.0000000.000000
0.0000000.0000000.000000+NAN500.000000
0.0000000.0000000.000000+NAN500.000000
0.0000000.0000000.000000+NAN500.000000
0.0000000.000000+NAN
0.0000000.000000+NAN
0.0000000.000000+NAN
0.0000000.0000000.0000000.0000000.000000lf
0.0000000.0000000.0000000.0000000.000000lf
0.0000000.0000000.0000000.0000000.000000lf
0.0000000.0000000.0000000.000000
0.0000000.0000000.0000000.000000
0.0000000.0000000.0000000.000000
0.000000
0.000000
0.000000
0.000000


502ポイント を手に入れた。

Name: pooka [URL]  ..中級者(12,291ポイント)   Date: 2009/08/11(火) 14:54   No:38007     
Title: Re:ファイルからデータの読み込み    
ぱっと見ただけですが、
・入力ファイルの数値は半角スペースで区切られているようなので、
 fscanfで%lfと%lfの間に半角スペースを入れる必要があると思います。(出力も)

・出力するときは&を付ける必要はありません。

・%lfが\lfになってる箇所がある。


100ポイント を手に入れた。

Name: non  ..熟練のプログラマー(60,275ポイント)   Date: 2009/08/11(火) 20:58   No:38022     
Title: Re:ファイルからデータの読み込み    
fscanfはスペースで区切る必要はありません。
fprintfの方はスペースで区切らないとつながっちゃいます。

宣言で用意した型と、書式指定子が対応していないところがあります。
fprintfでは%lfではなく%fです。
指数表示で扱うなら、出力は%eにしないと有効数字が消えます。

>fscanf(in_file,"%lf%lf%d%lf%d%lf",&H,&K,&PN,&NH[i],&M1,&U0);
これに対応するfprintfは
fprintf(out_file,"%e %f %d %f %d %e\n",H,K,PN,NH[i],M1,U0);
です。


240ポイント を手に入れた。

Name: pooka [URL]  ..中級者(12,345ポイント)   Date: 2009/08/11(火) 21:19   No:38024     
Title: Re:ファイルからデータの読み込み    
>fscanfはスペースで区切る必要はありません。
そうですね。
提示されたプログラムを実行してみたら、
見たことないエラーがでたのでいろいろ修正していたら、
こんがらがったようです。
すみませんm(_ _)m


54ポイント を手に入れた。

Name: Eda  ..かけだし(1,563ポイント)   Date: 2009/08/12(水) 16:38   No:38039 解決!     
Title: Re:ファイルからデータの読み込み    
non様、pooka様
回答して頂きありがとうございます。

おかげでなんとか自分の手に入れたい結果が入りそうです。


16ポイント を手に入れた。



Name: binoruto  ..ぴよぴよ(481ポイント)   Date: 2009/08/10(月) 19:36   No:37974       
Title: YUV422形式のデータからJPGファイルを取得します    
初めて投稿させて頂きました。
C言語の基本的なこと、入門サイトにのっているようなことは理解していると思っていますが
C言語での実装経験はほとんどありません。
主な実装経験はC#、C++です。
よろしくお願いします。

やりたい事
カメラのセンサーからYUV422形式で静止画データを読み込んでいます。
YUV422形式のデータをRGBに変換してポインタに一時格納
このデータをjpeg形式に落としたいと思っています。

動作環境  
 OS:Linux 
 ディストリビューション:debian etch 
 コンパイラ名 : gcc-4.1.2
 API:l4v2
 関係するライブラリ:jpeglib.h

l4v2の仕様は
http://v4l.videotechnology.com/dwg/v4l2.html#V4L2-PIX-FMT-YUYV
になります。

以下はカメラからYUV422形式で取り込んだデータをバッファに格納してjpegに落とすところまでのソースになります。


#define CLIP(color) (unsigned char)(((color)>0xFF)?0xff:(((color)<0)?0:(color)))
static void
// pは入力データを格納しているポインタ
process_image (const void * p)
{

int i, j;
unsigned char *writer;
const unsigned char *reader;
unsigned char b, g1, g2, r;
unsigned char fname_jpeg[FILENAME_MAX];// FILENAME_MAXは50文字
unsigned char fname_ppm[FILENAME_MAX];
unsigned char ext[4+1]; // 拡張子4文字 + 終端文字
FILE *fp;

struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
unsigned char *line;

reader = (unsigned char *)p;

unsigned int height = CAPTURE_HEIGHT;  //480
unsigned int width = CAPTURE_WIDTH;   //640

int u,v,u1,rg,v1;

// YUV形式→RGBに変換してポインタに格納します
// 計算式は抜粋してきたものを使用しています
for (j = height;j >= 0;j--) {
for (i = 0; i < width; i += 2) {

u = reader[1];
v = reader[3];
u1 = (((u - 128) << 7) + (u - 128)) >> 6;
rg = (((u - 128) << 1) + (u - 128) + ((v - 128) << 2) + ((v - 128) << 1)) >> 3;
v1 = (((v - 128) << 1) + (v - 128)) >> 1;
*writer++ = CLIP(reader[0] + u1);
*writer++ = CLIP(reader[0] - rg);
*writer++ = CLIP(reader[0] + v1);

*writer++ = CLIP(reader[2] + u1);
*writer++ = CLIP(reader[2] - rg);
*writer++ = CLIP(reader[2] + v1);
reader += 4;
}
}
// JPEG
if ( save_jpeg == 1 )
{
strcpy( ext, ".jpg" );
// 終端文字の付加
ext[4+1] = '\0';
sprintf( fname_jpeg, "out%05d%s", ImgNum, ext );
fp = fopen(fname_jpeg, "w");
if ( fp == NULL )
{
//Errno_Exit("Error: Save image file");
}

cinfo.err = jpeg_std_error( &jerr );
jpeg_create_compress( &cinfo );
jpeg_stdio_dest(&cinfo, fp);
cinfo.image_width = width;
cinfo.image_height = height;
cinfo.input_components = 3; // color component per pixel
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults( &cinfo );
jpeg_set_quality(&cinfo, 100, TRUE); // 品質 [0-100]
jpeg_start_compress(&cinfo, TRUE);
line = writer;
for (i=0;i < height; i++)
{
line += width * 3;
jpeg_write_scanlines(&cinfo, &line, 1); // ←ここでエラー
}

jpeg_finish_compress( &cinfo );
jpeg_destroy_compress( &cinfo );

fclose( fp );
}

ImgNum++;
}


実行しますとSegmentation faultとなります。
jpeg_write_scanlines(&cinfo, &line, 1);
までは動作しています。
jpegデータは吐き出されますが空のデータになります。

Segmentation faultについて調べましたがアクセスしたアドレス範囲がおかしい時に
起こるエラーと認識しております。正しいでしょうか。

読み書きのポインタのアドレスがおかしいと思うのですが、この場合は
実際に読んできたデータ数より大きい値のアドレスにアクセスしてそれを書き出そうとしているから
エラーが発生するのでしょうか。

その場合はどのように修正したらよろしいでしょうか。

以上です。どうぞご教授よろしくお願いします。








481ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(402,303ポイント)   Date: 2009/08/10(月) 20:19   No:37975     
Title: Re:YUV422形式のデータからJPGファイルを取得します    

    for (i=0;i < height; i++)
    {
        line += width * 3;
        jpeg_write_scanlines(&cinfo, &line, 1);
    }

の部分って

    for (i=0;i < height; i++)
    {
        jpeg_write_scanlines(&cinfo, &line, 1);
        line += width * 3;
    }

だったりしませんか?

 というか、

    jpeg_write_scanlines(&cinfo, &line, height);

で良かったりしません?


309ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(402,552ポイント)   Date: 2009/08/10(月) 20:28   No:37976     
Title: Re:YUV422形式のデータからJPGファイルを取得します    
 追加。


>アクセスしたアドレス範囲がおかしい時に起こるエラーと認識しております。正しいでしょうか

 そうです。
 アクセスが許可されていないメモリを参照すると起こります。


>読み書きのポインタのアドレスがおかしいと思うのですが

 何回目の jpeg_write_scanlinesでエラーになっているのかを調べるて
その時の writerと line変数の状態を調べれば何かつかめるかもしれません。


249ポイント を手に入れた。

Name: binoruto  ..かけだし(1,475ポイント)   Date: 2009/08/11(火) 17:55   No:38012     
Title: Re:YUV422形式のデータからJPGファイルを取得します    
Justyさんありがとうございます。

>何回目の jpeg_write_scanlinesでエラーになっているのかを調べるて
>その時の writerと line変数の状態を調べれば何かつかめるかもしれません。

を参考に変数の値を出力し、デバッグしてみました。
height0でエラーが発生したため領域が確保されてないんではないかと思い、調べた所案の定
メモリ領域が確保されていませんでした。
(unsigned char *)mallocでwriterの領域を確保することでSegmentation fault
は解消されました。ありがとうございます。


for (i=0;i < height; i++)
{
line += width * 3;
jpeg_write_scanlines(&cinfo, &line, 1);
}


もおかしいですね。言われてみてきづきました。
現在は下のようにしています。


for (i=0;i < height; i++)
{

jpeg_write_scanlines(&cinfo, &line, 1);
line += width * 3;
}



新たな問題が発生しましたので、続けて投稿させて頂きます。
jpgファイルは落とせましたが、メモリ読み書き失敗しているようです。
画像データが取得できず空状態です。そこでソースを修正してみました。
するとまたエラーが発生しました。詳しくは以下で説明します。


以下はYUV422形式で入力されてきたデータをRGBに変換し格納する所です。


int y1,y2,u,v,cc;

for (j = height;j >= 0;j--) {
for (i = 0; i < width; i += 2) {

y1 = reader[cc++];
u = reader[cc++];
y2 = reader[cc++];
v = reader[cc++];

*writer++ = CLIP(y1 + (1.402 * v));
*writer++ = CLIP(y1 - (0.344 * u) - (0.714 * v));
*writer++ = CLIP(y1 + (1.772 * u));

*writer++ = CLIP(y2 + (1.402 * v));
*writer++ = CLIP(y2 - (0.344 * u) - (0.714 * v));
*writer++ = CLIP(y2 + (1.772 * u));

}
}


このように計算式を修正したのですが、


for (i=0;i < height; i++)
{

jpeg_write_scanlines(&cinfo, &line, 1);
line += width * 3;
}


またSegmentation faultエラーが発生してしまいます。
デバッグした所i=2でエラーが発生します。

writer = (unsigned char *)malloc(width * height * 3);
でwriterの領域は640*480*3をとっています。

上記計算式内で取得されると考えられるbyte数を満たしていると思うのですが
どのような原因でSegmentation faultが発生すると考えられるでしょうか。

以上です、宜しくご教授お願いします。





994ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(402,879ポイント)   Date: 2009/08/11(火) 19:46   No:38015     
Title: Re:YUV422形式のデータからJPGファイルを取得します    

>またSegmentation faultエラーが発生してしまいます

 んーと、

・ for (j = height;j >= 0;j--)
 これおかしくないですか?
 height+1回ループが回ることになるんですが。

・ writer
 readerから writerに書き込むところで、writerのポインタを ++していますよね?
 その状態で line = writer をしていたりしませんか?
 もしそうだとすると、この代入時点で writerは mallocしたときのポインタ値とは異なるので
RGB画像の先頭を指していないと思います。


182ポイント を手に入れた。

Name: binoruto  ..かけだし(1,570ポイント)   Date: 2009/08/12(水) 08:54   No:38032     
Title: Re:YUV422形式のデータからJPGファイルを取得します    
>  height+1回ループが回ることになるんですが。

確かにその通りです。

> ・ writer
>  readerから writerに書き込むところで、writerのポインタを ++していますよね?
>  その状態で line = writer をしていたりしませんか?
>  もしそうだとすると、この代入時点で writerは mallocしたときのポインタ値とは異なるので
> RGB画像の先頭を指していないと思います。

これはwriterのポインタを ++した時点でポインタの現在の番地がそこになるということでしょうか?
私はそれをlineに代入しているということでしょうか?

以上です、ご教授宜しくお願いします。




95ポイント を手に入れた。

Name: binoruto  ..かけだし(2,015ポイント)   Date: 2009/08/12(水) 09:37   No:38033     
Title: Re:YUV422形式のデータからJPGファイルを取得します    
>これはwriterのポインタを ++した時点でポインタの現在の番地がそこになるということでしょうか?
>私はそれをlineに代入しているということでしょうか?

writerのポインタ++する前にダミーの領域dummyを作り、++した後(for文を抜けた後)に
writer=dummy;

とすることで先頭番地に移動することができました。

考え方は間違っているでしょうか?ソースは以下のように修正しました。

以上です、宜しくお願いします。


writer = (unsigned char *)malloc(width * height * 3);
unsigned char * dummy = writer;
int y1,y2,u,v,cc;

cc=0;

//for (j = height;j >= 0;j--) {
for (j = 0;j < height;j++) {
for (i = 0; i < width; i += 2) {

y1 = reader[cc++];</pre>
u = reader[cc++];</pre>
y2 = reader[cc++];</pre>
v = reader[cc++];</pre>
*writer++ = CLIP(y1 + (1.402 * v));
*writer++ = CLIP(y1 - (0.344 * u) - (0.714 * v));
*writer++ = CLIP(y1 + (1.772 * u));
*writer++ = CLIP(y2 + (1.402 * v));
*writer++ = CLIP(y2 - (0.344 * u) - (0.714 * v));
*writer++ = CLIP(y2 + (1.772 * u));
}
}
writer = dummy;




445ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(403,788ポイント)   Date: 2009/08/12(水) 12:42   No:38035     
Title: Re:YUV422形式のデータからJPGファイルを取得します    

>これはwriterのポインタを ++した時点でポインタの現在の番地がそこになるということでしょうか?
>私はそれをlineに代入しているということでしょうか?

 そう見えます。

 あとよくみたら、

    jpeg_write_scanlines(&cinfo, &line, 1);

も変ですね。
 
 lineは既にポインタなので、&は要らないと思います。




>とすることで先頭番地に移動することができました

 それでも問題はないですが、mallocしたときのアドレスは変化させないで、
別の変数の方を ++していった方が自然な感じがします。


    unsigned char *pRGBImageTop, *p;
    pRGBImageTop = (unsigned char *)malloc(width * height * 3);
    p = pRGBImageTop;
    // ...
    for (j = 0;j < height;j++) {
        for (i = 0; i < width; i += 2) {
            // ...
            *p++ = CLIP(reader[0] + u1);
            // ...
        }
    }
    // ...
    jpeg_start_compress(&cinfo, TRUE);
    p = pRGBImageTop;
    for(i = 0; i < height; i++)
    {
        jpeg_write_scanlines(&cinfo, p, 1);
        p += width * 3;
    }



825ポイント を手に入れた。

Name: binoruto  ..かけだし(2,067ポイント)   Date: 2009/08/12(水) 12:55   No:38036 解決!     
Title: Re:YUV422形式のデータからJPGファイルを取得します    

>
>     jpeg_write_scanlines(&cinfo, &line, 1);
>

> も変ですね。
>  
>  lineは既にポインタなので、&は要らないと思います。
>
これは一度試してみます。
>
>
>
> >とすることで先頭番地に移動することができました
>

>  それでも問題はないですが、mallocしたときのアドレスは変化させないで、
> 別の変数の方を ++していった方が自然な感じがします。
>
> <small><font color="#d0d0ff" face="monospace">
>     unsigned char *pRGBImageTop, *p;
>     pRGBImageTop = (unsigned char *)malloc(width * height * 3);
>     p = pRGBImageTop;
>     // ...
>     for (j = 0;j < height;j++) {
>         for (i = 0; i < width; i += 2) {
>             // ...
>             *p++ = CLIP(reader[0] + u1);
>             // ...
>         }
>     }
>     // ...
>     jpeg_start_compress(&cinfo, TRUE);
>     p = pRGBImageTop;

なるほど自然な感じがしますね。
もう一度ポインタについて調査してコードを整理してみます。
いろいろとありがとうございました。


2倍のポイントを手に入れた! 52ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(403,879ポイント)   Date: 2009/08/12(水) 13:17   No:38037     
Title: Re:YUV422形式のデータからJPGファイルを取得します    
 あと、本題とは関係ない細かな点ですが。

・ mallocに対する freeがないように見える(省略されているだけかもしれませんが)

・ 文字列を扱うなら unsigned charではなく charで


91ポイント を手に入れた。



Name: mac [URL]  ..ぴよぴよ(435ポイント)   Date: 2009/08/11(火) 21:09   No:38023       
Title: Windows 7 VC++    
Windows 7のプログラミングをMFCでしようと思うのですがVisual C++2008を入手すればよいのでしょうか。

今更ちょっと恥ずかしい質問なのですが、昔Windows MeでVisual C++6を使い開発していた経験があります。
その後プログラミングから離れていたのですが、Windows 7の発売を期に復帰しようと思います。
どうせ復帰するならWindows 7に対応した環境を揃えたいのですが、間の知識が抜け落ちてしまっているため、よくわかりません。

趣味のプログラミングですので、MSDNを購読しようとは思いません。
昔使っていたのでVC++以外のVisualStudioも、よほどお勧めなければ避けたいと思います。

アカデミック版を使える立場にあります。

以上の条件で、購入すべきソフトウェアを教えてください。


335ポイント を手に入れた。


Name: mac [URL]  ..ぴよぴよ(476ポイント)   Date: 2009/08/12(水) 00:52   No:38026     
Title: Re:Windows 7 VC++    
Visual C++1008という単体の製品はないそうですね。
この場合は場合は
Visual Studio 2008 Professional Edition アカデミック
http://www.amazon.co.jp/Visual-Studio-2008-Professional-%E3%82%A2%E3%82%AB%E3%83%87%E3%83%9F%E3%83%83%E3%82%AF/dp/B0011410PI/ref=sr_1_1?ie=UTF8&s=software&qid=1250005123&sr=8-1
が、求めるべき製品ということになるのでしょうか?

Windowa 7の開発ができるのか?
Visual Studio 2008を用意してすぐ、Visual Studio 2010のような、
バージョンアップがあるのかkになります。

このhrんの事情がわかるからいらっしゃいますか?


41ポイント を手に入れた。

Name: YuO  ..プログラマー(32,968ポイント)   Date: 2009/08/12(水) 02:33   No:38028     
Title: Re:Windows 7 VC++    
本日からMSDN/TechNet Subscriptionで日本語版Windows 7がダウンロード可能ですので,
恐らく数日中には日本語版Windows 7とVisual Studio 2008を入れてみた人柱な方々のレポートがあがると思いますが……。
# そーいう人達は迷わずVisual Studio 2010 β入れそうなイメージはありますが。

MFCが必須であれば,少なくともStandard Edition以上のVisual Studioが必要になります。
アカデミック版が使える立場であるなら,アカデミック版でよいと思います。

Visual Studio 2010の発売日ですが,正式な発表はありません。
CNETの記事 (http://japan.cnet.com/news/ent/story/0,2000056022,20381126,00.htm) には,2010年6月までには,という言葉も見えますが。


260ポイント を手に入れた。

Name: mac [URL]  ..ぴよぴよ(555ポイント)   Date: 2009/08/12(水) 05:51   No:38030     
Title: Re:Windows 7 VC++    
ご回答ありがとうございます。

> 本日からMSDN/TechNet Subscriptionで日本語版Windows 7がダウンロード可能ですので,
> 恐らく数日中には日本語版Windows 7とVisual Studio 2008を入れてみた人柱な方々のレポートがあがると思いますが……。

Internet Watchの記事で読みました。

> MFCが必須であれば,少なくともStandard Edition以上のVisual Studioが必要になります。
> アカデミック版が使える立場であるなら,アカデミック版でよいと思います。

Visual Studio 2008 Professional Edition アカデミックで良いということですね。

> Visual Studio 2010の発売日ですが,正式な発表はありません。
> CNETの記事 (http://japan.cnet.com/news/ent/story/0,2000056022,20381126,00.htm) には,2010年6月までには,という言葉も見えますが。

そうですか。
すでにその情報も出ているのですね。



79ポイント を手に入れた。



Name: 勘太郎  ..ぴよぴよ(545ポイント)   Date: 2009/08/11(火) 08:07   No:37987       
Title: 文字列    
こんにちは。
C言語は初心者です。コンパイラはBorland C++を使っています。

次のプログラムは一文字ずつ表示して一文字ずつ消去していくプログラムです。
「あいうえお」と入力したところ、一文字ずつ表示され、一文字ずつ消えていきました。
入力した文字列はそれぞれ2バイトずつ取り、全部で11バイトですよね。
そこで質問なのですが、
入力された「あ」はchar[0]とchar[1]に入りますよね?
for (i = 0; i < strnum; i++) {
putchar(str[i]);
fflush(stdout);
sleep(500);
}
ここで、char[0]が強制的に出力されますよね。でも、char[0]だけなのに、どうして、実行したときには
「あ」が表示されたのですか?

よろしくお願いします。



#include <stdio.h>
#include <time.h>
#include <string.h>

int sleep(unsigned long x);

void main()
{
int i;
char str[100];
int strnum;

printf("文字列を入力してください:");
gets(str);

strnum = strlen(str);
printf("%d\n", strnum);

while (1) {
for (i = 0; i < strnum; i++) {
putchar(str[i]);
fflush(stdout);
sleep(500);
}

for (i = 0; i < strnum; i++) {
printf("\b \b");
fflush(stdout);
sleep(500);
}
}
}

int sleep(unsigned long x)
{
clock_t c1 = clock(), c2;

do {
if ((c2 = clock()) == (clock_t)-1) {
return (0);
}
} while (1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x);
return (1);
}


545ポイント を手に入れた。


Name: non  ..熟練のプログラマー(60,035ポイント)   Date: 2009/08/11(火) 10:28   No:37997     
Title: Re:文字列    
シフトJIS漢字コードの1バイト目は、半角文字の範囲にならないようにしてあります。
したがって、1バイト目だけがテキストRAMに書き込まれても何も表示されず、2バイト目が
書き込まれた瞬間に漢字が表示されていると思います。また、消していく場合も、2バイト目を
空白(0x20)にしたとき、JIS漢字コードの2バイト目が0x20は漢字が割り当てられていないので
1バイト目+0x20では漢字にならず、空白になるのではないでしょうか。


162ポイント を落としてしまった。

Name: toyo  ..熟練のプログラマー(40,343ポイント)   Date: 2009/08/11(火) 12:58   No:38000     
Title: Re:文字列    
「あ」が表示されるのはiが1になってstr[1]まで出力されたときですよ
putchar(str[0]);
fflush(stdout);
だけだと何も表示されないと思います


69ポイント を手に入れた。

Name: 勘太郎  ..ぴよぴよ(570ポイント)   Date: 2009/08/12(水) 00:13   No:38025     
Title: Re:文字列    
non様、toyo様回答ありがとうございます。

一バイト目だけじゃなくて、二バイト目になって、初めて表示できるのですね。
だから、一文字消すのに半角文字の2倍かかっているのですね。
ありがとうございました。



25ポイント を手に入れた。



Name: kazuoni [URL]  ..比類無きプログラマー(98,168ポイント)   Date: 2009/08/11(火) 17:21   No:38010       
Title: コンストラクタでの例外処理    
お邪魔します。

とあるサイト様のプログラムに
以下のようなコンストラクタを見つけました。
// コンストラクタ

Bitmap::Bitmap()
try :
mainMemory(0), mainBitmap(0), defaultMainBitmap(0),
maskMemory(0), maskBitmap(0), defaultMaskBitmap(0),
width(0), height(0)
{
}
catch (...)
{
}


それぞれの型は以下のとおりです。
HDC      mainMemory;

HBITMAP mainBitmap;
HBITMAP defaultMainBitmap;
HDC maskMemory;
HBITMAP maskBitmap;
HBITMAP defaultMaskBitmap;
int width;
int height;


動的確保の際には例外処理を上記のコンストラクタのようにする
ことは知っていましたが、メンバの初期化の際にも例外処理は必要なのでしょうか?
(例外処理の中身はユーザーで補完してくれってことなのか、とりあえず、書いておいただけなのか理解できなくて・・・)


51ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(110,291ポイント)   Date: 2009/08/11(火) 19:05   No:38013     
Title: Re:コンストラクタでの例外処理    
例外ハンドラはちゃんと自分で書かないとダメです。
関数監視ブロックを使うことの利点は、コンストラクタ内で例外が発生した場合、(他の例外に置き換えられることはあるにしても)確実にそれを外部に通知できるようにすることにあります。


64ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(98,176ポイント)   Date: 2009/08/11(火) 19:49   No:38016     
Title: Re:コンストラクタでの例外処理    
たかぎさん、ご回答ありがとうございます。

ということは、多くの参考書で紹介しているコンストラクタは、
例外処理をしていないということで、欠陥があるということでしょうか?


8ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(110,167ポイント)   Date: 2009/08/11(火) 20:08   No:38018     
Title: Re:コンストラクタでの例外処理    
欠陥があるといえばそうですが...

書籍のサンプルコードというのは、どんなテーマかにもよりますが、やりたいことの実現方法を解説するためのものです。
ですから、本質から外れるエラー処理や例外処理は省略している場合がほとんどです。
もし仮に、まじめにエラー処理や例外処理を記述したサンプルコードを掲載してしまうと、論点がぼやけてしまいます。


124ポイント を落としてしまった。

Name: kazuoni [URL]  ..比類無きプログラマー(98,251ポイント)   Date: 2009/08/11(火) 20:31   No:38021 解決!     
Title: Re:コンストラクタでの例外処理    
確かにそうですね^^;
ご回答ありがとうございました。
例外処理を頭の中にしっかりと入れておきたいと思います。
たかぎさん、ご回答ありがとうございました。
次回もよろしくお願いします。

#株式会社きじねこHPの技術情報はよく読ませていただいてます。


75ポイント を手に入れた。



Name: いつき  ..ぴよぴよ(272ポイント)   Date: 2009/08/11(火) 00:10   No:37983       
Title: DXライブラリについて    
このサイトに関してはほとんど初心者の者です。

ゲームプログラミングの館でいざゲームを作成しようと思い操作手順に従っていき、
BorlandC++はもっていたのでBorlandC++用のDXライブラリとBCC Developerをダウンロードし、
サンプルプログラミングを打ってみたところまでいったのですが
実行が灰色になっていてクリックできず先に進むことができません。
また、C言語でHello Worldを表示させることも全くできません。
どうしたらよいでしょうか。

また、BCC Developerの代わりに「Visual C++ 2005 Express Edition」というソフトを
使うことはできますでしょうか。
ちなみにそれの方では問題なくC言語を使うことができます。


272ポイント を手に入れた。


Name: fatens  ..入門者(2,635ポイント)   Date: 2009/08/11(火) 09:08   No:37990     
Title: Re:DXライブラリについて    
>実行が灰色になっていてクリックできず先に進むことができません。
メニューからプロジェクト→メイクを選択してください。
これでエラーがなければ実行できると思います。

>BCC Developerの代わりに「Visual C++ 2005 Express Edition」…
Visual C++ 2005 Express Edition でも問題ないと思います。
また、龍神録プログラミングの館の方では、VC2005または2008を前提にしています。


179ポイント を手に入れた。

Name: いつき  ..ぴよぴよ(219ポイント)   Date: 2009/08/11(火) 13:22   No:38001     
Title: Re:DXライブラリについて    
返答ありがとうございます

すいませんメイクをした上で灰色な状態です。。

どうしてもうまくいかないようならそちらに変えたいと思います。。




53ポイント を落としてしまった。

Name: fatens  ..入門者(2,748ポイント)   Date: 2009/08/11(火) 13:43   No:38002     
Title: Re:DXライブラリについて    
>すいませんメイクをした上で灰色な状態です。。
これは、メイク時にエラーや警告はなかった、ということで良いでしょうか。

いまBCCはないので詳しくは分からないんですが...
Hello Worldすらできないと言うことであれば、一度設定を見直してみると良いかもしれません。


113ポイント を手に入れた。

Name: いつき  ..ぴよぴよ(573ポイント)   Date: 2009/08/11(火) 14:01   No:38003     
Title: Re:DXライブラリについて    
はいメイクの方は問題ないようです



ためしに拡張子を.cppから.cに変えてみたら実行できるようにはなりました!

しかし、
エラー E2209 ..\tes.c 1: インクルードファイル 'DxLib.h' をオープンできない
エラー E2141 ..\tes.c 4: 宣言の構文エラー
というエラーが出てきてしまいうまくいきません。

「Visual C++ 2005 Express Edition」でも全く同じような症状が出ます。

どうしたらよいでしょうか。。


2倍のポイントを手に入れた! 354ポイント を手に入れた。

Name: fatens  ..入門者(2,824ポイント)   Date: 2009/08/11(火) 14:21   No:38006     
Title: Re:DXライブラリについて    
プロジェクト作成時に指定したフォルダに、「プロジェクトに追加すべきファイル_BCC用」フォルダ
の中身を全てコピーするのが簡単だと思います。

これで一つめのエラーは解決しますし、同時に二つめも解決する気がします。

追記
DXライブラリを使うのであれば拡張子はcppにしてください。


76ポイント を手に入れた。

Name: いつき  ..ぴよぴよ(433ポイント)   Date: 2009/08/11(火) 19:42   No:38014     
Title: Re:DXライブラリについて    
すでにコピーしたりしましたがうまくいきません・・・

ちなみにVisualC++ 2005 Express Editionもうまくいきません
VisualC++ 2008 Express Editionもなぜか途中でインストールが中止されてしまいうまくいきません

今日ずっといろいろやってみたのですがどうしてもDXライブラリを使うことができません


もう改善できそうにないようなら、何もない状態から一番確実にできる方法を教えてほしいのですが。。。

cppでなければならないのですか・・・


140ポイント を落としてしまった。

Name: fatens  ..入門者(2,855ポイント)   Date: 2009/08/11(火) 19:53   No:38017     
Title: Re:DXライブラリについて    
DXライブラリの使い方解説
ttp://homepage2.nifty.com/natupaji/DxLib/dxuse.html

↑DXライブラリ本家の解説です。


31ポイント を手に入れた。

Name: いつき  ..ぴよぴよ(448ポイント)   Date: 2009/08/11(火) 20:10   No:38019     
Title: Re:DXライブラリについて    
ずっとこれを見ながら作業していたんですが・・・

15ポイント を手に入れた。

Name: いつき  ..ぴよぴよ(471ポイント)   Date: 2009/08/11(火) 20:23   No:38020     
Title: Re:DXライブラリについて    
すいませんいろいろいじってみたらようやくうまくいきました

ご迷惑をおかけ致しました


23ポイント を手に入れた。



Name:  ..ぴよぴよ(867ポイント)   Date: 2009/08/10(月) 23:00   No:37978       
Title: 60章を活用して天井を作る方法    
タイトルどおりなんですが
床はつくれるのですが
どうしても天井だけがうまくいきません。
床を上にもってくる方法が一番分からないのですが
どのようにしたら出来るのでしょうか?アドバイスお願いします!

case 0://画面に平行
Object[t].ObChild[s].Vertex[i].pos.x = Object[t].ObChild[s].x + Object[t].LargeX * VtPm[i].x ;
Object[t].ObChild[s].Vertex[i].pos.y = Object[t].ObChild[s].y + Object[t].LargeY * VtPm[i].y ;
Object[t].ObChild[s].Vertex[i].pos.z = Object[t].ObChild[s].z ;
break;
case 1://画面に垂直(壁)
Object[t].ObChild[s].Vertex[i].pos.x = Object[t].ObChild[s].x;
Object[t].ObChild[s].Vertex[i].pos.y = Object[t].ObChild[s].y + Object[t].LargeY * VtPm[i].y ;
Object[t].ObChild[s].Vertex[i].pos.z = Object[t].ObChild[s].z + Object[t].Zhaba/2* VtPm[i].x ;
break;
case 2://画面に垂直(床)
Object[t].ObChild[s].Vertex[i].pos.x = Object[t].ObChild[s].x + Object[t].LargeX * VtPm[i].x;
Object[t].ObChild[s].Vertex[i].pos.y = Object[t].ObChild[s].y ;
Object[t].ObChild[s].Vertex[i].pos.z = Object[t].ObChild[s].z + Object[t].Zhaba/2* VtPm[i].y;
break;


656ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(402,697ポイント)   Date: 2009/08/11(火) 00:28   No:37984     
Title: Re:60章を活用して天井を作る方法    

>床を上にもってくる方法

 case 2で

    Object[t].ObChild[s].Vertex[i].pos.y = Object[t].ObChild[s].y + 200;

としてみたらどうなりますか?


145ポイント を手に入れた。

Name:  ..ぴよぴよ(914ポイント)   Date: 2009/08/11(火) 17:30   No:38011 解決!     
Title: Re:60章を活用して天井を作る方法    
おおお!
天井になりました!こんな簡単な方法でよかったのか・・
Justyさんありがとうございます!


47ポイント を手に入れた。



Name: situmon  ..プログラマー(36,662ポイント)   Date: 2009/08/05(水) 17:15   No:37765       
Title: シューティングゲームを作りました。    
みなさまどうもありがとうございました!
公開?は終了しました。




196ポイント を落としてしまった。


Name: 山崎  ..上級者(22,806ポイント)   Date: 2009/08/05(水) 18:05   No:37766     
Title: Re:シューティングゲームを作りました。    
先ほどダウンロードして実行してみたのですが、
一番最初のロード画面で「応答なし」になってしまいました。
ロード画面以降は見れておりません。
ちなみに、フルスクリーンでないほうで起動しました。

私だけでしょうかな…?


7ポイント を手に入れた。

Name: fatens  ..かけだし(2,456ポイント)   Date: 2009/08/05(水) 18:16   No:37768     
Title: Re:シューティングゲームを作りました。    
ちょっとやってみましたが、最初に出てくる敵が硬すぎないでしょうか?
出てくるタイミングも早いように思いました。
あと、難易度選択画面でのキー入力の反応が悪いような気がします。

>山崎さん
私の環境(Windows XP SP3)ではウィンドウモードで正常にプレイできました。


115ポイント を手に入れた。

Name: ラグ  ..入門者(3,322ポイント)   Date: 2009/08/05(水) 18:28   No:37769     
Title: Re:シューティングゲームを作りました。    
とりあえず動きました(XPのSP2)
すごく個人的な意見ですが、下に書きます。

・メニューでの決定ボタンはエンターだけでなく、Zでも反応したほうがわかりやすいかなぁと思いました。
・EASYをちょっとやっだけですが、心なしか初見殺しが多かったような(悪いという訳ではないです)
・自機ショットはもっと速いほうが爽快感があっていいかなぁと(そういう演出なら全然構わないと思います)
・スラップっぽい効果音が大きくてちょっとびっくりしましたw

また後でなにかあるかも知れませんが、とりあえずの第一印象です。
偉そうなこと書いて申し訳ありませんでした…製作頑張ってください。


231ポイント を手に入れた。

Name:  ..かけだし(1,051ポイント)   Date: 2009/08/05(水) 18:38   No:37770     
Title: Re:シューティングゲームを作りました。    
初心者なんでアドバイスというよりは感想ですが・・・
fatensさんと同じく難易度選択画面でのキー入力の反応が少し悪かったと思います。
後、最初の敵が少し強いかな?と思いました。
弾幕については特に問題はないかと思います。



88ポイント を落としてしまった。

Name: ひよこ  ..熟練のプログラマー(47,794ポイント)   Date: 2009/08/05(水) 18:46   No:37771     
Title: Re:シューティングゲームを作りました。    
やってみました。絵は上手なのですが・・・
悪いと思ったところを書かせていただきます。
敵が硬いです。
一時停止は元の画面の表示のままメニューを表示したほうがいいと思います。
それで一機やられました。(自分が悪いかもしれませんが、
なぜか私には低速移動の時、自機の周りのエフェクトがじゃまになってしまいます。
以上感想でした。
制作お疲れ様でした。


121ポイント を手に入れた。

Name: すずめ  ..入門者(3,727ポイント)   Date: 2009/08/05(水) 18:59   No:37772     
Title: Re:シューティングゲームを作りました。    
さっそくやらさせてもらいました。

感想です。

スタート画面の画像や演出が綺麗です。
プレイヤーがやられて点滅しているときFPSが30近くまで落ちます。
それ以外は60前後です。
相手を倒すという爽快感は感じられませんでした。
というよりほとんど倒せませんでした。

渦を巻いた背景のスクロールは豪快ですね。
演出でしょうか?

前回の作品を見ているので、さほど新鮮さは感じなかったんですが、
画像が綺麗だなというのが印象です。


133ポイント を落としてしまった。

Name: 山崎  ..上級者(22,893ポイント)   Date: 2009/08/05(水) 19:12   No:37773     
Title: Re:シューティングゲームを作りました。    
おっとっと、こちらの環境を書いておいた方がよかったですね。申し訳ありません。

私の環境はXPプロフェッショナルエディションバージョン2002サービスパック3です。

もう一度ダウンロードして解凍して実行してみましたが、フルスクリーンじゃない方だと
やはり最初のロード画面から先に進みません。
音楽だけはずっと鳴り続けています。

フルスクリーンで起動してみると、タイトル画面までは行きました。
しかし、fpsが常に0.0で、やはり「応答なし」です。

もしかしたら私の環境が他の方々と違うだけかもしれないので、
まぁ私のことはお気になさらなくても大丈夫ですので〜


87ポイント を手に入れた。

Name: チルチル  ..プログラマー(37,804ポイント)   Date: 2009/08/05(水) 20:05   No:37775     
Title: Re:シューティングゲームを作りました。    
猫さんシリーズは向うところ敵なしですね♪

今のところボス戦開始直後までしか行けないんですが
弾幕が難しいです、イージーにしては難易度が高いと思います

とにかく弾が見えにくいです

おそらく画像が白系で統一されているので同化して見えないのが原因ではないでしょうか・・
弾が白系なら背景や自機は黒系にすると見やすいんじゃないでしょうか?

あと弾の周囲はぼかさない方が良いと思います
そのような理由で弾に注意が行かず、気付かないうちに被弾しています

あと弾幕自体ですが、弾の動きに脈絡が無いのでパターンが作れないです
次に何が来るか予想できるようにしてはどうでしょうか?

全体的に弾幕がどのような計算式で発射されているのか想像できないです
見ていて計算式が浮かぶような弾幕を増やしてはどうでしょうか?
まあ、あまり単純なのもダメですが・・

後は全体的に操作に対する反応が鈍い気がします

それから背景の速さが気になって集中できないです
やはり繋ぎ目は見せない方が良いかもしれません・・

言いたい放題言っていますが
思い付いた事を並べてるだけなので
あまり気にしないでください


2倍のポイントを手に入れた! 874ポイント を手に入れた。

Name: situmon  ..プログラマー(36,667ポイント)   Date: 2009/08/05(水) 20:05   No:37776     
Title: Re:シューティングゲームを作りました。    
ありがとうございます。
意見を踏まえ少し改善しますね。


5ポイント を手に入れた。

Name: チルチル  ..プログラマー(38,540ポイント)   Date: 2009/08/05(水) 20:39   No:37778     
Title: Re:シューティングゲームを作りました。    
またプレイしてみました♪
今回はクリアできましたよ

何か小型弾の周りが透過されていないように見えるのは気のせいでしょうか?

あと弾の速度が両極端な気がします
遅くも無く速くも無い速度を探してみてはどうですか?

自機ショットが敵に当たっても消えないのですが、貫通型なんですか?
これも白系はやめた方が良いと思うのですが・・

ボス戦時に体力バーが見当たらないのですが・・

あとザコ敵とボスのデザインには明確な違いを付けた方が良いんじゃないでしょうか?
ボスだと思っていた敵が沢山出てきた時は驚きました・・

それからザコ敵やボスが弾を発射する地点が低いと思います
少し進んでから分裂する弾もそうですが
近すぎると避ける余裕が無い上に
ザコ敵に激突すると言う事態が発生します・・

自機ショットはもう少し薄くても良いと思います
前方が埋め尽くされて前から飛んでくる弾が見えないです・・

自機ショットの角度が急ではないでしょうか?
低速移動すると広がってしまうのですが・・

「雨のシャワー」
弾幕の中では一番バランスが良いように見えますが
これに限らず、弾を常に発射し続けるのは良くない気がしますね
どこかで休んで移動とかをすると、こちらも一息つけるのですが・・

「猫が遊ぶ草原」
これは速いです、避けられないです
こうなると気合避けに頼るしかないので
最初は自機と違う方向に飛ばしてはどうでしょうか?

「太陽と雨」
全体的にイージーにしては弾密度が高いです
これでは切り替えしができないので
弾密度を下げてはどうですか?


2倍のポイントを手に入れた! 736ポイント を手に入れた。

Name: situmon  ..プログラマー(36,969ポイント)   Date: 2009/08/05(水) 21:04   No:37779     
Title: Re:シューティングゲームを作りました。    
***修正しました。
体力バーは今回つけませんでした。
理由は ボスの弾幕はすべて耐久型にしたからです。
    これから耐久ではなくボスのHPが0になれば変わる形のものも用意するようにします。
    ありがとうございます。

山崎さんへ

再起動したらどうでしょうか?

龍神録を起動するとどうなるでしょうか・・・もしかしたらDXライブラリが原因かもしれません。

簡潔ですいません。う〜んなんででしょうか。


2倍のポイントを手に入れた! 302ポイント を手に入れた。

Name: チルチル  ..プログラマー(38,571ポイント)   Date: 2009/08/05(水) 21:06   No:37780     
Title: Re:シューティングゲームを作りました。    
なるほど耐久型ですか
では制限時間の表示などはどうでしょうか?


31ポイント を手に入れた。

Name: situmon  ..プログラマー(37,020ポイント)   Date: 2009/08/05(水) 21:20   No:37781     
Title: Re:シューティングゲームを作りました。    
**修正しました。

チルチルさんのコメントを見る前にver 1.01をアップしましたが、
かなり?の間違えをしていたのですぐ、ver 1.01+をアップしなおしました。
制限時間についてはゆっくり考えるので今作ではつけないかもしれません。


51ポイント を手に入れた。

Name: 山崎  ..上級者(23,021ポイント)   Date: 2009/08/05(水) 22:25   No:37785     
Title: Re:シューティングゲームを作りました。    
先ほどパソコンを再起動してまた実行したところ、
今度はちゃんと動作しました。お騒がせして申し訳ございません。
…う〜んなぜだろう…?

それでは、恐縮ながら感想の方を…。

自機の弾が敵に当たっているかどうかが最初わからなくて、
ザコ敵が無敵なのかと思ってちょっと焦ってしまいました。
あと、他の方もおっしゃっていますが初見殺しがきつかったです〜。

いやぁ、私もここで紹介できるような作品を作ってみたいですね。
これからもがんばってくださいね〜!


128ポイント を手に入れた。

Name: チルチル  ..プログラマー(38,665ポイント)   Date: 2009/08/05(水) 22:26   No:37787     
Title: Re:シューティングゲームを作りました。    
はい、じっくり検討してください♪

新バージョンやってみました
弾がかなり見やすくなりましたね
プレイしたのはイージーですが
道中の難易度バランスは完璧に近いと思います

しかし小型弾は少し見にくいですね・・

あとボス戦中に猫さんが突然いなくなってしまいました・・


94ポイント を手に入れた。

Name: チルチル  ..プログラマー(38,753ポイント)   Date: 2009/08/05(水) 22:30   No:37788     
Title: Re:シューティングゲームを作りました。    
メニュー関係ですが
タイトル画面のエフェクトは選択項目の上に重ねない方が良いかもしれません
あとポーズ中も弾とかを表示して欲しいですね
それから矢印の画像が気付きにくいです
もっと目立つ画像に変えてはどうでしょうか?


88ポイント を手に入れた。

Name: ひよこ  ..熟練のプログラマー(47,886ポイント)   Date: 2009/08/05(水) 22:35   No:37789     
Title: Re:シューティングゲームを作りました。    
改良されたのでさっそくやってみました。
ver 1.01+はシューティングゲームらしくてよかったです。
独自の世界観もよかったです。
一時停止のときはあの画面でいいですって思ってきました。
楽しかったです。修正お疲れ様でした。


92ポイント を手に入れた。

Name: クロウ  ..中級者(10,281ポイント)   Date: 2009/08/05(水) 23:27   No:37791     
Title: Re:シューティングゲームを作りました。    
遊ぼうと思ったらリンク先で
「MESSAGE_LIST_ID_INVALID」と怒られました。
探してみたらどうやらファイルがなくなっているようですね。


32ポイント を手に入れた。

Name: Tatu  ..初心者(5,375ポイント)   Date: 2009/08/06(木) 00:20   No:37792     
Title: Re:シューティングゲームを作りました。    
プレイしてみました。
イージーとノーマルはクリアできましたが、
ハードはボスのふたつめの魔法で全滅してしまいました。

メニューの決定キーやESCキー(ポーズ)が押しっぱなしでも反応するのが気になりました。

ボスが途中で消えてしまう現象ですが
ショットを撃たないでいたら消えませんでした。
おそらく、ボスのライフが0になるなどで
ボスのフラグが消えてしまっているのではないでしょうか?

前の作品の「猫が住みつくくらい森」では
最後の弾幕以外は全てノーミスで抜けることができても
最後の弾幕だけで全滅することがありました。


249ポイント を落としてしまった。

Name: situmon  ..プログラマー(37,090ポイント)   Date: 2009/08/06(木) 14:13   No:37825     
Title: Re:シューティングゲームを作りました。    
クロウさん、すいませんでした。
変えることができなかったですが、
いま、新しくアップしました。
よろしくおねがいします。


2倍のポイントを手に入れた! 70ポイント を手に入れた。

Name: クロウ  ..中級者(10,408ポイント)   Date: 2009/08/07(金) 01:23   No:37847     
Title: Re:シューティングゲームを作りました。    
早速やってみました。

気になったところとして・・・・。
・低速モード中に死ぬと、無敵状態中は死んだ座標に当たり判定の魔法陣が出ている。
・グレイズの判定領域が狭すぎる。
・個人的な意見ですが、原色が強くてロード画面が眼に痛い。
・最初の方の中ボスは死んでも弾を吐き続けている。

自分はへたれシューターですが、それでもそこそこいけたなので、バランスはいいと思います。


127ポイント を手に入れた。

Name: situmon  ..プログラマー(37,450ポイント)   Date: 2009/08/07(金) 09:16   No:37856     
Title: Re:シューティングゲームを作りました。    

・低速モード中に死ぬと、無敵状態中は死んだ座標に当たり判定の魔法陣が出ている。
>どうなんでしょう。東方をみたら、死んだら、少しの間、死んだ座標に当たり判定の魔方陣が出ていたので、
そっくりとはいきませんが、まねてみました。
・グレイズの判定領域が狭すぎる。
>もう少し大きくします。このゲームのグレイズはかなり甘いのですぐたまりますね。
・個人的な意見ですが、原色が強くてロード画面が眼に痛い。
>確かに痛かったかもしれません。もう少し眼に優しい色を使います。
・最初の方の中ボスは死んでも弾を吐き続けている。
>直します。flagかな・・・

>自分はへたれシューターですが、それでもそこそこいけたなので、バランスはいいと思います。
へたれシューターではないと思います。。。というか自分がかなりのへたれシューターなので(>_<!!


360ポイント を手に入れた。

Name: situmon  ..プログラマー(37,483ポイント)   Date: 2009/08/07(金) 09:20   No:37857     
Title: Re:シューティングゲームを作りました。    
tatuさんへ

ボスが途中で消えてしまう現象ですが
ショットを撃たないでいたら消えませんでした。
おそらく、ボスのライフが0になるなどで
ボスのフラグが消えてしまっているのではないでしょうか?
>そうでした。すぐに直しました。ありがとうございます。

前の作品の「猫が住みつくくらい森」では
最後の弾幕以外は全てノーミスで抜けることができても
最後の弾幕だけで全滅することがありました。
>すごいです。自分も久しぶりにやってみましたが、最後の敵で全滅という作者なのに・・・いいの?
>という結果になりました・・・

イージーとノーマルはクリアできましたが、
ハードはボスのふたつめの魔法で全滅してしまいました。
>次回作はハードならではの特徴と面白さを引き立てたいと思っていますので、
>少し難易度を下げたり、上げたりします。またよろしくお願いします。

ありがとうございました。


33ポイント を手に入れた。

Name: チルチル  ..プログラマー(39,011ポイント)   Date: 2009/08/07(金) 18:08   No:37872     
Title: Re:シューティングゲームを作りました。    
バランスは良くなったと思いますが、ボスの弾幕が少し難しいですね
全方位弾などは自機を隙間に合わせるだけで見た目を変えずに簡単にできますよ

後はシステムにオリジナリティを出すと良いかもしれません

龍神録の変身のように他には無いシステムを付けるか

既存のシステムに他には無い完成度を出すと新鮮な魅力が出る気がします

ちなみに私は今レーザーを徹底的に強化しています
situmonさんもとりあえずレーザーを追加してみてはどうでしょうか?


162ポイント を手に入れた。

Name: situmon  ..プログラマー(37,683ポイント)   Date: 2009/08/08(土) 13:44   No:37913     
Title: Re:シューティングゲームを作りました。    
試しましたが失敗しました。
龍神録のレーザーの作り方を使い、
シューティングゲームの館のコードに応用(つまりシューティングゲームの館のコードならばどうすればいいか)を教えていただけるでしょうか?


52ポイント を落としてしまった。

Name: チルチル  ..プログラマー(39,106ポイント)   Date: 2009/08/08(土) 14:04   No:37916     
Title: Re:シューティングゲームを作りました。    
うーん私は龍神録のコードもシューティングゲームの館のコードも理解できなかったので
どうすれば良いのかは分かりませんが、別に龍神録のレーザーでなくても良いと思いますよ

とりあえず私は添付したようなコードでレーザーを実装しました(少し変えましたが)

簡単なレーザーならこのぐらいのコードでも実現できるので
まずはこのぐらいのコードから作ってはどうでしょうか?

まあこれでは機能が少なすぎるので私は新しくレーザーの処理を製作中ですが・・


95ポイント を手に入れた。

Name: situmon  ..プログラマー(37,852ポイント)   Date: 2009/08/11(火) 16:18   No:38008 解決!     
Title: Re:シューティングゲームを作りました。    
レーザーを作るのは難しいです!!
まずは弾をレーザーに見立ててみようかと思います。
チルチルさんありがとうございました。

皆さんもありがとうございました!!
これからもよろしくお願いいたします。


89ポイント を手に入れた。



Name: Ma  ..中級者(9,393ポイント)   Date: 2009/08/11(火) 09:04   No:37989       
Title: DXアーカイブ内からのファイルのコピー    
・visual studio 2008 Express Edition
・DXライブラリ

を用いています。

・やりたいこと
 DXアーカイブ内のファイルを、DXアーカイブ外にコピーしようとしています・

・やったこと
↓に作ったソースコードを示します。


void copyFromDXTo(string oldPath,string newPath){
int fileSize = FileRead_size(oldPath.c_str());//DXアーカイブ内ファイルのサイズ所得
int fileHandle = FileRead_open(oldPath.c_str());//DXアーカイブ内ファイルのハンドル取得

char *buf = new char[fileSize];//バッファ作成
FileRead_read( buf, fileSize, fileHandle);//読み込み
FileRead_close(fileHandle);//閉じる

ofstream ofs;//出力用意
ofs.open(newPath.c_str());//開く
ofs.write((const char*)buf ,sizeof(char)*fileSize);//バッファ書き込み
ofs.close();//閉じる。

int newFileSize = FileRead_size(newPath.c_str());
}

関数終了直前のローカルデータ
 ・fileSize 6012
 ・newFileSize 6013


・何が問題か
 DXアーカイブ内にある、コピー元のファイルと、コピー後のファイルが一致しません。
 どう一致しないかというと、新しいファイルが、なぜか1バイト増えています。
 しかも増えている場所が最初や最後ではなく、途中でです。
 画像を、ごらんになってください。
 バイナリエディタで比較したものです。
 途中で 0D が増えているのがわかります。

・どうやってチェックしたか
 コピー元がアーカイブなしのフォルダ構成で、確認しましたし、
 コピー元がアーカイブ後のフォルダ構成でも確認しました。
 なお、当然ですがコピー先は、アーカイブ化されていません。

これは、私のコーディングの間違いでしょうか?
それともライブラリに何か問題が・・・?


633ポイント を手に入れた。


Name: Ma  ..中級者(9,606ポイント)   Date: 2009/08/11(火) 09:42   No:37991     
Title: Re:DXアーカイブ内からのファイルのコピー    
*追記です。
違うファイルも比較してみました。今回は、テキストファイルをコピーしてみました。
なんだか、定期的にずれがあって、もどって、、、って感じです。

コピー元サイズ:10880
コピー後サイズ:11040
↑画像はこのファイルの比較です。

いつも
 0A の直前に0D が入っています。
 逆に 0D 0A があるところは、それが消えているように見えます。

結果、定期的に違いが発生しているのでしょう。
また、0A があるところは、改行があるところのようです。


また、変換後のテキストファイルを読み比べてみると違いはありません。
つまり、改行の文字コードが違う・・・のでしょうか?


213ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(65,667ポイント)   Date: 2009/08/11(火) 10:17   No:37993     
Title: Re:DXアーカイブ内からのファイルのコピー    
テキスト形式で出力されているからです。

× ofs.open(newPath.c_str());
○ ofs.open(newPath.c_str(), io::out | io::binary);


Name: GPGA  ..熟練のプログラマー(65,694ポイント)   Date: 2009/08/11(火) 10:18   No:37995     
Title: Re:DXアーカイブ内からのファイルのコピー    
間違えた
× io::out | io::binary
○ ios::out | ios::binary


27ポイント を手に入れた。

Name: Ma  ..中級者(9,800ポイント)   Date: 2009/08/11(火) 10:22   No:37996 解決!     
Title: Re:DXアーカイブ内からのファイルのコピー    
直りました!
ありがとうございました。
たしかに、バイナリで出力しないといけませんね・・・。
見落としていました。


2倍のポイントを手に入れた! 194ポイント を手に入れた。



Name: 初心者  ..プログラマー(34,551ポイント)   Date: 2009/08/09(日) 20:59   No:37957       
Title: .net環境でTab送り    
よくメモ帳であるTabキーを押すとずれるようにしたいです。

.net環境でマルチラインで作ったテキストボックスのTab送りをしたいです。
VCで作っています。


67ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(401,679ポイント)   Date: 2009/08/09(日) 22:55   No:37959     
Title: Re:.net環境でTab送り    
 メモ帳と同じ、ですか。


TextBoxBase.AcceptsTab プロパティ (System.Windows.Forms)
ttp://msdn.microsoft.com/ja-jp/library/system.windows.forms.textboxbase.acceptstab(VS.80).aspx

 このメンバを Trueにすると Tabキーのイベントが来ますよ。


69ポイント を手に入れた。

Name: 初心者  ..ぴよぴよ(364ポイント)   Date: 2009/08/10(月) 23:07   No:37979     
Title: Re:.net環境でTab送り    
ご回答ありがとうございます。
フォームの部品を読み込んだ時にAcceptsTabを特に記載しない前提です。

キーイベント時に
上だとシフトを押してる時はTabがきくという意味だと思います。
下だとシフトを放している時はTabがきくという意味だと思います。
上は問題なく動作するのですが
下が無反応です・・・。(Tabの効果が出る)
なぜなんでしょうか・・・?


                   //上
if(e->Shift == true){
this->textBox->AcceptsTab = true;
}else{
this->textBox->AcceptsTab = false;
}

                   //下
if(e->Shift == false){
this->textBox->AcceptsTab = true;
}else{
this->textBox->AcceptsTab = false;
}


364ポイント を手に入れた。

Name: バグ  ..ハッカー(165,408ポイント)   Date: 2009/08/10(月) 23:21   No:37981     
Title: Re:.net環境でTab送り    
まさかとは思いますが、キーが押されないからキー入力イベントが発生していない…なんて事はありませんよね?

キー入力イベントはキー入力に応じて発生するイベントです。

つまり上の記述だと、シフトが押された際にイベントが発生しますが、下の記述だとシフトを押さずに、シフト以外のキーが押された際に初めて処理される訳です。

つまり、シフトが押されていない状態だけを判別したいならば、『シフトが押された場合』と『シフトが放された場合』の両方で判定してやらなければいけません。


154ポイント を手に入れた。

Name: 初心者  ..プログラマー(34,619ポイント)   Date: 2009/08/10(月) 23:49   No:37982     
Title: Re:.net環境でTab送り    
バグ様

何んとなくわかった気がするのですが放された時とはどういう意味でしょうか?
現在Shiftが押されているときにTabをおしても反応しないが
Shiftが押されていない時にTabをおすと文字送りをしたいです。

具体的にどのように書けばよろしいのでしょうか・・・?


68ポイント を手に入れた。

Name: 初心者  ..プログラマー(34,640ポイント)   Date: 2009/08/11(火) 05:59   No:37985 解決!     
Title: Re:.net環境でTab送り    
すみません・・・
自己解決しました。みなさんありがとうございます。


21ポイント を手に入れた。



Name: うおん  ..ぴよぴよ(327ポイント)   Date: 2009/08/10(月) 23:00   No:37977       
Title: C言語の課題[ピラミッドアート]    
夏休みの課題として、
C言語で一辺が入力された数値と同じになるように[*]で図形を描画させるプログラムを組む事になっています。
三角形、四角形など比較的簡単なものは頑張ってできそうなのですが、
ダイア形、八角形、星形などもありよくわからないのです。
for文などで繰り返しをさせる、わかりやすく関数に処理を渡すくらいしか知識がありません。
レベルとしては「配列」を習い終わったくらいです。

(例、数値は人に入力させる形式
ダイア型 数値3
--*
-***
*****
-***
--*

八角形 数値2
-**
****
****
-**

星形 数値7
*--*--*
-*-*-*
--***
*******
--***
-*-*-*
*--*--*

見づらくて申し訳ないですが空白がどうもうまくいかなかったため・・・

オプションとしてこれらの図形の内側の*をなくして空白にするというものあるため
できればそちらもできるようなりたいので心やさしい方、ご教授お願いします。


327ポイント を手に入れた。


Name: sizuma [URL]  ..中級者(12,883ポイント)   Date: 2009/08/10(月) 23:19   No:37980     
Title: Re:C言語の課題[ピラミッドアート]    
>三角形、四角形など比較的簡単なものは頑張ってできそうなのですが
それならば、まずは作ってみましょう。
応用の図形のことを考えるのは、その後でも十分ですよ。
三角形や四角形のプログラムをつくることで、応用の図形のヒントにもなるハズですしね。


空白は、preタグで囲めば反映されるはずですよ


87ポイント を手に入れた。



Name: f  ..ぴよぴよ(13ポイント)   Date: 2009/08/10(月) 16:36   No:37968       
Title: リソースファイルも一緒に実行ファイル化    
質問です

リリースでビルドする際
画像ファイル,音楽ファイル等も含めて
ひとまとめにして実行ファイル1個にし
その実行ファイル1個でゲームを正常に動作させるようにはできないのでしょうか?

画像ファイル等を分けておくと普通に見られるのが嫌なので

回答をよろしくお願いいたします



13ポイント を手に入れた。


Name: バグ  ..ハッカー(165,254ポイント)   Date: 2009/08/10(月) 16:58   No:37969     
Title: Re:リソースファイルも一緒に実行ファイル化    
環境が書かれていないのでなんとも言えませんが、『リソース 埋め込み』とか『画像 埋め込み』とかでググると何かヒットするかもしれませんよ(^-^)


50ポイント を手に入れた。

Name: toyo  ..熟練のプログラマー(40,274ポイント)   Date: 2009/08/10(月) 17:09   No:37970     
Title: Re:リソースファイルも一緒に実行ファイル化    
DXライブラリでしょうか
.rcにリソース記述して
LoadSoundMemByResource( const char *ResourceName, const char *ResourceType, int BufferNum = 1 ) ;
LoadGraphToResource( int ResourceID ) ;
LoadGraphToResource( const char *ResourceName, const char *ResourceType ) ;
LoadDivGraphToResource( const char *ResourceName, const char *ResourceType, int AllNum, int XNum, int YNum, int XSize, int YSize, int *HandleBuf ) ;
などで読み込めそうですが


183ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(401,994ポイント)   Date: 2009/08/10(月) 17:24   No:37972     
Title: Re:リソースファイルも一緒に実行ファイル化    
 環境が不明なのである程度環境を問わず可能な方法となるとだいぶ絞られますが。

 一番簡単なのは、プログラムコード内にデータとして埋め込んでしまう方法です。

※ C/C++における BMPファイルの一例
const unsigned char ImageBMPData[] =
{
    0x42, 0x4d, 0x32, 0xb4, 0x04, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x32, 0x04, 0x00, 0x00, 0x28, 0x00,
    0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xe0, 0x01,
    0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0xb0, 0x04, 0x00, 0xeb, 0x0a,
    0x00, 0x00, 0xeb, 0x0a, 0x00, 0x00, 0xff, 0x00,
    // ... 続く
};


 バイナリのテキスト変換は探せばそういうツールもあるとは思いますが、
ファイル読み込んで、標準出力かファイルにでも言語の構文に合わせて
テキストを出力するだけですので、自作してもさほど時間はかからないと思います。


 でもどの方法にしても、リソースのサイズが大きくなればなるほど、
ビルド・結合に時間がかかるようになりますし、更新の手間などを考えると
実行ファイルに埋め込むということそのものがあまりお勧めはできません。


552ポイント を手に入れた。

Name: f  ..ぴよぴよ(27ポイント)   Date: 2009/08/10(月) 18:29   No:37973     
Title: Re:リソースファイルも一緒に実行ファイル化    
環境はMicrosoft Visual C++ 2008 Express Editionです


14ポイント を手に入れた。



Name: xyz  ..ぴよぴよ(358ポイント)   Date: 2009/08/09(日) 19:32   No:37953       
Title: ゲームプログラミングのs2.    
環境の問題なのか
あのコードでは動きませんでした。
oldKey[256]={},を
oldKey[256]={NULL},することで
動作を確認したので、一応報告しておきます。
俺の環境のみの問題なら
スルーしちゃってください。
ちなみにoldKey[256],でも問題ないようです。

それと気になったんですが、
51. 画像を回転、拡大縮小描写する。の
DrawRotaGraph( 320 , 240 , (double)count*0.01 ,
PI*((double)count*0.001) , image[0] , TRUE ) ;
でdoubleのキャストはする必要があるんでしょうか?
キャストについてはよく知らないんですが、
キャストなしでも実行した時に変わらないように見えたので。

長文になりましたがよろしくお願いします。


281ポイント を手に入れた。


Name: Dixq (管理人) [URL]  ..ウィザード(1,047,919ポイント)   Date: 2009/08/09(日) 23:09   No:37961     
Title: Re:ゲームプログラミングのs2.    
ご報告ありがとうございます。

グローバル変数なので、変数の初期化はしなくても0になりますが、明示的に書くつもりでそのように書きました。
しかし
={}
はコンパイラによってはエラーになるので、
={0,}
と書くほうがよかったですね。
ただNULLは意味が違うので、int型の0である0と書いたほうがよさそうです。
もしくは何も書かなくても大丈夫です。

また、キャストについても明示的に書いています。
「0.01」とだけ書くとdouble型を意味するので、(double)を書かなくても計算結果は同じになります。


235ポイント を手に入れた。

Name: xyz  ..ぴよぴよ(109ポイント)   Date: 2009/08/10(月) 17:20   No:37971 解決!     
Title: Re:ゲームプログラミングのs2.    
早い返答ありがとうございました。
今回のキャストは明示にしてコードを分かりやすくするということですね。
キャストは扱ったことがないどころか見たこともなく、
なんともよくわからなかったので。
ありがとうございました。


109ポイント を手に入れた。



Name: デラ初心者  ..かけだし(1,962ポイント)   Date: 2009/08/08(土) 20:43   No:37935       
Title: 横スクロール    
横スクロールゲームを作ろうと思ったのですが
素材がないので色々検索したのですがDLサイトが出てきません

素材をUPしているサイトはないでしょうか?(フリーがいいです)
  □ 
 □□
□□□
↑のような当たり判定?はどうすればいいのでしょうか?

{000000000000000}
{0000001000000000}
{0000011000000000}
{0000111000000000}

↑の様にすればいいのでしょうか?


181ポイント を手に入れた。


Name: sizuma [URL]  ..中級者(12,591ポイント)   Date: 2009/08/08(土) 21:02   No:37936     
Title: Re:横スクロール    
>素材
どんな素材をさがしているんですか?マップですか?操作するキャラクターですか?
もう少し具体的に書いた方が回答しやすいと思います。


>  □ 
> □□
>□□□
>↑のような当たり判定?

ブロックを表示させたいということでしょうか?
↓結構詳しくのってます。
http://javagame.skr.jp/


126ポイント を手に入れた。

Name: デラ初心者  ..かけだし(2,013ポイント)   Date: 2009/08/09(日) 12:37   No:37946     
Title: Re:横スクロール    
回答ありがとうございます

マップとキャラと背景が欲しいです

  □ 
 □□
□□□

↑は障害物にしたいという事です

http://javagame.skr.jp/

参考にさせて頂きます


51ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(97,961ポイント)   Date: 2009/08/09(日) 14:42   No:37948     
Title: Re:横スクロール    
>マップとキャラと背景
キャラと背景は、がんばってググれば、いろいろ出てきますよ。
ただ、背景はスクロール用に、つながっていることは結構少ないかもしてないです。
マップとはなんでしょうか?

>↑の様にすればいいのでしょうか?
マップチップで管理するなら、それでもよいかと思います。



92ポイント を手に入れた。

Name: デラ初心者  ..かけだし(2,120ポイント)   Date: 2009/08/10(月) 10:45   No:37967 解決!     
Title: Re:横スクロール    
自分で探してみます

マップはマリオワールド的な感じの物です(ステージセレクトのマップ)
そこまで手の込んだ物を作る訳ではないので要らないです

自分で言っときながらスイマセン

頑張って作ってみます

回答有り難うございます



107ポイント を手に入れた。



Name: ペーシャン  ..ぴよぴよ(336ポイント)   Date: 2009/08/07(金) 21:44   No:37881       
Title: サウンドノベルについて    
今サウンドノベルを作ろうとしています。
「New Game」や「Option」を選択するメニュー画面まで作ったのですが、その先の処理がわかりません。
選択してエンターを押すとそれぞれの処理につなげるところまではいったんですが、続きができないのでおしえてください!

if(y==262){

if(Key[KEY_INPUT_RETURN]==1){//
kettei1 = LoadSoundMem( "kettei1.wav" );
PlaySoundMem( kettei1 , DX_PLAYTYPE_BACK );
}

}
if(y==292){
if(Key[KEY_INPUT_RETURN]==1){
PlaySoundMem( kettei1 , DX_PLAYTYPE_BACK );
}
}


yは選択肢のカーソル位置です。
カーソルを選択肢に合わせそこでエンターを押すと処理に入ります。
kettei1.wavはテンターを押したときに流れる決定音です。
yが262のときは「New Game」で、ゲーム本編が始まります。
音を流した後に違う画面を表示させても一瞬だけ現われるだけで、画面はすぐに元のメニュー画面に戻ってしまいます。
画面を切り替えて、そのまま処理を続けるにはどうすればよいのでしょうか?

OSはvistaでVisual C++ 2008です。
C言語の経験は、簡単なプログラムを何度か作ったことがあります。
よろしくおねがいします!



336ポイント を手に入れた。


Name: クロウ  ..中級者(10,758ポイント)   Date: 2009/08/07(金) 22:06   No:37882     
Title: Re:サウンドノベルについて    
例としては、ゲームモードを切り替える変数を用意して、switchで切り替えるなどがあります。


int gameMode;//ゲームモード

/*
切り替える処理(例えば、特定のフラグが立っている状態(ここにカーソルがあったらここへ行く)でエンターを押す)
gameMode = /*処理の切り替え先の値*/;
*/
switch(gameMode){
   case 1:
   /*会話Aの処理*/
   break;

   case 2:
   /*会話Bの処理*/
   break;
etc...
}



とかですね。
ペーシャンさんのコードでは、(エンターキーが押し続けられている時間)==1なので、エンターキーが押された瞬間のみ、DrawBoxしているだけで、(エンターキーが押し続けられている時間)==2以降はif文を通っていないので、一瞬だけ表示して元に戻るだけとなっています。


350ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(97,466ポイント)   Date: 2009/08/07(金) 22:39   No:37885     
Title: Re:サウンドノベルについて    
ちなみにですけど、エンターが押されるたびに、
サウンドデータをロードするのは、危険かと。
あらかじめ、読み込んでおくほうが無難かと思います。
y=262でエンター押される前に、y=292になり、PlaySoundMemが呼ばれても、
音がならないなどのエラーが発生します。


68ポイント を手に入れた。

Name: ペーシャン  ..ぴよぴよ(380ポイント)   Date: 2009/08/07(金) 22:48   No:37886     
Title: Re:サウンドノベルについて    
回答ありがとうございます!
この場合だとyが262にあるときにエンターを押して、そのあとcaseに飛ばせばいいんでしょうか?

あとサウンドの件もありがとうございました。


44ポイント を手に入れた。

Name: ペーシャン  ..ぴよぴよ(761ポイント)   Date: 2009/08/08(土) 15:39   No:37920     
Title: Re:サウンドノベルについて    
回答ありがとうございます。
メニュー画面から次の画面へそれぞれ切り換えることができました。

ですがまた問題にぶつかってしまいました。
caseで処理を分けるまでは良かったのですが、そのあとまだメニュー画面の処理が残っており、
BGMが鳴りっぱなし、上下キーを押すと選択音が鳴り、エンターを押すと決定音が鳴り、画面が切り替わってしまいます。
つまり、「New Game」を選んだあと画面は変わるのですが、「Continue」も選べて画面がコンティニューのものに変わってしまうんです。

BGMのほうはStopSoundをcaseの中に入れたんですが止まりませんでした。

if(y==262){

if(Key[KEY_INPUT_RETURN]==1){
PlaySoundMem( kettei1 , DX_PLAYTYPE_BACK );
gameMode = 1;
}

}
if(y==292){
if(Key[KEY_INPUT_RETURN]==1){
PlaySoundMem( kettei1 , DX_PLAYTYPE_BACK );
gameMode = 2;
}
}




switch(gameMode){ 

case 1:
DrawBox(0,0,640,480,GetColor(0,0,0),TRUE);
StopSound();
}

break;


このあとcase2,3とつづきます。

問題は演奏が止まらないのと、メニュー画面の処理が残ってしまい、画面を切り替えた後でも他の選択肢が選べることです。

おしえたください!

P.S
新しく登校したほうが良かったでしょうか?





381ポイント を手に入れた。

Name: Kou  ..初心者(6,671ポイント)   Date: 2009/08/08(土) 17:33   No:37928     
Title: Re:サウンドノベルについて    

少し気になった部分があるんですが、この選択処理を呼び出している部分と、呼び出された後の部分の処理を
載せてもらえませんか?

もしかして、メニュー選択の処理自体メインループ等の中で、無条件に毎回呼ばれてませんか?

項目選択処理
 ↓
選択された項目の処理
 ↓
項目選択処理


それと、現在の状態だと、決定キーを押すまでDrawBoxが呼ばれないような気がするんですが・・・
つまり、上下のキーを押した時点ではどこが選択されているかわからず、決定した時点で初めて選択した場所が
わかる・・・DrawBoxの使い道が違うならこれでも問題ないと思いますが、現在の選択箇所を明示する目的ならば、
修正が必要だと・・・

あと、インデントがマチマチなので、コードが読みにくいです、インデントの幅を詰めて、統一してもらえると
みなさん読みやすいと思います。



281ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(97,723ポイント)   Date: 2009/08/08(土) 18:57   No:37930     
Title: Re:サウンドノベルについて    
新しく投稿も、登校もしないでいいかと思いますよ^^;

ifとswitchが同じ関数内に書かれているのなら、
そのような挙動になるかと。
エンターを押す前まではif文は通るけど、
エンターを押したら、通らないで一応回避できるかと。
ただ、ごちゃごちゃになりやすいので、いい具合に関数化したほうが、
あとあと管理しやすいかと思います。

StopSoundを使うと、ゲーム中にブチッと音が途切れているので、
あまりつかいたくないですかね^^;
CheckSoundFileで鳴りやむまで次の処理を行わないとすればうまくいきそうです。


160ポイント を手に入れた。

Name: ペーシャン  ..かけだし(1,611ポイント)   Date: 2009/08/09(日) 11:14   No:37944     
Title: Re:サウンドノベルについて    
DrawBoxは確認のために色を変えて表示させてます。
登校はミスです;

とりあえずコード載せます。





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;
}

void char_disp(int Black,int y){

LoadGraphScreen( 230 , y , "icon1.bmp" , TRUE );
LoadGraphScreen( 260 , 260 , "menue.bmp" , TRUE );

}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

Black = GetColor( 0 , 0 , 0 ) ;//色の取得

message_box();

if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

ClearDrawScreen(); // 裏画面のデータを全て削除
LoadGraphScreen( 0, 0, "seisaku.bmp" , TRUE ) ; //裏画面へ画像を描写
ScreenFlip() ; // 裏画面データを表画面へ反映
Sleep(2500);

opening = LoadSoundMem( "opening.mp3" );
kettei1 = LoadSoundMem( "kettei1.wav" );
sousa1 = LoadSoundMem( "sousa1.wav" );

PlaySoundMem( opening , DX_PLAYTYPE_BACK );//バックグラウンド再生

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存       ↑ESCが押されていない

LoadGraphScreen( 0 , 0 , "back.bmp", FALSE ) ;
LoadGraphScreen( 0 , 0 , "title1.bmp",TRUE);

char_disp(Black,y); // 文字を描画

if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>5)){
// たった今押したか、1カウンター以上押しっぱなしかつ5回に一度

y+=30;
if(y==412) // y座標が412なら(選択が一番下なら)
y=262; // 選択座標を一番上に

PlaySoundMem( sousa1 , DX_PLAYTYPE_BACK );

}

if( Key[KEY_INPUT_UP]==1 ||( Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>5)){

PlaySoundMem( sousa1 , DX_PLAYTYPE_BACK );

y-=30;
if(y==232)
y=382;
}

if(y==262){
if(Key[KEY_INPUT_RETURN]==1){//今の瞬間押されたら
PlaySoundMem( kettei1 , DX_PLAYTYPE_BACK );
gameMode = 1;
}
}
if(y==292){
if(Key[KEY_INPUT_RETURN]==1){
PlaySoundMem( kettei1 , DX_PLAYTYPE_BACK );
gameMode = 2;
}
}
if(y==322){
if(Key[KEY_INPUT_RETURN]==1){
PlaySoundMem( kettei1 , DX_PLAYTYPE_BACK );
gameMode = 3;
}
}
if(y==352){
if(Key[KEY_INPUT_RETURN]==1){
PlaySoundMem( kettei1 , DX_PLAYTYPE_BACK );
gameMode = 4;
}
}
if(y==382){
if(Key[KEY_INPUT_RETURN]==1){
PlaySoundMem( kettei1 , DX_PLAYTYPE_BACK );
int end;
end=MessageBox(
NULL ,
TEXT("ゲームを終了しますか?") ,
TEXT("終了") ,
MB_YESNO | MB_ICONQUESTION );
if(end==IDYES){
DxLib_End();
return 0;
}
}

}




850ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(97,869ポイント)   Date: 2009/08/09(日) 14:10   No:37947     
Title: Re:サウンドノベルについて    
いろいろツッコむところがありますが・・・
質問は何でしょうか?
(どうせなら、ソースファイルごとアップしたほうがいいような^^;)

#横道にそれますが・・・
LoadGraphScreenは重い処理のようなので、
画像はLoadGraphとDrawGraphで描写したほうがよいようです。


90ポイント を手に入れた。

Name: Kou  ..初心者(7,274ポイント)   Date: 2009/08/09(日) 15:04   No:37949     
Title: Re:サウンドノベルについて    
ソースを載せてくださいと言っておいて申し訳ないですが、この状態だとただ記述方法に突っ込みを入れるだけで、
処理を把握できませんね・・・kazuoniさんの言うとおり、まるごとアップしたほうが早いと思います。

ここまででは、前回の選択画面が残るとか、音が鳴りっぱなしとかの要因に繋がりそうな部分が記述されてい
ないようなので。

このソースを見た限りでは初心者の私から見ても、突っ込み所が多い気が・・・


143ポイント を手に入れた。

Name: sizuma [URL]  ..中級者(12,796ポイント)   Date: 2009/08/09(日) 15:08   No:37950     
Title: Re:サウンドノベルについて    
とりあえずソースのインデントが異常に汚いです。
もしメモ帳でコーディングしてるんだったら、何かソフトを使うことをオススメします


35ポイント を手に入れた。

Name: ペーシャン  ..かけだし(1,620ポイント)   Date: 2009/08/09(日) 16:33   No:37951     
Title: Re:サウンドノベルについて    
ソースコードです。

9ポイント を手に入れた。

Name: Kou  ..初心者(7,517ポイント)   Date: 2009/08/09(日) 17:53   No:37952     
Title: Re:サウンドノベルについて    

選択画面に戻るのについては、gamemodeがリセットされていない為、ループで戻ってきた時に何も入力が無ければ、
前回と同じcase文に引っ掛かるのと、基本的にメインループに直接項目の選択処理があるので、
無条件で項目選択の処理が実行されているみたいですね。

とりあえず、screenfripの後にでもgameModeを0にリセットして、動作を確認してみてはどうでしょうか?
但し、この記述形式では、根本的な解決にはならないと思います。
処理を関数化するなどして分けた後、その処理を実行する、しないの条件判断等が必要ではないでしょうか?

追記編集です
 ・y == 262の時gameModeが変更されていないようですが。
 ・gameModeが1以外では、BGMの停止をしていないようです。
 ・BGMの再生がバックグラウンドの時って、停止しない限りループ再生しませんでしたか?

以上の部分は記述ミスでしょうか?


243ポイント を手に入れた。

Name: Kou  ..初心者(7,611ポイント)   Date: 2009/08/09(日) 19:42   No:37954     
Title: Re:サウンドノベルについて    
連投稿失礼します。

StopSound関数にハンドルを渡していないのに今気付きました。
確認してはいませんが、PlaySoundMemで再生したサウンドファイルは、StopSoundMemで停止しなければなら
ないのではないでしょうか?


94ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(98,117ポイント)   Date: 2009/08/09(日) 20:16   No:37955     
Title: Re:サウンドノベルについて    
>StopSound関数にハンドルを渡していないのに今気付きました。
StopSoundは引数はなしみたいです。

>PlaySoundMemで再生したサウンドファイルは、
>StopSoundMemで停止しなければならないのではないでしょうか?
特に強制はないかと思います。
音を止めたいときに、StopSoundMemを使えばよいみたいです。
参考までに、本家を・・・。
DXライブラリ 関数リファレンスページ - PlaySoundMem
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_sound.html#R8N5


156ポイント を手に入れた。

Name: クロウ  ..中級者(11,470ポイント)   Date: 2009/08/09(日) 20:20   No:37956     
Title: Re:サウンドノベルについて    
すみません。上に書いた例が悪かったようです。

例)

switch(gameMode){
case menuMode:
menuMain();//メニュー画面の処理
break;
case newGameMode:
gameMain();//ゲームスタート
break;
case continueMode:
readSaveMain();//セーブデータの読み込み
break;
case option:
optionMain();//オプションモードの処理
break;
}


関数分けは大事というよりも、メインループは関数を呼び出すだけ位の勢いで。
画像データなどの読み込みも関数分けしておきましょう。

一例ですが、このようにして、menuMain()関数の中に先ほどのif文などの処理を書いておけば、タイトル画面の処理が残るといった解決すると思います。
BGMを鳴らすといったことも関数内で処理すれば、解決すると思います。ゲームモードを切り替えて、呼ぶ関数を変えてあげたとき、BGMを鳴らしている関数が呼ばれていないときは、その鳴らすという処理も呼ばれていないため、呼ばれていないものは鳴らしようがないからです。

それでも、一瞬だけ鳴ったりする場合は配列の要素数を超えてアクセスしたりなど、ポインタの不正なアクセスが疑われたりしますが・・・・。


363ポイント を手に入れた。

Name: Kou  ..初心者(7,728ポイント)   Date: 2009/08/09(日) 21:13   No:37958     
Title: Re:サウンドノベルについて    
すみません。
StopSoundMemとStopSoundがごっちゃになってました(汗)
停止処理が強制でないようならば、私のStopSoundに関する記述はキレイサッパリ忘れてください。
普段あまり音に関する処理をしていないので、私自身確認していませんでした。


117ポイント を手に入れた。

Name: ペーシャン  ..かけだし(1,697ポイント)   Date: 2009/08/09(日) 22:58   No:37960     
Title: Re:サウンドノベルについて    
皆さん回答ありがとうございました
おかげさまでなんとかなりそうです

これから数日間PCいじれなくなるんですが、
再開した時また何かありましたらそのときはよろしくお願いします!


77ポイント を手に入れた。

Name: conio [URL]  ..プログラマー(36,311ポイント)   Date: 2009/08/09(日) 23:38   No:37963     
Title: Re:サウンドノベルについて    

とりあえず、『音を出してそれぞれの状態へ遷移する』という処理は
大体こんな感じでよいのではないでしょうか。
(一部 適当な部分アリ)

音の部分はコメントアウトしてるので、任意のファイル名にして
コメントアウトを外すと動くと思います。
---------------------------------------------------------------------------------------
#include "DxLib.h"

int Key[256];
int kettei1 ;

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;
}

enum SeqID{
SEQ_TITLE,
SEQ_NEW_GAME,
SEQ_CONTINUE,
SEQ_OPTION,
SEQ_EXIT
};
SeqID NowSeq = SEQ_TITLE;

typedef struct{
POINT pt;
char* msg;
SeqID next;
}A;

A mozi[] = {{100,20,"NewGame",SEQ_NEW_GAME},
{100,40,"Continue",SEQ_CONTINUE},
{100,60,"Option",SEQ_OPTION},
{100,80,"Exit",SEQ_EXIT}};


void Title(void)
{
int White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
int Yellow = GetColor( 255 , 255 , 0 ) ; // 黄色の値を取得
int Cyan = GetColor( 0 , 255 , 255 ) ; // 水色の値を取得
int TempColor = 0;
static int Cursor = 0;
int count = sizeof(mozi) / sizeof(mozi[0]);


//カーソルの移動
if(Key[KEY_INPUT_DOWN] == 1 || (Key[KEY_INPUT_DOWN] > 20 && Key[KEY_INPUT_DOWN] % 10 == 0))
Cursor = (Cursor + 1) % count;
else if(Key[KEY_INPUT_UP] == 1 || (Key[KEY_INPUT_UP] > 20 && Key[KEY_INPUT_UP] % 10 == 0))
Cursor = (Cursor + count - 1) % count;

//選択肢の表示
for(int i = 0; i < count; i++){
if(i == Cursor)TempColor = Cyan;
else TempColor = White;
DrawString( mozi[i].pt.x, mozi[i].pt.y, mozi[i].msg , TempColor);
}
//カーソルの表示
DrawString( mozi[Cursor].pt.x - 20, mozi[Cursor].pt.y, "⇒" , Yellow);

//遷移先決定
if(Key[KEY_INPUT_RETURN] == 1){
//PlaySoundMem( kettei1 , DX_PLAYTYPE_BACK );
NowSeq = mozi[Cursor].next;
Cursor = 0;
}
}

void NewGame(void)
{
int White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
DrawString( 100, 100, "NewGame画面です。" , White);
}
void Continue(void)
{
int White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
DrawString( 100, 100, "Continue画面です。" , White);
}

void Option(void)
{
int White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得
DrawString( 100, 100, "Option画面です。" , White);
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE );

if(DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );

//kettei1 = LoadSoundMem( "bgm_config.wav" ) ;

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0 && NowSeq != SEQ_EXIT){

switch(NowSeq){
case SEQ_TITLE: Title();
break;
case SEQ_NEW_GAME: NewGame();
break;
case SEQ_CONTINUE: Continue();
break;
case SEQ_OPTION: Option();
break;
default:break;
}
ScreenFlip();
}
DxLib_End();
return 0;
}
---------------------------------------------------------------------------------------



364ポイント を手に入れた。



Name: うさぎさん  ..ぴよぴよ(120ポイント)   Date: 2009/08/08(土) 13:58   No:37914 解決!       
Title: ゲームプログラミングの館 16.について    
16.メモリに音楽を読み込んで流す。
についてなんですが、メモリに読み込んだ音楽を止めるときもmp3はStopSound();midiはStopMusic();で
演奏を止められますか?
あと読み込んだファイルの種類は関係なしでLoadSoundMem,PlaySoundMemを使えるんでしょうか?


120ポイント を手に入れた。


Name: kazuoni [URL]  ..比類無きプログラマー(97,779ポイント)   Date: 2009/08/08(土) 21:24   No:37938     
Title: Re:ゲームプログラミングの館 16.について    
前者は定かではありませんが、
midi,mp3はStopMusicで止められるようです。
StopSoundはWAVEファイルの再生を止めるようです。

後者は、WAV.MP3.Ogg対応のようです。

詳しくは、本家で質問してみてください。

DXライブラリ置き場
ttp://homepage2.nifty.com/natupaji/DxLib/index.html


56ポイント を手に入れた。

Name: うさぎさん  ..ぴよぴよ(144ポイント)   Date: 2009/08/09(日) 11:16   No:37945     
Title: Re:ゲームプログラミングの館 16.について    
回答ありがとうございます!
本家のほうも行ってみます


24ポイント を手に入れた。



Name: チルチル  ..プログラマー(38,849ポイント)   Date: 2009/08/07(金) 17:11   No:37871       
Title: 2Dポリゴンに使う画像    
DrawPolygon3D関数に使う画像のサイズは2の倍数でなければいけないのですが

DrawPolygonBase関数に使う画像のサイズは2の倍数でなくても良いのでしょうか?

一応、サイズが2の倍数の画像とそうでない画像で表示してみましたが特に違いは無い気がするのですが・・


2倍のポイントを手に入れた! 96ポイント を手に入れた。


Name: チルチル  ..プログラマー(39,143ポイント)   Date: 2009/08/08(土) 14:11   No:37917     
Title: Re:2Dポリゴンに使う画像    
と思ったら表示位置がずれていました
やはり2の倍数でなければいけないのでしょうか?


37ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(400,646ポイント)   Date: 2009/08/08(土) 15:48   No:37922     
Title: Re:2Dポリゴンに使う画像    

>やはり2の倍数でなければいけないのでしょうか

 基本はそう考えていいんではないでしょうか。

 ただ、環境次第でどうなるかはわかりませんが、UV値を 2のべき乗に合わせて
補正すれば、表示できなくもないかなと思いますが。


20ポイント を落としてしまった。

Name: チルチル  ..プログラマー(39,223ポイント)   Date: 2009/08/08(土) 16:18   No:37924 解決!     
Title: Re:2Dポリゴンに使う画像    
やはり2の倍数でないとダメなんですね

補正と言うのはサイズが1000の時に0.256見たいな感じでしょうか?

とりあえず使用している画像を変形させて2の倍数になるようにします
どうもありがとうございました


80ポイント を手に入れた。

Name: ねこ  ..プログラマー(36,889ポイント)   Date: 2009/08/08(土) 16:23   No:37925     
Title: Re:2Dポリゴンに使う画像    
というかDXLIB本家で管理人さんに確認したら確実なんじゃない?

20ポイント を手に入れた。

Name: チルチル  ..プログラマー(39,276ポイント)   Date: 2009/08/08(土) 16:28   No:37926     
Title: Re:2Dポリゴンに使う画像    
・・そういえばそうでしたね
まあ見た感じ2の倍数じゃないと挙動がおかしいので
多分2の倍数じゃないとダメなんだと思います・・


53ポイント を手に入れた。



Name: uwlover  ..ぴよぴよ(264ポイント)   Date: 2009/08/08(土) 10:14   No:37907       
Title: 無題    
初めまして、ゲーム制作をしたくなって最近C言語(とC++)を勉強し始めた者です。
その勉強の過程でget関数とput関数というのが出てきました。これらは文字の入出力を扱う関数であり、
文字列ではないですよね?ですが、

#include <iostream>
#include <cctype>
using namespace std;

int main()
{
char ch;

while(cin.get(ch))
cout.put(ch);

return 0;
}


このように記述した場合、get()は文字列を(例えば1回の入力でabc)入力できるようになっていますし、put()
もその文字列を出力できるようになっています。色々調べたところ、「1回の入力で入力した文字数だけの
ループが起こっている」ということまでは分かりました。そして、その文字列が1回のループごとに1文字ずつ
処理されていくということも。しかし、ループするたびにget()を使って条件判定するわけですよね?すると
最初に入力した文字列がループしてきたときにまたget()でwhileの条件判定をすることになるわけですから、
毎ループごとに入力を促されることにならないでしょうか?


264ポイント を手に入れた。


Name: uwlover  ..ぴよぴよ(265ポイント)   Date: 2009/08/08(土) 10:15   No:37908     
Title: Re:get関数とput関数    
あ、タイトルを入れ忘れてました…すいません

1ポイント を手に入れた。

Name: non  ..熟練のプログラマー(60,049ポイント)   Date: 2009/08/08(土) 13:24   No:37912     
Title: Re:get関数とput関数    
標準入力(キーボード)から入力された文字は、入力バッファというところに溜まります。
入力バッファにはエンターが押されたとき、またはバッファーが一杯になるまで入力が続
きます。getという関数は、入力バッファから文字を取り出す関数ですから、通常はエンター
が押されないと取り出されないことになります。そして、エンターを押された瞬間に、続けて
文字が取り出されては、putされていきます。

試しに、
while(cin.get(ch)) を
while((ch=getche())!='q') に変えてみましょう。
conio.hが必要です。


246ポイント を手に入れた。

Name: uwlover  ..ぴよぴよ(364ポイント)   Date: 2009/08/08(土) 14:19   No:37918     
Title: Re:get関数とput関数    
>>nonさん

その記述に変えてみると、私が本来while(cin.get(ch))の記述で起こるはずだと思っている通りになりました。
(ただし文字を入れた瞬間、エンターを押さないうちに条件判定するようですが)

つまり、abcと書いているうちはあくまで入力バッファという場所にそのデータが一時保管されていて、
エンターを押すまではget関数にそのデータは伝わらない。入力バッファにデータがいくのだから文字列入力は
可能である。そして一度エンターを押すとget関数が入力バッファのデータを一文字ずつ処理してそれを
put関数に渡してディスプレイに表示させる。そしてput関数が仕事したらループで戻りまたget関数が残りの
データをまた処理して…という感じでしょうか。
しかしそうなると、キーボード入力を受け付けるというget関数の機能はどうなるんでしょうか?入力バッファ
にデータが残っているうちはその機能が実行されない、と考えればいいのですか?


99ポイント を手に入れた。

Name: non  ..熟練のプログラマー(60,197ポイント)   Date: 2009/08/08(土) 15:22   No:37919     
Title: Re:get関数とput関数    
入力バッファに文字が溜まっている間は、getは入力バッファから文字を取り出します。
しかし、入力バッファが空の場合は、標準入力からの入力を待ちます。標準入力から
入力バッファへの入力は行単位で(エンターが押されるまで)行われます。
なお、getcheはバッファを使わないので、キーボードを押したらすぐに取り込まれて
putされます。


>入力バッファにデータがいくのだから文字列入力は可能である。
文字列?連続した文字の入力というのであればYESです。



148ポイント を手に入れた。

Name: uwlover  ..ぴよぴよ(567ポイント)   Date: 2009/08/08(土) 15:41   No:37921 解決!     
Title: Re:get関数とput関数    
なるほど、つまりget関数は入力バッファにデータがないときはキーボードからデータが送られてくるのを待つ
ということですね。

>文字列?連続した文字の入力というのであればYESです。
はい、そういうことです。一度にabcと入力してからエンター入力ってことが出来る、という意味です。

やっとget関数とput関数の意味を理解することができました。nonさんがここまで深く突っ込んだ話をして
くださらなかったらとても理解できるなんてことはなかったに違いないですね。自分の持っている本を改めて
読んでみましたがやはり説明不足としか言いようがないです…ともあれ、どうもありがとうございました。


203ポイント を手に入れた。

Name: non  ..ぴよぴよ(428ポイント)   Date: 2009/08/08(土) 16:17   No:37923     
Title: Re:get関数とput関数    
cin(ストリーム)ってのが間にありますから、実はもっと複雑です。
フラッシュが必要になったときに、また勉強してください。


54ポイント を手に入れた。



Name: TRUTH  ..中級者(12,803ポイント)   Date: 2009/08/05(水) 10:44   No:37744       
Title: 擬似タスクの実装    
こんにちはー。
CからC++へと手を伸ばし、勉強をしているのですが
詰まってしまったので質問させてください。


STGの擬似タスクを作ろうと頑張っているのですが上手くいきません。

今に至った流れはこのような形です。
現在はC++のSTLのリストを使用しての擬似タスクを実装しています。
(ここを参考にして作ってます。http://www.tnksoft.com/reading/classgame/engine/01/011.php

ですが、Cで制作した龍神録と比べると処理速度が極めて遅く、弾を600ほど生成しただけで処理落ち状態に陥りました。
(自分のコードで、処理速度が遅い可能性もあると思いますが…)
突き詰めると、疑似タスクの処理(挿入・削除)の遅さが速度に影響しているようでした。



このような場合は疑似タスク自体の変更から考えた方がいいのでしょうか?
アドバイスよろしくおねがいします。


232ポイント を手に入れた。


Name: GPGA  ..熟練のプログラマー(64,812ポイント)   Date: 2009/08/05(水) 11:40   No:37748     
Title: Re:擬似タスクの実装    
STLを使っただけで、処理速度が極めて遅くなるということはほとんど考えられません。

コードのほうに問題がある可能性が非常に高いので、疑似タスクのソースを提示してください。


60ポイント を手に入れた。

Name: ねこ  ..プログラマー(35,489ポイント)   Date: 2009/08/05(水) 12:11   No:37751     
Title: Re:擬似タスクの実装    
龍神録プロジェクトを使っているようなのでDXLIB仕様だと思います。
PCスペック、画像サイズ、描画モード等、色々な要素によって異なりますが
600個の画像描画というとそれなりの負荷になっています。

STLを使った場合、では無く単純にCの時とC++の時での1フレームの平均処理時間等を比較してみると
問題がもう少し違った位置に見えてくるかもしれません。


143ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(65,393ポイント)   Date: 2009/08/05(水) 12:23   No:37753     
Title: Re:擬似タスクの実装    

追記
生成でもっと速くしたいのであれば、リストと配列と併用することで
生成時の速度を稼ぐことができます。
更にメモリを食ってでも、削除の速度を上げたい場合bulletEnableListを
std::listの代わりにstd::setを使用することで削除速度を上げることができます。
ただし、生成時の速度が少し遅くなります。


#include <list>
#include <set>

#define USE_SET // std::setを使う場合、こちらの定義を有効にする

class Bullet {
public :
void Exec(){}
};

static const int MAX_BULETTE = 1000;
Bullet bullet[MAX_BULETTE];

#ifdef USE_SET
std::set<Bullet*> bulletEnableList; // 有効リスト
#else
std::list<Bullet*> bulletEnableList; // 有効リスト
#endif

std::list<Bullet*> bulletDisableList; // 無効リスト


// 初期化
void Init() {
// 弾を無効リストに格納
for (int i = 0; i < MAX_BULETTE; ++i) {
bulletDisableList.push_back(&bullet[i]);
}
}

// 挿入
bool Insert() {
// 全ての弾が有効になっている
if (bulletDisableList.empty()) {
return false;
}

#ifdef USE_SET
bulletEnableList.insert(bulletDisableList.back());
#else
bulletEnableList.push_back(bulletDisableList.back());
#endif
bulletDisableList.pop_back();

return true;
}

// 削除
void Delete(Bullet* p) {
#ifdef USE_SET
bulletEnableList.erase(p);
#else
bulletEnableList.remove(p);
#endif
bulletDisableList.push_back(p);
}

// 実行
void Exec() {
#ifdef USE_SET
std::set<Bullet*>::iterator it = bulletEnableList.begin();
#else
std::list<Bullet*>::iterator it = bulletEnableList.begin();
#endif
for (; it != bulletEnableList.end(); ++it) {
(*it)->Exec();
}
}

 


581ポイント を手に入れた。

Name: TRUTH  ..中級者(13,407ポイント)   Date: 2009/08/05(水) 12:42   No:37754     
Title: Re:擬似タスクの実装    
GPGA様

>>STLを使っただけで、処理速度が極めて遅くなるということはほとんど考えられません。
そうですよね…

コードですが…コメントなしに書いていっています。見づらいと思いますので…
基本的には参考にしましたサイト様と擬似タスク部分は同一ですので、そちらの方が見やすいと思います。
http://www.tnksoft.com/reading/classgame/zissen/00/000.php のゲームエンジンのダウンロード
解凍後、/TNKGEngine/GameObject.h GameObject.cppが擬似タスクの基底クラスです。



ねこ様

DXLIBではなく、今回は直接DirextXを使用して作ってみました。
自分も描画が原因では?と考えて、弾の描画をコメントアウトしたのですが
処理速度があまり変わらず…


2倍のポイントを手に入れた! 604ポイント を手に入れた。

Name: TRUTH  ..中級者(13,211ポイント)   Date: 2009/08/05(水) 12:53   No:37755     
Title: Re:擬似タスクの実装    
追記です。

タスクへの追加・削除の遅さが原因ではありませんでした。
(一定まで弾を追加し、削除させないでいても処理速度は変わりませんでした。調査不足ですみません)

上記にも少し書きましたが、現在描画などの処理の重そうな動作はコメントアウトしている状態です。
弾の実行用関数はコメントアウトして何も動作させない状態なのですが

それでも弾を増やしていくと処理に時間がかかっています…



196ポイント を落としてしまった。

Name: ねこ  ..プログラマー(35,780ポイント)   Date: 2009/08/05(水) 13:34   No:37758     
Title: Re:擬似タスクの実装    
<DirectX使用
なるほど。描画もコメントアウトして一緒なら描画じゃないかもしれませんね。

コメントアウトして試してるようですが、ある程度のブロックで処理時間を計測するのはどうでしょうか?
満遍なく処理負荷が上がっているとは考えずらいため、各場所で現在時間を取得してブロック単位の処理時間を測定すると負荷の高い処理の位置が特定しやすいと思います。

内容うろ覚えなんですが、DirectXだと使用デバイスへのソフトウェアドライバとかハードウェアドライバとかの設定関数は正常に設定されているでしょうか?
昔とあるPCではそれらの処理が正常に設定されず、謎にFPSが落ちるという現象に遭遇した記憶があります。
Cで動いてるので違うとは思いますが、一応。


291ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(65,667ポイント)   Date: 2009/08/05(水) 14:08   No:37762     
Title: Re:擬似タスクの実装    
>それでも弾を増やしていくと処理に時間がかかっています…
これはつまり、Execメソッドの実行が遅いということでしょうか?
それとも追加処理を行う瞬間が遅いということでしょうか?

処理を見る限り、追加、削除の部分の負荷が非常に高いのはわかるのですが
実行部分が遅いと思われる場所はありませんでした。

このタスクリストは、弾のような数を処理する物に向いていません。
このタスクリストに追加するのは弾のマネージャークラスのみを追加し
そのマネージャークラスの中で、弾専用のタスクリストを生成したほうが
好ましい結果を得ることができるでしょう。


274ポイント を手に入れた。

Name: TRUTH  ..中級者(12,789ポイント)   Date: 2009/08/06(木) 01:17   No:37794     
Title: Re:擬似タスクの実装    
進展がありましたので詳細を書きます。
@タスクに弾を追加する瞬間(一瞬だけ重くなるのでカクついていました)は、やはりかなり負荷がかかっています。
A全体的な重さは、弾がいくつタスクに入っているか調べる列挙関数でした。(デバック用に弾数を調べるために使ってました)

上記を改善するために、弾用のタスクを作りたいと考えています。



ねこ様

設定の方は大丈夫だと思います。
これからはブロックごとにしっかり処理時間を計測してみます。



GPGA様

サイト様とはゲームの仕様の違いがあるので(こちらは弾幕、サイト様は通常のSTG)
弾幕用のタスクを作りたいと思います。




連続した質問になってしまいますが…
弾を大量にタスクに追加・処理・削除する場合
どのようなタスクを作るのが適切なのか分かりません。


弾幕STGですが、なるべく低スペックで動作するように考えています。
この場合でも、GPGA様が書いて下さった様に
配列である程度確保した後、リストに加え管理する方がいいのでしょうか?
(弾幕STGなので、弾は必ず一定量まで増えてしまうと考えられるので)


まだまだひよっこですので…タスクを実装するに関しても
毎回オブジェクトを作り、削除してしまう形と、最初から配列で確保してしまう形との
処理の差がどれほどあるのか分かりません。

もし教えていただける方がいらっしゃいましたら、よろしくお願いします。






422ポイント を落としてしまった。

Name: Justy  ..伝説なるハッカー(400,121ポイント)   Date: 2009/08/06(木) 02:34   No:37795     
Title: Re:擬似タスクの実装    

>タスクに弾を追加する瞬間(一瞬だけ重くなるのでカクついていました)は、
>やはりかなり負荷がかかっています

 追加をする際、テクスチャをロードするなどHDDなどにアクセスはしていないですよね?



>弾を大量にタスクに追加・処理・削除する場合
>どのようなタスクを作るのが適切なのか分かりません。

 タスクシステムそのものより、その使い方に少し問題がある気もします。

 弾幕ゲーム、なんですよね?
 なら1つの弾=1タスクではなく、1つの弾幕=1タスクで作っても良さそうな。
 そうすれば一連の流れを持つ弾幕も使う時、1つのタスクを起動させるだけで済みますし、
1弾幕での最大弾数の予測もつくので管理もしやすいでしょう。
 
 勿論必要に応じてその子タスクを作って細かく管理するものがあってもいいですが。



>配列である程度確保した後、リストに加え管理する方がいいのでしょうか?
 
 まずは普通に毎回オブジェクトを生成・破棄する方法にしておいて、
それがボトルネックになったと判ったとき、別の方式に差し替えればいいと。

 その場合、差し替えが容易にできるようにしてくといいですね。


368ポイント を手に入れた。

Name: TRUTH  ..中級者(12,925ポイント)   Date: 2009/08/08(土) 11:48   No:37909 解決!     
Title: Re:擬似タスクの実装    
大変遅くなりましたが、GPGA様のやり方で上手くいきました。

Justy様

テクスチャのロードを事前にしていたのですが、オブジェクトの生成を毎回行っていたのが
どうやらまずかったようです。
はい、弾幕ゲームですので弾幕タスクに子タスク(弾)を作る方法にしました。



相談にのってくれた方々、本当にありがとうございました。
また何かありましたらよろしくお願いします。


136ポイント を手に入れた。




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +