|
Name: A ..入門者(2,809ポイント)
Date: 2010/08/05(木) 20:58
No:58145
|
|
Title: 格闘ゲームの画像
|
|
格闘ゲームの画像について質問させていただきます。
製作者さんのゲームプログラミングの館で22.キャラを4方向に歩かせる。を応用しているんですが
格闘ゲームに→←の2方向と↓しゃがみ、↑ジャンプをつけたいとおもっていて
↑を押すと上に行かせずにジャンプをさせようと思っていて↓を押すとしゃがみにしたいと思っています。
それでジャンプとしゃがみはどこに書き加えたらいいでしょうか?
いまはC言語でコードは
#include "DxLib.h"
typedef struct{
int x,y,img,muki,walking_flag;
}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 =160;
ch.walking_flag=0;
ch.muki=3;
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "maon.bmp" , 8 , 8 , 1 , 100 , 200 , image ) ;//画像を分割してimage配列に保存
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if( Key[ KEY_INPUT_LEFT ] == 1 ) //左ボタンが押されたら
ch.muki=1; //左向きフラグを立てる
else if( Key[ KEY_INPUT_DOWN ] == 1 ) //下ボタンが押されたら
ch.muki=2; //下向きフラグを立てる
else if( Key[ KEY_INPUT_RIGHT] == 1 ) //右ボタンが押されたら
ch.muki=3; //右向きフラグを立てる
else //何のボタンも押されてなかったら
ch.walking_flag=0; //歩かないフラグを立てる
}
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if(ch.muki==1) //左向きならch.x座標を減らす
ch.x--;
else if(ch.muki==2) //下向きならch.y座標を増やす
ch.y++;
else if(ch.muki==3) //右向きならch.x座標を増やす
ch.x++;
}
ch.img=image[(ch.x%64)/8 + 0]; //画像をセット
DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画
ScreenFlip();//裏画面を表画面に反映
}
DxLib_End();
return 0;
}
画像はたて200ピクセル横1600ピクセルです
それと止まっているときにも動きをつけたいんですがどうすればいいんでしょうか
C言語の経験は製作者さんのゲームプログラミングの館と旧シューティングゲームの館まで勉強しました。
アドバイスとかあったらよろです
1,003ポイント を手に入れた。
|
|
|
|
Name: ROM ..入門者(3,168ポイント)
Date: 2010/08/05(木) 21:22
No:58147
|
|
Title: Re:格闘ゲームの画像
|
|
格ゲーとこのプログラムはにてもにつかないと思うのですが・・。
どんな格ゲーなんですか?
普通にストII的なあれですか?
44ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..プログラマー(38,002ポイント)
Date: 2010/08/06(金) 10:10
No:58167
|
|
Title: Re:格闘ゲームの画像
|
|
Aさんのご質問は、一見コードも示されていて具体的なように見えますが、
ちょっと答えづらいと思います。
「どこに書くのか」ではなく「どんな風に書くのか」を知りたいんですよね?
(「どこに書くのか」なら、「書き方次第でどこでもいい」です)
とりあえず、少なくとも、
else if(ch.muki==2) //下向きならch.y座標を増やす
ch.y++;
の部分は、要らないでしょうね。
しゃがもうとしたら、地面に沈んでってしまいそうですから。
> それと止まっているときにも動きをつけたいんですがどうすればいいんでしょうか
歩いている時には動きをつけられていますか?
できているならば、それを応用すればよいと思います。
がんばってくださいw 
219ポイント を落としてしまった。
|
|
|
|
Name: lian ..ぴよぴよ(163ポイント)
Date: 2010/08/06(金) 00:17
No:58153
|
|
Title: サウンドノベル風文字列表示法
|
|
ゲームプログラミングの館で、日々学習させてもらっています。
しかし、一つ解らない事があるので質問させていただきました。
ゲームプログラミングの館の、〜サンプルプログラム編〜のs1.サウンドノベル風文字列表示法1についてです。
サンプルプログラムでは…
#include "DxLib.h"
int i=0,j,ch_i=0,counter=0,White;
char Key[256],oldKey[256]={},disp[80]="",ch[5][80]={
"プログラムを習得するには、実際に自分で書いてみることが大事。",
"参考書を読むことも重要だが、数学のように演習を通して、",
"体に身につけるようにしよう。",
"きっと、よりはっきりと、関数の使い方、",
"プログラムの書き方がわかるだろう。"
};
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK ) ;
White=GetColor(255,255,255);
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
for(j=0;j<256;j++){
if(oldKey[j]==0 && Key[j]==1)
Key[j]=2;
oldKey[j]=Key[j];
}
if(Key[KEY_INPUT_RETURN]==2){ // 前回押されてなくて、今回押されていたら
i=0; // iを初期値に戻し
ch_i++; // 表示する配列を1つずらす
if(ch_i==5) // これ以上表示する配列がなくなったらbreak;
break;
}
// 配列の終端-2以下で、今回コピーするiまでの配列要素のi番目が\0じゃなくカウンターが5の倍数なら
if(i<=80-2 && ch[ch_i][i]!='\0' && counter%5==0){
i+=2; // 全角文字なので配列要素2つずつカウントアップ
strncpy(disp,ch[ch_i],i);// iバイトまでの配列要素をdisp配列にコピー
disp[i]='\0'; // 終端記号を代入
}
DrawFormatString(10,420,White,"%s",disp);//disp配列の文字データを表示
counter++;
ScreenFlip() ;
}
DxLib_End() ;
return 0 ;
}
となっていますが、これでは一列しか表示できませんでした。
(文字列を一列表示してEnterを押すと表示されていた文字列が消え、次の文字列が表示されるといった具合に)
私は文字列を2,3列位表示させて、Enterを押すと次の文字列を表示されるといったようにしたいのです。
考えてみたのですが、良い方法が思い浮かびませんでした。
まだ初心者なのでこういった事もわからないのですが、どなたかご教授を宜しくお願いします。
<補足>
・Microsoft Visual C++ 2010 ExpressとDXライブラリを使用しています。
・OSはWindows7の32bitです。 
163ポイント を手に入れた。
|
|
|
|
Name: ぬるぽ ..初心者(5,828ポイント)
Date: 2010/08/06(金) 01:42
No:58156
|
|
Title: Re:サウンドノベル風文字列表示法
|
|
DXライブラリのサンプルに下記のプログラムがあります。
参考にしてみてはいかがでしょうか。
#include "DxLib.h"
#include <math.h>
// 文字のサイズ
#define MOJI_SIZE 24
// 仮想テキストバッファの横サイズ縦サイズ
#define STRBUF_WIDTH 24
#define STRBUF_HEIGHT 20
char StringBuf[ STRBUF_HEIGHT ][ STRBUF_WIDTH * 2 + 1 ] ; // 仮想テキストバッファ
int CursorX , CursorY ; // 仮想画面上での文字表示カーソルの位置
int SP , CP ; // 参照する文字列番号と文字列中の文字ポインタ
int EndFlag ; // 終了フラグ
int KeyWaitFlag ; // ボタン押し待ちフラグ
int Count ; // フレームカウンタ
char String[][ 256 ] =
{
" ゲームプログラムを習得するための一番の近道はとにかく沢山プログラムを組む",
"ことである。B" ,
"@ プログラムの参考書にはゲームのプログラムの方法なんて何も書かれていない、B",
"変数、B配列、B関数、Bループ、B条件分岐…Bこれらすべての説明はゲームで何に使うか",
"なんてどこにも書いていない、Bせいぜい住所録を題材にした例がある程度である。B" ,
"C プログラムは習うより慣れろなのでプログラムを組むに当たって少しでも知識が",
"つけば後はそこからは掘り下げ、広げていけば良いわけで、Bプログラムの参考書を",
"読んでいて少しでも何か出来るような気がしたらそこでとにかくプログラム",
"を打ってみることが大事である。E",
} ;
void Kaigyou( void ) ; // テキストバッファの改行処理関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
char OneMojiBuf[ 3 ] ; // 1文字分一時記憶配列
int i , j ;
SetGraphMode( 640 , 480 , 16 ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 描画位置の初期位置セット
CursorX = 0 ;
CursorY = 0 ;
// 参照文字位置をセット
SP = 0 ; // 1行目の
CP = 0 ; // 0文字
// フォントのサイズセット
SetFontSize( MOJI_SIZE ) ;
// 描画先を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK ) ;
// フレームカウンタ初期化
Count = 0 ;
// ループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// サウンドノベル風文字列描画処理を行う
// ただし終了フラグが1だった場合は処理をしない
if( EndFlag == 0 )
{
char Moji ;
// ボタン押し待ちフラグがたっていた場合はボタンが押されるまでここで終了
if( KeyWaitFlag == 1 )
{
if( ProcessMessage() == 0 && CheckHitKeyAll() != 0 )
{
// ボタンが押されていたら解除
KeyWaitFlag = 0 ;
}
}
else
{
// 文字の描画
Moji = String[ SP ][ CP ] ;
switch( Moji )
{
case '@' : // 改行文字
// 改行処理および参照文字位置を一つ進める
Kaigyou() ;
CP ++ ;
break ;
case 'B' : // ボタン押し待ち文字
// ボタンが離されるまで待つ
while( ProcessMessage() == 0 && CheckHitKeyAll() != 0 ){}
// ボタン押し待ちフラグをたてる
KeyWaitFlag = 1 ;
CP ++ ;
break ;
case 'E' : // 終了文字
// 終了フラグを立てるおよび参照文字位置を一つ進める
EndFlag = 1 ;
CP ++ ;
break ;
case 'C' : // クリア文字
// 仮想テキストバッファを初期化して描画文字位置を初期位置に戻すおよび参照文字位置を一つ進める
for( i = 0 ; i < STRBUF_HEIGHT ; i ++ )
{
for( j = 0 ; j < STRBUF_WIDTH * 2 ; j ++ )
{
StringBuf[ i ][ j ] = 0 ;
}
}
CursorY = 0 ;
CursorX = 0 ;
CP ++ ;
break ;
default : // その他の文字
// 1文字分抜き出す
OneMojiBuf[ 0 ] = String[ SP ][ CP ] ;
OneMojiBuf[ 1 ] = String[ SP ][ CP + 1 ] ;
OneMojiBuf[ 2 ] = '\0' ;
// 1文字テキストバッファに代入
StringBuf[ CursorY ][ CursorX * 2 ] = OneMojiBuf[ 0 ] ;
StringBuf[ CursorY ][ CursorX * 2 + 1 ] = OneMojiBuf[ 1 ] ;
// 参照文字位置を2バイト勧める
CP += 2 ;
// カーソルを一文字文進める
CursorX ++ ;
// テキストバッファ横幅からはみ出たら改行する
if( CursorX >= STRBUF_WIDTH ) Kaigyou() ;
break ;
}
// 参照文字列の終端まで行っていたら参照文字列を進める
if( String[ SP ][ CP ] == '\0' )
{
SP ++ ;
CP = 0 ;
}
}
}
// 画面のクリア
ClsDrawScreen() ;
// 背景エフェクトの描画
{
int Color ;
Color = ( int )( sin( Count / 100.0 ) * 80.0 + 125.0 ) ;
DrawBox( 0 , 0 , 640 , 480 , GetColor( Color , 0 , 0 ) , TRUE ) ;
Count ++ ;
}
// テキストバッファの描画
for( i = 0 ; i < STRBUF_HEIGHT ; i ++ )
{
DrawString( 8 , i * MOJI_SIZE , StringBuf[ i ] , GetColor( 255 , 255 , 255 ) ) ;
}
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
// 改行関数
void Kaigyou( void )
{
// 描画行位置を一つ下げる
CursorY ++ ;
// 描画列を最初に戻す
CursorX = 0 ;
// もしテキストバッファ縦幅からはみ出るならテキストバッファを縦スクロールさせる
if( CursorY >= STRBUF_HEIGHT )
{
int i , j ;
for( i = 1 ; i < STRBUF_HEIGHT ; i ++ )
{
for( j = 0 ; j < STRBUF_WIDTH * 2 ; j ++ )
{
StringBuf[ i - 1 ][ j ] = StringBuf[ i ][ j ] ;
}
}
// 描画行位置を一つあげる
CursorY -- ;
}
}
1,495ポイント を手に入れた。
|
|
|
|
|
Name: lian ..ぴよぴよ(194ポイント)
Date: 2010/08/06(金) 09:49
No:58166
|
|
Title: Re:サウンドノベル風文字列表示法
|
|
ありがとうございます!
参考にして早速自分でチャレンジしてみます。
31ポイント を手に入れた。
|
|
|
|
Name: 紅葉 ..上級者(16,605ポイント)
Date: 2010/08/06(金) 05:56
No:58160
|
|
Title: ライブラリを公開しようとしております
|
|
ライブラリを公開しようとしております。
DL数を知りたいのでどこかに置きたいのですが条件に当てはまるお勧めのローダはないでしょうか?
【条件】
・zipファイルがおける
・無料である
・DL数がわかる
・長時間消されない
皆さんのご意見を頂けますと幸いです。
134ポイント を手に入れた。
|
|
|
|
Name: 紅葉 ..上級者(16,633ポイント)
Date: 2010/08/06(金) 09:04
No:58165
| 解決!
|
Title: Re:ライブラリを公開しようとしております
|
|
管理人様
ご紹介ありがとうございます。
ありがたく使わせて頂きます!!
28ポイント を手に入れた。
|
|
|
|
Name: 438番 ..ぴよぴよ(71ポイント)
Date: 2010/08/03(火) 22:04
No:58057
|
|
Title: OpenGLについて
|
|
タイトル通りOpenGLについてお聞きしたいのですが
OpenGLでウィンドウを作ろうとしたのですが、うまくいきません
予定では中身が青色で塗りつぶされたウィンドウが表示されると思っているのですが
実行するとただ単に青色の四角形だけがが表示されます
なぜウィンドウの枠が表示されないのでしょうか
OS Ubuntu 8.04
OpenGL(glut)のインストールは
% sudo apt-get install freeglut3 freeglut3-dev
で行いました
初歩的な事ですみませんが、お願いします
ソース
#include <GL/glut.h>
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
void init(void)
{
glClearColor(0.0, 0.0, 1.0, 1.0);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
init();
glutMainLoop();
return 0;
}
71ポイント を手に入れた。
|
|
|
|
Name: 438番 ..ぴよぴよ(90ポイント)
Date: 2010/08/06(金) 02:56
No:58157
| 解決!
|
Title: Re:OpenGLについて
|
|
紹介していただいたサイトと同じ症状です
Ubuntuとの相性が悪いのではとのことでしたのでWindowsXPで実行したところ、
問題なく実行できました
またFedoraでも実行してみましたが,ちゃんと動いてくれました
OpenGLはクロスプラットフォームと聞いていたのでまさかOSとの相性の悪さだとは思いもしませんでした
ありがとうございました
19ポイント を手に入れた。
|
|
|
|
Name: gumball ..ぴよぴよ(63ポイント)
Date: 2010/08/05(木) 19:53
No:58140
|
|
Title: 実行ファイル
|
|
プログラミング初心者です。
龍神録プログラミングの館を見ながらゲームを作っているのですが(と言ってもまだ骨組みも出来てません)、コンパイラしてDebugフォルダの中にある実行ファイル(.exe)を起動すると、黒い画面にread errorと出るだけで何も起こりません。どうしてでしょうか・・
ここでする質問じゃないかもしれませんが、どなたか原因が分かる方は教えてください。
コンパイラはVisualC++2010です。
63ポイント を手に入れた。
|
|
|
|
Name: 迷彩吹雪 ..かけだし(2,096ポイント)
Date: 2010/08/05(木) 20:12
No:58141
|
|
Title: Re:実行ファイル
|
|
.exeと同じ場所に画像などを置いて実行してみてください。
VC++から実行した時は自動的にDebugフォルダと同じ階層からパスを辿りますが、
直接.exeをダブルクリックした場合は.exeがある場所がファイル読み込みの起点になります。
110ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(40,541ポイント)
Date: 2010/08/05(木) 08:08
No:58104
|
|
Title: NULL 参照ポインターがスタブに渡されました。
|
|
お世話になります。
デバッグをしていて、「*******で初回の例外が発生しました: *******: NULL 参照ポインターがスタブに渡されました。」
というエラーが右下のログを表示する部分に表示されていることが分かりました。
アスタリスクの部分にはメモリアドレスのようなものが書いてあります。
このようなログは表示されているのですが、ゲームの処理には支障はなく、普通にプレイできます。
ですが、エラーは全て消しておきたいので、このエラーを解消したいと思っています。
手がかりがメモリアドレスだけで、ゲームに支障がないので、どこが原因なのか分からず困っています。
このようなエラーの場合、どこが原因なのかを突き止めるにはどうデバッグすればよろしいでしょうか?
皆さんのお力をお貸し下さい。
よろしくお願い致します!
追記:
コンパイラはvisual c++ 2008EEで、OSはwindows7です。 
2倍のポイントを手に入れた! 338ポイント を手に入れた。
|
|
|
|
Name: めるぽん ..初心者(8,957ポイント)
Date: 2010/08/05(木) 08:15
No:58105
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
そのエラーは RPC 経由のエラー(RPC_X_NULL_REF_POINTER)ですね。
COM を使ってる部分(多分 DirectX ですかね?)で NULL になってはいけない引数が NULL になってしまっているようです。
DX ライブラリ経由で DirectX を呼び出しているのであれば、DX ライブラリに不要な NULL を渡していないかチェックして、DirectX を直接呼び出しているのであれば、DirectX に不要な NULL を渡していないかチェックしましょう。
166ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(40,641ポイント)
Date: 2010/08/05(木) 08:32
No:58106
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
ぬるぽんさん!ありがとうございます。
DirectXで開発しています。
NULLを渡すとまずい部分にNULLを渡すと出てしまうエラーですか。勉強になります!
実はウィンドウをアクティブにするたびに出るんですよね。。。
描画部分かキー入力周りを片っ端から調べてみます!
100ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(40,731ポイント)
Date: 2010/08/05(木) 11:00
No:58109
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
う〜ん。探してみたんですが見つからない;
メモリアドレスからどうにかして原因箇所を割り出す方法はないですかね?
2倍のポイントを手に入れた! 90ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..中級者(9,387ポイント)
Date: 2010/08/05(木) 11:20
No:58111
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
そういえば例外投げた瞬間に捕捉する機能が VS にあったようなって調べてみたら、ありました。
http://msdn.microsoft.com/ja-jp/library/d14azbfh.aspx
1. [デバッグ] メニューの [例外] をクリックします。
2. [例外] ダイアログ ボックスで、例外の全体カテゴリの [スローされるとき] を選択します (たとえば、[Common Language Runtime Exceptions] など)。
だそうです。これで COM のエラーを捕捉できるかどうかは分かりませんけど、とりあえず全部にチェックを入れてやってみるといいかもしれません。
2倍のポイントを手に入れた! 430ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(41,065ポイント)
Date: 2010/08/05(木) 11:47
No:58113
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
ぬるぽんさん!ありがとうございました!
例外を補足できて、原因箇所が分かりました!
DirectXのエラーではなくて、WindowsAPIのDispatchMessageのところにカーソルが行ったので
DispatchMessageのエラーだと思われます。
が、なぜDispatchMessageでエラーが出るのか分かりません。
該当のコードは以下のようになっております。
色々PeekMessageの引数をPM_NOREMOVEに変えてみたり、GetMessageにしてみたりしたんですが、
エラーが消えません。。。
下記のコードで何かおかしい部分はありますでしょうか?
必要であれば他のコードも載せます。
while(1){
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
if(msg.message==WM_QUIT)
break;
DispatchMessage(&msg);
}else{
//ここにゲーム処理
}
334ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..中級者(9,442ポイント)
Date: 2010/08/05(木) 12:08
No:58114
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
そうなるとちょっと今の段階では分からないですね。
現象の再現するコードと、再現手順があるといいかもしれません。
55ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(27,219ポイント)
Date: 2010/08/05(木) 12:39
No:58115
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
ディスパッチされたプロシージャの中でエラーが起きてるとかそういうのは無いですか。
ウィンドウをアクティブにするたびに出るということですから、WM_ACTIVATE あたりとか。
エラーが起きる時の msg の中身を記録したりして、プロシージャの中身まで掘り下げていった方がいいかもしれませんね。
73ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(41,142ポイント)
Date: 2010/08/05(木) 12:39
No:58116
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
すいません。全部のコードを載せるわけにはいかないので、
今再現するコードを作成中です。
が、再現しない;
やっぱりゲームメインの処理も関係してるのかなぁ。。。
77ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(41,483ポイント)
Date: 2010/08/05(木) 12:43
No:58117
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
>>へろりさん
ありがとうございます。
ウィンドウプロシージャで制御してるメッセージは下記のコードだけなんですよね。。。
WM_AVTIVATEは処理してません。
で、色々試しているうちに、PeekMessageの第二引数をNULLからhwndに変えたら、
DispatchMessageではエラーは出なくなったのですが、画面を終了する際に、
ウィンドウプロシージャのWM_CLOSEのif文のところで同じエラーが出るようになってしまったんですよね。
何か思い当たるところがございましたら、ご指導よろしくお願い致します。
LRESULT CALLBACK WinProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
{
switch(msg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,TEXT("終了しますか?"),TEXT("終了確認"),MB_YESNO | MB_ICONQUESTION)){
DestroyWindow(hwnd);
}
return 0;
}
return DefWindowProc(hwnd,msg,wp,lp);
}
341ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(41,436ポイント)
Date: 2010/08/05(木) 12:46
No:58118
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
エラーが出る際の、MSG構造体のmessageメンバの値は「275」でした。
現在調査中です。
47ポイント を落としてしまった。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(41,551ポイント)
Date: 2010/08/05(木) 13:09
No:58119
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
すいません。再現するコードを作っていると、
どうやらDirectsoundの初期化処理をスキップするとエラーが出なくなったので、
もう一度Directsoundの処理を見直してみます。
なので一旦忘れてください。
一応エラーが解消されたら、解決にします。
115ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(41,763ポイント)
Date: 2010/08/05(木) 14:57
No:58120
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
すいません。やっぱりわかりません。。。
再現するコードが作成できたので貼ります。
ダイレクトサウンドを初期化して、解放するだけのコードです。
よろしくお願いいたします。
#include <windows.h>
#include <dsound.h>
#pragma comment(lib,"dsound.lib")
HWND hwnd;
HINSTANCE hinst;
LPDIRECTSOUND8 lpds8;
BOOL InitWindowClass(WNDPROC wndproc,LPCTSTR lpszclassname);
HRESULT DsoundInit(void)
{
if(DS_OK!=DirectSoundCreate8(NULL,&lpds8,NULL))
return E_FAIL;
if(DS_OK!=lpds8->SetCooperativeLevel(hwnd,DSSCL_PRIORITY)){
return E_FAIL;
}
return S_OK;
}
LRESULT CALLBACK WinProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
{
switch(msg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,TEXT("終了しますか"),TEXT("test"),MB_YESNO))
DestroyWindow(hwnd);
return 0;
}
return DefWindowProc(hwnd,msg,wp,lp);
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
MSG msg;
int width=700,height=640;
hinst = hInstance;
//親ウィンドウクラス名
LPCTSTR classname = TEXT("test");
RECT rect;
rect.left=0;
rect.right=width;
rect.top=0;
rect.bottom=height;
AdjustWindowRect(&rect,WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE | WS_MINIMIZEBOX,FALSE);
if(!InitWindowClass(WinProc,classname)) return -1;
hwnd = CreateWindow(
classname,TEXT("テストウィンドウ"),WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE | WS_MINIMIZEBOX,
(GetSystemMetrics(SM_CXSCREEN)-width)/2,(GetSystemMetrics(SM_CYSCREEN)-height)/2,
rect.right-rect.left,rect.bottom-rect.top,
NULL,NULL,hinst,NULL);
if(hwnd==NULL) return -1;
DsoundInit();
while(1){
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
if(msg.message==WM_QUIT){
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}else{
Sleep(16);
//
}
}
lpds8->Release();
return msg.wParam;
}
BOOL InitWindowClass(WNDPROC wndproc,LPCTSTR lpszclassname)
{
WNDCLASSEX winc;
winc.cbSize=sizeof(WNDCLASSEX);
winc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
winc.lpfnWndProc = wndproc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hinst;
winc.hIcon = NULL;
winc.hCursor = LoadCursor(NULL,IDC_ARROW);
winc.hbrBackground =NULL;
winc.lpszMenuName = NULL;
winc.lpszClassName = lpszclassname;
winc.hIconSm=NULL;
return RegisterClassEx(&winc);
}
212ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(56,492ポイント)
Date: 2010/08/05(木) 15:48
No:58122
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
私の環境では再現しませんね
例外は出ませんでした
VC++2008 VC++2010EE vista 32bitです
ひょっとして7は64ビットOSでしょうか(EEだと64ビット版はコンパイルできませんよね)
71ポイント を手に入れた。
|
|
|
|
|
Name: へろり ..プログラマー(27,266ポイント)
Date: 2010/08/05(木) 15:49
No:58123
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
Windows7 Visual Studio .NET 2003 再現しません。
DirectXはさっぱり分かりませんが、DirectX9 SDK 入ってます。
47ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..中級者(9,499ポイント)
Date: 2010/08/05(木) 15:53
No:58125
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
自分の環境でも出なかったです。
WindowsXP
Visual Studio 2008 Standard Edition
DirectX SDK (February 2010)
57ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(41,916ポイント)
Date: 2010/08/05(木) 16:15
No:58126
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
皆さんの環境では再現しませんか;
私の環境がまずいのかなぁ。困りましたね。
原因がまったく分からないです。
ちなみに、
OSはWindows7 Home Premiumの32ビットOSです。
SDKはNovember 2008です。
一応デバッグ時の画面を貼っておきます。
何か分かる方、ご教授よろしくお願い致します。
153ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(147,161ポイント)
Date: 2010/08/05(木) 16:23
No:58127
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
プロジェクトのプロパティは(インクルードパスとかビルドに必須な個所を除いて)何もいじってないのですよね?
デフォルトから何かいじっているのならそれを書いた方がいいかもしれません。
ですがその前に、 SDK を最新のものにしてみてください。(現段階では June 2010 が最新)
SDK ごとに使用されるランタイムも違うので、もしかしたらそれで解消されるかもしれませんよ。
130ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(41,987ポイント)
Date: 2010/08/05(木) 16:26
No:58128
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
御津凪さん。ありがとうございます!
プロパティは何もいじっていません。
一応念のため聞きますが、SDKを最新にしても、
今まで通りのコードでプログラムは組めますでしょうか?
一応これ以外にもD3DやDirectinputなどのコードもたくさん書いているので、
更新したら、いきなりコンパイルできなくなった〜なんてことないですよね?
71ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(146,875ポイント)
Date: 2010/08/05(木) 16:43
No:58130
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
推薦されなくなった機能(DirectMusicや、DirectX9の一部の関数など)が新しい SDK でなくなっていることはありますが、
必要だと思っていた機能が使えなくなるようなことは一部を除いてほとんどありません。
(一部というのは MIDI が再生できていた DirectMusic のこととか)
最新の SDK をインストールしても、前の SDK をアンインストールしなければ、
インクルードパス・ライブラリパスを切り替えるだけで問題ないので、何かしらコンパイルできないなどの問題が
あってもすぐに使用する SDK を戻すことができます。
なお、使用している SDK に対応したランタイムを使用するので、ランタイムの更新だけではランタイムにバグがあった場合を除き改善することはありません。
286ポイント を落としてしまった。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(56,607ポイント)
Date: 2010/08/05(木) 16:51
No:58132
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
複数のDXSDKをインストールするのは問題ないです
設定で優先順位が変えられるので一番上に持っていくだけでいいですよ
私はこれだけ入れてます
関係ないですがVC++2010だとこの設定をプロジェクト毎にしないといけなくなったのが面倒です
115ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(42,199ポイント)
Date: 2010/08/05(木) 16:58
No:58133
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
toyoさん。ありがとうございます。
SDKの件、教えていただいてありがとうございます。
安心しました。
VC++2010は入れようか悩んでいましたが、面倒臭そうなので、
当分入れないようにします。
102ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(42,178ポイント)
Date: 2010/08/05(木) 17:08
No:58135
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
忙しい中ありがとうございます。
ダウンロードが完了したので、早速インストールして試してみます!
21ポイント を落としてしまった。
|
|
|
|
|
Name: ISLe ..中級者(10,531ポイント)
Date: 2010/08/05(木) 17:28
No:58136
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
toyoさん
> 関係ないですがVC++2010だとこの設定をプロジェクト毎にしないといけなくなったのが面倒です
プロパティマネージャーでMicrosoft.Cpp.Win32.userに対してVC++ディレクトリを設定するとユーザー単位で設定が保存されますよ。
46ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(42,413ポイント)
Date: 2010/08/05(木) 18:01
No:58137
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
最新のSDKをインストールして、インクルードパスの設定も
チェックして、実行してみました。
が、、、、
駄目でした><
もう完全にお手上げです。。。
何か分かる方いらっしゃいましたら、ご教授願います。。。
それと、関係ないかもしれませんが、エラーが出る直前に下記のDLLを読み込むログが
出力されているようです。
まったく関連性がないかもしれませんが、一応書いておきます。
【エラー直前に出るログ】
エラー調査.exe': 'C:\Windows\System32\RpcRtRemote.dll' を読み込みました
解決しないかもしれないので、先にお礼言っておきます。
ぬるぽんさん、へろりさん、toyoさん、御津凪さん、ISLeさん、ありがとうございました!
235ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(57,013ポイント)
Date: 2010/08/05(木) 18:43
No:58138
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
家のWindows7 32bitで
'wintest.exe': 'C:\Windows\System32\RpcRtRemote.dll' を読み込みました
wintest.exe の 0x75029617 で初回の例外が発生しました: 0x000006F4: NULL 参照ポインターがスタブに渡されました。
'wintest.exe': 'C:\Windows\System32\IME\shared\IMEAPIS.DLL' を読み込みました
wintest.exe の 0x75029617 で初回の例外が発生しました: 0x000006F4: NULL 参照ポインターがスタブに渡されました。
wintest.exe の 0x75029617 で初回の例外が発生しました: 0x000006F4: NULL 参照ポインターがスタブに渡されました。
'wintest.exe': 'C:\Windows\System32\IME\shared\imecfm.dll' をアンロード
'wintest.exe': 'C:\Windows\System32\IMJP10K.DLL' をアンロード
とでました
RPC_X_NULL_REF_POINTER
なのでRpcRtRemote.dllが怪しいですね
Vistaでは読み込まれてないdllですが何者でしょう?
ISLeさんありがとうございます
お詳しいですね。いつも感心しています。
406ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(42,542ポイント)
Date: 2010/08/05(木) 19:11
No:58139
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
toyoさんの環境でも出ましたか!
windows7の32bitだと出るんですかねぇ。
このdllをググっても英語ばかりのページしか引っかからなくて、
何者かさっぱりわかりません。
まあ、このエラーはゲームの処理が止まって動かなくなるようなエラーではないので、
最悪無視しようと思ってます。
皆さんもお忙しいと思うので、ほどほどの対応でかまいませんので。。。
129ポイント を手に入れた。
|
|
|
|
|
Name: うしお
Date: 2010/09/06(月) 04:16
No:581041283714184
|
|
Title: Re:NULL 参照ポインターがスタブに渡されました。
|
|
はじめまして
環境 windows7 32bit VisualStudio2010EE DirectxSDK June2010
私も同じエラーで困っていましたが、
XAudio2を使うためのCoInitializeExが原因でした。
いろいろ試行錯誤した結果、CoInitializeExの位置によって
NULL 参照ポインターがスタブに渡されました。
のエラーの有無に違いが出ているということがわかりました
どうやら、
ShowWindowを呼び出した後にCoInitializeExが呼ばれた場合
エラーのようで、
それ以前、にCoInitializeExを持ってきた場合、
エラーを消すことができました
細かいことはわかりませんが、参考になれば幸いです
DirectSoundを利用しているとのことでしたが、初期化位置になにか糸口があるかもしれません。
また、MicrosoftはDirectSoundはXAudio2に移行を推奨しているようですので、もしかすると、
そういうのも裏で関係しているのかもしれません
これを機にXAudio2に乗り換えるのも良い手段かも知れません
ああ・・・デバッグしんどかった・・・
|
|
|
|
Name: dic ..比類無きプログラマー(89,138ポイント)
Date: 2010/08/05(木) 10:47
No:58107
|
|
Title: 優先順位を設定する
|
|
お世話になります dicです
タイトルの通り、プロセスの優先順位を設定する方法(関数)を探してます
親プロセスだけの優先順位の設定でいいのです
googleに検索をかけてもタスクマネージャからの優先順位の変更の方法しか紹介されてなくて
C/C++言語で親プロセスの優先順位を設定したいのです
スレッド関係で扱ったことはあるのですが、かなり昔でして忘れてしまっています
どなたかプロセスの優先順位を変更する方法を教えていただけないでしょうか?
151ポイント を手に入れた。
|
|
|
Name: Via ..ぴよぴよ(142ポイント)
Date: 2010/08/04(水) 08:11
No:58077
|
|
Title: CSVファイルから2バイト文字を読み込む方法
|
|
DXライブラリを使って、ゲームを作ろうと思っています。
こちらのサイトの11章で、csvファイルを作って敵の出現や動作の制御方法が解説されています。それと同様のことは出来るようになりました。
ただ、読み込むデータに2バイト文字が含まれている場合、FileRead_getc関数は使えないと思います。
csvファイルの1行が、文字列,数値,文字列,数値 のようになっている場合、どのように読み込ませたらよいでしょうか。
142ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(202,822ポイント)
Date: 2010/08/04(水) 08:20
No:58078
|
|
Title: Re:CSVファイルから2バイト文字を読み込む方法
|
|
CSVの読み込みならば、fscanf関数やstrtok関数などが便利だと思いますよ。
30ポイント を落としてしまった。
|
|
|
|
|
Name: Via ..ぴよぴよ(178ポイント)
Date: 2010/08/04(水) 22:37
No:58103
| 解決!
|
Title: Re:CSVファイルから2バイト文字を読み込む方法
|
|
お二方ともありがとうございます。
いろいろ試行錯誤した結果、strtok関数を使って目的を達することが出来ました。
出来てしまえばとても単純な仕組みでしたが、いろいろ試している最中はあれもこれもうまくいかなくて大変でした。
また詰まるところがあると思いますので、よろしくお願いします。
36ポイント を手に入れた。
|
|
|
|
Name: シエル ..熟練のプログラマー(40,101ポイント)
Date: 2010/08/04(水) 12:39
No:58082
|
|
Title: 龍神録の18章の当たり判定について、
|
|
龍神録の18章(http://dixq.net/rp/18.html)の当たり判定について、
自機の弾のスピードしか考慮してませんが、
もし敵の動きが縦や横に結構速く移動した場合はその敵の移動量も考慮して
当たり判定をする必要があると思うのですが、正しいでしょうか?
逆に龍神録は、敵の動きがそんなに早くないから敵の移動量は考慮しない方法で、
当たり判定をしているのでしょうか?
96ポイント を手に入れた。
|
|
|
|
Name: ISLe ..中級者(10,485ポイント)
Date: 2010/08/04(水) 16:49
No:58094
|
|
Title: Re:龍神録の18章の当たり判定について、
|
|
龍神録方式ではないのですが…
矩形判定方式だと1フレームあたりの移動量も考慮して水増ししたり当たり判定付きの残像を作ったりします。
アーケードや家庭用のシューティングゲームで自機の撃った弾の消滅パターンが表示される場所をよく見るとけっこう飛び飛びだったりしますよ。
ボスキャラとか耐久力のある大型の敵キャラのパーツに撃ち込んでいるときが分かりやすいです。
少し前後にずれると手前に当たっていた弾がパーツの奥のほうで当たっているように変化する現象がしばしば見られます。
--(追記)↑の現象は龍神録でも発生しますね^^;

174ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,245,192ポイント)
Date: 2010/08/04(水) 19:31
No:58097
|
|
Title: Re:龍神録の18章の当たり判定について、
|
|
自機の弾は当たり判定が大きく、敵の当たり判定もまた大きいです。
敵の当たり判定が80ピクセル、自機弾の当たり判定が20ピクセルあるとすると、100ピクセルも当たる範囲があります。
1フレームの間にこれを通り抜けるには100[ピクセル/フレーム]以上の速さが必要であり、
現実的にそれはありえないので、考慮していません。
ただし、逆は考える必要があります。
敵の弾は当たり判定が小さく、自機の当たり判定もまた小さいです。
龍神録では当たり判定が1ピクセルの弾も出てきます。
そうなるとしょっちゅう通り抜けるということが起きます。
ですから、敵の弾と自機の当たり判定にのみ軌跡に当たり判定範囲が存在しないかを計算する処理を入れてあります。
しかし、龍神録プログラミングの館はなるべく難しい処理は書きたくなかったので省略してあります。
龍神録と龍神録プログラミングの館のプログラムはかなり違うので、あちこち簡略化してあります。
なので、
龍神録では高速に飛んでくるたまに向かって突進しても被弾しますが、
館のプログラムでは高速に飛んでくるたまに突進するとすり抜けてしまうかもしれません。
(ただし龍神録でもレーザーは軌跡計算をしていないので、レーザーをすり抜ける場面はたまに見られます・・;)
>> ISLeさん
えぇ、敵の当たり判定はかなりいい加減です^^;
446ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..熟練のプログラマー(40,203ポイント)
Date: 2010/08/04(水) 20:30
No:58102
| 解決!
|
Title: Re:龍神録の18章の当たり判定について、
|
|
なるほど。自分の思っていたことが間違っていなかったので安心しました。
本当に必要な部分だけ軌跡を計算して当たり判定すればよいですね。
ありがとうございました!
2倍のポイントを手に入れた! 102ポイント を手に入れた。
|
|
|
|
Name: Wグリント ..ぴよぴよ(310ポイント)
Date: 2010/08/04(水) 00:30
No:58068
|
|
Title: 動画のボタンキャンセルについて
|
|
ゲームのオープニングが作りたくて以下のコードを作ったのですが上手く行きません。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
PlayMovie( "video.avi" , 1 , DX_MOVIEPLAYTYPE_BCANCEL ) ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
これを実行した場合ボタンを押したら再生を中断してソフトを中断すると思うのですが...無理です。
どうしたら良いのですか?
一応OSは7で環境はVC++です。
まだ中3で始めてから1ヶ月もたっていませんので不手際があるかもしれませんがよろしくお願いします。

310ポイント を手に入れた。
|
|
|
|
Name: naohiro19 ..ぴよぴよ(309ポイント)
Date: 2010/08/04(水) 07:26
No:58074
|
|
Title: Re:動画のボタンキャンセルについて
|
|
その動画ファイルのコーデックソフトウェアが入っていなければ
Combined Community Codec Pack(コンバインド・コミュニティ・コーデック・パック)をインストールする必要があります。
公式サイトでダウンロードできます。
125ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがりさん ..ぴよぴよ(137ポイント)
Date: 2010/08/04(水) 10:05
No:58080
|
|
Title: Re:動画のボタンキャンセルについて
|
|
>>ゲームのオープニングが作りたくて以下のコードを作ったのですが上手く行きません。
上手くいかないだけでは何がうまくいかないのか何も伝わりません、もっと具体的に説明してください。
>>これを実行した場合ボタンを押したら再生を中断してソフトを中断すると思う
中断しません。
>>まだ中3で始めてから1ヶ月もたっていません
なにが1ヶ月なのですか?
C/C++が1ヶ月ならもう少し基礎を勉強したほうがいいです。
137ポイント を手に入れた。
|
|
|
|
|
Name: Wグリント ..ぴよぴよ(395ポイント)
Date: 2010/08/04(水) 13:42
No:58085
|
|
Title: Re:動画のボタンキャンセルについて
|
|
通りすがりさんの、
>>これを実行した場合ボタンを押したら再生を中断してソフトを中断すると思う
中断しません。
というのはどうゆうことなのですか?
できれば教えてください。
85ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがりさん ..ぴよぴよ(325ポイント)
Date: 2010/08/04(水) 14:14
No:58086
|
|
Title: Re:動画のボタンキャンセルについて
|
|
このプログラムだと、DxLibの初期化→動画再生→DxLibの終了処理、の順番に動きます。
キーの処理がありません。
なのでボタンを押しても中断はしません。
それにこのプログラムはループ処理がないので、動画を再生したらプログラムは終了してしまいます。
とりあえず、http://dixq.net/g/を一通り読んでください。
ループ処理やキー処理などが分かりやすく解説しています。
解説をしっかり読んで十分に理解してください。
188ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(56,277ポイント)
Date: 2010/08/04(水) 14:53
No:58089
|
|
Title: Re:動画のボタンキャンセルについて
|
|
ボタンによる動画の中断機能はPlayMovie関数にあるので問題はないです
私の環境ではXPでは動画再生してキーを押すとちゃんと中断されプログラム終了しました
Vistaでは動画も再生されずに終了しましたけど
PlayMovieは環境によってうまく動かないのかもしれませんね
97ポイント を手に入れた。
|
|
|
|
|
Name: Wグリント ..ぴよぴよ(456ポイント)
Date: 2010/08/04(水) 15:20
No:58090
| 解決!
|
Title: Re:動画のボタンキャンセルについて
|
|
通りすがりさんの言うとうり1通学ぶ事にしました。
あとnaohiro19さんの紹介していたCCCPをインストールしましたが無理でした。
toyoさん、とても参考になりました。
通りすがりさん、naohiro19さん、toyoさん、ありがとうございました。 
61ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,245,330ポイント)
Date: 2010/08/04(水) 19:48
No:58098
|
|
Title: Re:動画のボタンキャンセルについて
|
|
> Wグリントさん
こんにちは。Wグリントさんの解釈であっていると思いますよ。
BCANCELを指定しているので、キー入力があると終了するはずです。
しかしおかしいですね、toyoさんの仰る通り私もXPで試したら正常に動作しましたが、
Windows7で動作すると、再生はされるもののどのキーを押しても終了しませんでした。
DXライブラリの管理人さんに聞いてみた方が良いように思います。
138ポイント を手に入れた。
|
|
|
|
Name: Tororo [URL] ..初心者(8,504ポイント)
Date: 2010/07/28(水) 18:03
No:57670
|
|
Title: 「雑談」 自分で作ってみたリストについて
|
|
お久しぶりです。 Tororoです。
自分で管理が楽になるようにと、このようなリスト(マップ)を作ってみました。
ただ、まだ使いにくいところや、
「ここは、このほうがいい」
という場所があるのではないかと思いまして、質問させてもらいました。
↓がそのソースです。(Keyのことなどは省いてあります。)
class CGameBase
{
public:
virtual void Run()=0;
};
class CGameApp
{
private:
map<string,CGameBase*> m_MainList;
list<string> m_MapNameList;
public:
void RunMain()
{
map<string,CGameBase*>::iterator it = m_MainList.begin();
list<string>::iterator it2 = m_MapNameList.begin();
while(ProcessMessage()==0 && ClearDrawScreen()==0
&& GetHitKeyStateAll_2()==0 && m_Key[KEY_INPUT_ESCAPE]==0)
{
it = m_MainList.begin();
it2 = m_MapNameList.begin();
while(it != m_MainList.end() && it2 != m_MapNameList.end()){
m_MainList[*it2]->Run();
it++;
it2++;
}
ScreenFlip();
}
}
void AddObject(string key_name, CGameBase *obj)
{
m_MainList.insert(map<string,CGameBase*>::value_type(key_name,obj));
if(m_MainList.size()==0){
m_MapNameList.push_front(key_name);
}else{
m_MapNameList.push_back(key_name);
}
}
void BreakObject(string key_name)
{
map<string,CGameBase*>::iterator it = m_MainList.begin();
list<string>::iterator it2 = m_MapNameList.begin();
while(it != m_MainList.end() && it2 != m_MapNameList.end()){
if(*it2 == key_name){
m_MainList.erase(it++);
m_MapNameList.erase(it2++);
return;
}
it++;
it2++;
}
return;
}
CGameApp(void)
{
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0)return;
}
~CGameApp(void)
{
DxLib_End();
}
};
使い方としては、メイン関数内で、
CGameApp *App = new CGameApp();
App->AddObject("TEST1", new CTEST1()); (CTEST1クラスはCGameObjectから継承している。)
App->AddObject("TEST2", new CTEST2()); (CTEST2クラスはCGameObjectから継承している。)
App->AddObject("TEST3", new CTEST3()); (CTEST3クラスはCGameObjectから継承している。)
App->BreakObject("TEST2"); Key_nameが”TEST2”の物を削除
App->RunMain();
とこのような感じです。
改善したほうが良いところや、意見をもらえると幸いです^^;
よろしくお願いしますm(_ _)m 
650ポイント を手に入れた。
|
|
|
|
Name: ぽこ ..プログラマー(26,396ポイント)
Date: 2010/07/28(水) 18:37
No:57676
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
使用方法のサンプルプログラムもあった方が
アドバイス貰い易いですよ。
21ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(88,375ポイント)
Date: 2010/07/28(水) 21:32
No:57681
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
プレイヤーの位置や、背景の位置
システム関連の変数はどうやって管理するのでしょうか?
//--------------------------------------------------
小規模なら大丈夫でしょうが
中・大規模になるとデバックが大変なので
呼び出し履歴があるといいですね

34ポイント を手に入れた。
|
|
|
|
|
Name: めるぽん ..初心者(8,205ポイント)
Date: 2010/07/28(水) 22:02
No:57683
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
ソースを見る限り、new した CTEST1 や CTEST2 が delete されていないようです。
あと BreakObject 関数ですが、map のキーはソートされていて、list<string> はソートされずに挿入されているため、両方のイテレータを同じように回して erase すると、恐らく
App->AddObject("TEST2", new CTEST2());
App->AddObject("TEST1", new CTEST1());
App->AddObject("TEST3", new CTEST3());
App->BreakObject("TEST2");
としたときに list からは "TEST2" のデータが消され、map からは {"TEST1", CTEST1} のデータが消されてしまって整合性が取れなくなってしまうような気がします。
そもそも list を使う意味が分からないですね。
名前の一覧が欲しいのであれば map のキー部分を回せば手に入るので必要無いと思います。
ということで、
void RunMain()
{
while(ProcessMessage()==0 && ClearDrawScreen()==0
&& GetHitKeyStateAll_2()==0 && m_Key[KEY_INPUT_ESCAPE]==0)
{
for (map<string, CGameBase*>::iterator it = m_MainList.begin();
it != m_MainList.end(); ++it)
{
(*it)->Run();
}
ScreenFlip();
}
}
void AddObject(string key_name, CGameBase *obj)
{
m_MainList.insert(map<string, CGameBase*>::value_type(key_name, obj));
}
void BreakObject(string key_name)
{
m_MainList.erase(key_name);
}
こんな感じでいいんじゃないかと(まだ delete していない問題は残ってますが)。
362ポイント を手に入れた。
|
|
|
|
|
Name: Tororo [URL] ..初心者(8,746ポイント)
Date: 2010/07/29(木) 07:30
No:57708
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
dicさん
たしかに違う object1 から object2 を見たい場合は、
Key_nameでマップ内部のobjectをreturnさせる必要がありそうですね。
ただ、CGameObject内に X,Yを追加するのも微妙ですね^^;
難しいです。。
めるぽんさん
ソートがされていない為同じようにイテレーターを
回すと、おかしくなるんですね。気づきませんでした^^;
deleteも使っていないですね。
デストラクタで全部消去する必要がありそうです。
ちょっと今日は続きが作れないかもしれませんが、
色々考えておきます。。
242ポイント を手に入れた。
|
|
|
|
|
Name: Tororo ..初心者(8,815ポイント)
Date: 2010/07/29(木) 16:56
No:57747
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
内部から指定された KeyのObject をreturnして、
使いたいクラスにキャストするのは、どうかなと考えてみたりしています。。
ただそのためにincludeする.hが増えてしまいそうです。。
う〜ん うまく作れたかなと思ったら、穴だらけです。
69ポイント を手に入れた。
|
|
|
|
|
Name: Tororo [URL] ..中級者(9,256ポイント)
Date: 2010/07/31(土) 20:56
No:57895
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
>>めるぽんさん
>> for (map<string, CGameBase*>::iterator it = m_MainList.begin();
>> it != m_MainList.end(); ++it)
>> {
>> (*it)->Run();
>> }
この文だと、Runを使用する事が出来ないんですが・・
なぜでしょう?
エラーはこの二つです。
C2819: クラス 'std::pair<_Ty1,_Ty2>' にはオーバーロードされたメンバ 'operator ->' がありません。
C2039: 'Run' : 'std::pair<_Ty1,_Ty2>' のメンバではありません。
>>dicさん
CGameBase* GetObject(string key_name)
{
return *m_MainList[key_name];
}
このような関数で、
CPlayer *player=GetObject("PLAYER1");
*player->m_X;
のような事を考えています。
けれど、何だか使いにくいかもしれませんが・・
209ポイント を手に入れた。
|
|
|
|
|
Name: スキマ妖怪 ..入門者(3,745ポイント)
Date: 2010/07/31(土) 21:48
No:57896
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
とりあえず、エラーは
(*it)->Run();
↓
it->second->Run();
でなくなると思いますよ。
59ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(88,534ポイント)
Date: 2010/08/01(日) 17:31
No:57933
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
>Tororoさん
> CGameBase* GetObject(string key_name)
> {
> return *m_MainList[key_name];
> }
>このような関数で、
> CPlayer *player=GetObject("PLAYER1");
> *player->m_X;
>のような事を考えています。
>
>
>けれど、何だか使いにくいかもしれませんが・・
>
なるほど、そうやって扱うのですね
ただ、確かに敵を管理するときは使いにくいかもしれないですね
敵の生成や弾の生成、当たり判定など
83ポイント を手に入れた。
|
|
|
|
|
Name: Tororo [URL] ..中級者(9,360ポイント)
Date: 2010/08/01(日) 18:20
No:57937
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
>>dicさん
この方法ぐらいしか、自分には思いつきませんでした・・
ほかに、もっと良い方法があるなら、
教えて欲しいです。。
このリストはゲームよりは、小さなアプリ向きかもしれません。
90ポイント を手に入れた。
|
|
|
|
|
Name: Tororo [URL] ..中級者(9,516ポイント)
Date: 2010/08/03(火) 13:36
No:58027
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
とりあえず、リスト自体はちゃんと動いているので、
一旦、解決とさせてもらいます。
ありがとうございましたm(_ _)m
また、ゲームが完成したら報告させてもらいます。
85ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(88,918ポイント)
Date: 2010/08/03(火) 19:02
No:58050
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
map は結構使わなかったので自信ないですが
下のように CGameBase クラスに仮想関数を作って これを継承させて呼び出すというのはどうでしょうか?
#include <stdio.h>
//======================================================
class CGameBase
{
public:
virtual void Hit();
virtual void EnemyMove();
};
//======================================================
class CData : public CGameBase
{
private:
int m_iPlayerX;
int m_iPlayerY;
int m_iEnemyX[100];
int m_iEnemyY[100];
public:
void Hit(); // ヒット処理
void EnemyMove(); // 敵の動作
}:
//======================================================
class CGameApp : public CGameBase
{
map<string,CGameBase*> m_list[10];
public:
void AddObject( string name, CGameBase* );
void Run();
};
void CGameApp::AddObject( string name, CGameBase* ) { }
void CGameApp::Run()
{
// "Data" を取り出す
// CGameBase *data = list[data];
// 取り出したポインタを元に関数を呼び出す
// data->Hit();
}
//======================================================
int main()
{
CGameApp *App = new CGameApp();
app->AddObject( "Data", new CData() );
app->Run();
return 0;
}

384ポイント を手に入れた。
|
|
|
|
|
Name: Tororo ..中級者(9,666ポイント)
Date: 2010/08/04(水) 07:04
No:58073
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
>>dicさん
この方法も少しは考えたのですが、
これでは CGameBase の依存性が高くなって、
再利用(クラス)しにくいように見えたので、
でも、これを見て思ったのですが、
CGameBase から派生させて、
CChara,CItem などとしていくと楽かもしれません。。
131ポイント を手に入れた。
|
|
|
|
|
Name: dic ..比類無きプログラマー(88,987ポイント)
Date: 2010/08/04(水) 16:30
No:58092
|
|
Title: Re:「雑談」 自分で作ってみたリストについて
|
|
CChara, CItem としても
CChara から CItem へのアクセス方法が・・・
グローバルなインスタンスを使うしか他には思いつかないですね
69ポイント を手に入れた。
|
|
|
|
Name: t@ ..ぴよぴよ(653ポイント)
Date: 2010/08/03(火) 19:22
No:58051
|
|
Title: 構造体に格納した画像をランダムに表示したい
|
|
こんにちはt@です。
また質問させてください。
1. 構造体に格納したカードの画像を、ランダムに13枚4列に並べて表示させようとしています。
カードは重複しないようにしたいのですが、まだそこには至ってません(;_;)
2.
typedef struct{
char name[5][22][25];
int graph[5][22];
int score[5][22];
}card;
card c;
void start(){
int k=0,j=0,x=0,y=0;
while(k<4){
while(j<14){
DrawGraph(x,y,c.graph[GetRand(3)][GetRand(13)],TRUE);
j++,x=x+50;
}
k++,x=0,j=0,y=y+100;
}
}
ここではgraph[0][0]からgraph[3][13]まで表示させます。
カードを一枚表示したら少しずらし、カードが見えるようにしています。
13枚表示したら下にずらして別の種類のカードを表しします。
3.このプログラムだと、13x4枚のカードは表示されるのですが、表示されているカードすべてが常に高速でランダムに切り替わってしまいます。
変数の宣言を関数の外に出すと、カードは一瞬だけ表示され画面には残りません。
画像は止まってますが、実際にはかなり動いてます。
4.プログラム自体、「繰り返している間表示」になってるからだと思うんですが、どうすれば思うようにできるのかがわかりません。構造体に格納したカードの画像を13枚x4列ランダムに表示し、並べたいです。
5.学校で習って、成績は真ん中くらいです。
windows Vista
Visual C++ Express Edition
Dxライブラリ

433ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(202,737ポイント)
Date: 2010/08/03(火) 20:33
No:58052
|
|
Title: Re:構造体に格納した画像をランダムに表示したい
|
|
ちょっと手を加えてしまいましたが、下記のような感じでいかがでしょうか?
init関数は実装していませんので、画像ハンドルの取得やその他の値の初期化を実装してください。
// カードデッキではなく、カード1枚分のデータを構造体にした方が
// 管理が楽なので変更しました。
typedef struct
{
char name[25];
int graph;
int score;
}card;
// カード5×22=110枚分という事で、構造体の配列としています。
card c[5 * 22];
// start関数を呼ぶ前にここで構造体配列へでーたセットしておいてください。
void init(void)
{
for (int i = 0; i < 5 * 22; ++i)
{
// ここでcard構造体のデータを初期化しておく
}
}
void start(void)
{
// 描画されるカードのインデックス
int i = 0;
// とりあえず、配列の先頭から順番に13×4=52枚分を描画します。
for (int y = 0; y < 4; ++y, ++i)
{
for (int x = 0; x < 13; ++x)
{
DrawGraph(x * 50, y * 100, c[i].graph, TRUE);
}
}
}
475ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(202,852ポイント)
Date: 2010/08/03(火) 20:35
No:58053
|
|
Title: Re:構造体に格納した画像をランダムに表示したい
|
|
すみません、start関数のループが間違ってますね(^_^;)
void start(void)
{
// 描画されるカードのインデックス
int i = 0;
// とりあえず、配列の先頭から順番に13×4=52枚分を描画します。
for (int y = 0; y < 4; ++y)
{
for (int x = 0; x < 13; ++x, ++i)
{
DrawGraph(x * 50, y * 100, c[i].graph, TRUE);
}
}
}
115ポイント を手に入れた。
|
|
|
|
|
Name: t@ ..ぴよぴよ(692ポイント)
Date: 2010/08/04(水) 12:50
No:58083
|
|
Title: Re:構造体に格納した画像をランダムに表示したい
|
|
回答ありがとうございます。
ですが、まだ画像の件が解決できません。
協力お願いします!
39ポイント を手に入れた。
|
|
|
|
|
Name: t@ ..かけだし(1,069ポイント)
Date: 2010/08/04(水) 14:31
No:58088
|
|
Title: Re:構造体に格納した画像をランダムに表示したい
|
|
すみません。質問を変えてみます。
私が今やりたいことは、乱数を呼び出し78種類のカードをランダムに表示させることです。
ですが、実行するとカードの画像は常に高速でランダムに切り替わってしまいます。
これを動かないようにし、毎回違う乱数を呼び出して画像をランダムに表示させたいです。
typedef struct{
char name[5][22][25];
int graph[78];
int score[5][22];
}card;
card c;
void start(){
int i = 0;
for (int y = 0; y < 4; ++y){
for (int x = 0; x < 13; ++x, ++i){
DrawGraph(x * 50, y * 100, c.graph[i], TRUE);
}
}
}
ちなみにこれを実行すると毎回画像のようになります。
DrawGraph(x * 50, y * 100, c.graph[i], TRUE);を
DrawGraph(x * 50, y * 100, c.graph[GetRand(78)], TRUE);にすると高速で動き続けます。
どうか力を貸してください。
377ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..比類無きプログラマー(84,351ポイント)
Date: 2010/08/04(水) 15:29
No:58091
|
|
Title: Re:構造体に格納した画像をランダムに表示したい
|
|
typedef struct{
char name[5][22][25];
int graph[78];
int score[5][22];
int draw_num[4*13]; // 乱数を入れる
}card;
card c;
void start(){
int i = 0;
for (int y = 0; y < 4; ++y){
for (int x = 0; x < 13; ++x, ++i){
DrawGraph(x * 50, y * 100, c.graph[(c.draw_num[i])], TRUE);
}
}
}
ソースは上記のように変更する。
draw_num[0] ~ [51]にはループの外側で乱数をセットしておく。
とすれば希望する動作になるのではないでしょうか。
> バグさん
指摘ありがとうございます。
修正しました。 
207ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(203,373ポイント)
Date: 2010/08/04(水) 16:44
No:58093
|
|
Title: Re:構造体に格納した画像をランダムに表示したい
|
|
>>Mistさん
>>DrawGraph(x * 50, y * 100, c.graph[(c.draw_num[x*y])], TRUE);
ここのdraw_num[x*y]はdraw_num[i]でないとマズくないですか?
>>t@さん
カードの総数も分かったので、ついでにカードシャッフル用の関数も追加してみました。
78枚のカードをシャッフルし、その中から52枚分の数値をdraw_numへ代入します。
乱数発生用の関数はrandを使用していますが、DxLibにはGetRandという関数が用意されていますので、気に入らなければ置き換えてください。
#include <stdlib.h>
#define CARD_NUMBER 78 // カードの総枚数
typedef struct
{
char name[5][22][25];
int graph[CARD_NUMBER];
int score[5][22];
int draw_num[4 * 13];
}card;
card c;
void shuffle(void)
{
int i, j, k, id[CARD_NUMBER];
// シャッフル用の数値配列の初期化
for (i = 0; i < CARD_NUMBER; ++i)
{
id[i] = i;
}
// シャッフル処理
for (i = CARD_NUMBER - 1; i > 0; --i)
{
j = rand() % i;
k = id[i];
id[i] = id[j];
id[j] = k;
}
// シャッフルした値を代入する
for (i = 0; i < 4 * 13; ++i)
{
c.draw_num[i] = id[i];
}
}
void start(void)
{
int i = 0;
for (int y = 0; y < 4; ++y)
{
for (int x = 0; x < 13; ++x, ++i)
{
DrawGraph(x * 50, y * 100, c.graph[(c.draw_num[i])], TRUE);
}
}
}
533ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(56,421ポイント)
Date: 2010/08/04(水) 17:03
No:58095
|
|
Title: Re:構造体に格納した画像をランダムに表示したい
|
|
ですが、実行するとカードの画像は常に高速でランダムに切り替わってしまいます。
これを動かないようにし、毎回違う乱数を呼び出して画像をランダムに表示させたいです。
ループ中でstart( )をずっと呼び続けているのでしょう
何かキーを押したときだけstart( )関数を呼ぶようにしたらどうでしょう
144ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..上級者(16,304ポイント)
Date: 2010/08/02(月) 11:25
No:57973
|
|
Title: Re:ライツアウトの問題
|
|
matsさん
URLを教えて下さってありがとうございます。
参考にさせて頂きます!!
29ポイント を手に入れた。
|
|
|
|
|
Name: asd ..上級者(21,504ポイント)
Date: 2010/08/02(月) 17:25
No:57983
|
|
Title: Re:ライツアウトの問題
|
|
#紹介されているURLにあるとおり、全部消すとクリアですよね?
個人的に思ったことですが、既にライツアウトのルールに則ったプログラムが出来ているのであれば、
全て消えた状態でランダムにライトをつけたり消したりするだけで、
解のある問題ができるのではないかなぁと思ったりします。
まぁ押した順番を覚えておいてそれを逆順すると解答になってしまいますが^^;
全てのライトをランダムに点灯、消灯させてしまうと解のないものが出来てしまうことがあるので
上記のような提案をしてみます。
192ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..上級者(16,396ポイント)
Date: 2010/08/02(月) 23:39
No:57996
|
|
Title: Re:ライツアウトの問題
|
|
asdさん
回答ありがとうございます。
確かにそうなのですが数百問近く用意したいので被らせたくないんです。
同じ場所を何回押しても意味が無いので
この問題は解ける問題なら最高で8手で解けるんですね?
9マスだったら2の9乗で512パターンあり
全てがついてる状態とついてない状態を抜かすと510パターンもあるんです・・・。
92ポイント を手に入れた。
|
|
|
|
|
Name: フリオ ..プログラマー(35,198ポイント)
Date: 2010/08/03(火) 01:58
No:58005
|
|
Title: Re:ライツアウトの問題
|
|
回転、対称による問題の重複や、解ける解けないに関係なく、510パターンを用意するなら、
000000001 ~ 111111110 のビット列を配列に入れるだけです。
67ポイント を手に入れた。
|
|
|
|
|
Name: asd ..上級者(21,698ポイント)
Date: 2010/08/03(火) 15:25
No:58037
|
|
Title: Re:ライツアウトの問題
|
|
>確かにそうなのですが数百問近く用意したいので被らせたくないんです。
ごめんなさい。そんなにたくさん作るとは思っていなかったので先の回答をした次第です。
問題を作る=解けないものは除きたいと考えていますので、
それであれば、9つのライトそれぞれを押すか押さないかをビット列で組み合わせをつくり、
実際に全てのライトが消えている状態でビット列に従い実際にライトを操作するプログラムを作ってしまったほうがよいと思います。
(3*3マスで数百問近くも掲載しているサイトがあるとは考えにくいので)
余り参考にならなくて申し訳ないです。
194ポイント を手に入れた。
|
|
|
|
|
Name: mats ..入門者(3,495ポイント)
Date: 2010/08/04(水) 02:18
No:58072
|
|
Title: Re:ライツアウトの問題
|
|
まだ解決していないようだったので,全問題を作ってみました
全部点灯しているパターンと全部消灯しているパターンを含む512通りです
3×3だと512通り全てに解があるようです
(もちろん,私のプログラムが間違っている可能性もあります)
紅葉さんがどのような形式で問題を欲しいのかわからなかったので,期待と違うかもしれません
添付したファイルは512行全てが以下の形式になっています
盤面を表す9桁2進数 その盤面を消灯させるのに必要な最小手数
盤面を表す9桁2進数は,3×3に直して使って下さい
1が点灯、0が消灯を表しています
例)
000000101
↓
000
000
101
上記の説明もかなり不親切になってしまったので,もしわからないことがあればまた聞いて下さい
227ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..上級者(16,471ポイント)
Date: 2010/08/04(水) 11:56
No:58081
|
|
Title: Re:ライツアウトの問題
|
|
皆様ご回答ありがとうございます。
色々と勉強になりました。
問題を全て作って頂けるとは・・・Σ
お手間を取らせてしまい申し訳御座いません。
家宝にさせて頂きます!!
これは反転させる回数ではなく解ける問題の数でいいのでしょうか?
75ポイント を手に入れた。
|
|
|
|
|
Name: mats ..入門者(3,213ポイント)
Date: 2010/08/04(水) 13:07
No:58084
|
|
Title: Re:ライツアウトの問題
|
|
う,すいません,「解ける問題の数」が何を表してるのかわかりません…
補足すると,添付したファイルの
000100110 1
という行なら,
000
100
110
という盤面が最小1手で消灯できることを表しています
(左下を押す)
000100111 4
という行ならば,
000
100
111
という盤面が最小4手で解けることを表しています
(上,右上,左,右下を押す)
最小手数は,最短解法にこだわらないなら無視しても構いません
解けるか解けないかだけならば,3×3版ライツアウトは512パターン全て解けるようです
(上でも言ったように自分のプログラムが間違っている可能性もあります)
的外れなことを言っていたらごめんなさい…
282ポイント を落としてしまった。
|
|
|
|
Name: shuto ..かけだし(1,489ポイント)
Date: 2010/08/01(日) 05:35
No:57915
|
|
Title: 無題
|
|
DXライブラリを使って3Dのゲームを作っているのですが
参考にしようとしてDXライブラリ置き場のサンプルプログラムの3Dアクション基本のプログラムに
添付した画像のようなポリゴンモデルを入れて動作させたところ、
画像の赤い矢印のような移動はできたのですが
オレンジの矢印のような 壁判定されるポリゴンの上の斜めの床判定ポリゴンからの落下
ができませんでした。
三角形になっているポリゴンが引っかかっていることはわかるのですが
引っかからないように修正する方法が思い浮かびませんでした。
どのようにプログラムやポリゴンモデルをつくればよいのかアドバイスをお願いします。
236ポイント を手に入れた。
|
|
|
|
Name: shuto ..かけだし(1,631ポイント)
Date: 2010/08/04(水) 07:39
No:58075
| 解決!
|
Title: Re:無題
|
|
うーん
読んでみましたが自分の思う処理とあわないかもです。
今週はテスト期間で時間が取れないのでそのうち
自分で考え直してプログラムを作ってみようと思います。
ookamiさん ありがとうございました。
-------------------------
編集:解決マーク付けました 
108ポイント を手に入れた。
|
|
|
|
Name: C言語です ..ぴよぴよ(881ポイント)
Date: 2010/08/03(火) 12:36
No:58025
|
|
Title: マルチスレッドのファイル書き込み
|
|
WinXP(SP3)でVC2008Expressを使っています。
マルチスレッドのアプリケーションで、動作ログをファイルに記録するために
下記のテストプログラムを作ってみたのですが、うまく動作せず困っています。
スレッド関数の中から、ファイルを排他制御して書き込みして、終了するだけ
のプログラムのつもりですが、実行しても終了せず止まってしまいます。
たまにちゃんと終了してくれる時もありますが・・。
デバッグ実行して、停止したプログラムを中断すると、
「プロセスはデッドロックされているか、ユーザーモードコードがどれも実行
されていません。すべてのスレッドが中止されました。」
というメッセージが出ます。ソースコードのカーソルを見ると、LockFileExの
ところで止まっているように見えるのですが、なぜここで止まるのか、原因が
まったくわかりません。
なにか間違えているのでしょうか・・。お助けください。m(_ _)m
─────────────< main.c >────────────────
#include <windows.h>
#include <process.h>
#include <stdio.h>
#define THREAD_NUM 16
HANDLE thread[THREAD_NUM];
HANDLE hFile;
unsigned __stdcall ThreadProc( void *p )
{
UINT id = (UINT)p;
char buf[128];
DWORD dwWrite;
OVERLAPPED ov;
_snprintf( buf,128,"スレッド%dです。\r\n",id );
ZeroMemory( &ov, sizeof(OVERLAPPED) );
// ロックして追記書き込み
if( LockFileEx( hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, &ov ) )
{
SetFilePointer( hFile, 0, NULL, FILE_END );
WriteFile( hFile, buf, strlen(buf), &dwWrite, NULL );
UnlockFileEx( hFile, 0, 1, 0, &ov );
}
_endthreadex(0);
return 0;
}
void main( void )
{
int i;
hFile = CreateFile( "out.txt", GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
if( hFile==INVALID_HANDLE_VALUE )
{
puts("CreateFileエラー");
return;
}
for( i=0; i<THREAD_NUM; i++ )
{
thread[i] = (HANDLE)_beginthreadex( NULL, 0, ThreadProc, (void*)i, 0, NULL );
if( !thread[i] )
puts("_beginthreadexエラー");
}
WaitForMultipleObjects( THREAD_NUM, thread, TRUE, INFINITE );
CloseHandle( hFile );
}
881ポイント を手に入れた。
|
|
|
|
Name: シエル ..プログラマー(39,943ポイント)
Date: 2010/08/03(火) 15:12
No:58033
|
|
Title: Re:マルチスレッドのファイル書き込み
|
|
beginthreadexのことを知らないので何ともいえませんが、
↓って、16個も同じスレッドを作成しているってことでしょうか?
もしそうであれば、作成したスレッドが終了していることを確認してから、
作成した方がいいのではないでしょうか?
まったく検討違いのことを言っていたらすみません。
for( i=0; i<THREAD_NUM; i++ )
{
thread[i] = (HANDLE)_beginthreadex( NULL, 0, ThreadProc, (void*)i, 0, NULL );
if( !thread[i] )
puts("_beginthreadexエラー");
}
256ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(56,180ポイント)
Date: 2010/08/03(火) 15:39
No:58041
|
|
Title: Re:マルチスレッドのファイル書き込み
|
|
LockFileExをブロッキングしないようにしたらどうでしょう
while ( LockFileEx( hFile, LOCKFILE_EXCLUSIVE_LOCK | LOCKFILE_FAIL_IMMEDIATELY, 0, 1, 0, &ov ) == 0) ;
これでも無限ループの可能性はありますがループ回数を制限するとか拡張エラー情報を取得して処理するとかでできないでしょうか
141ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(146,902ポイント)
Date: 2010/08/03(火) 15:51
No:58042
|
|
Title: Re:マルチスレッドのファイル書き込み
|
|
一見正しく動作しているようですが、LockFileExで止まっているということは
そこでマルチスレッド特有のバグが発生しています。
マルチスレッドでは、ある変数に同時に書き込む処理があるのはタブーです。
つまり、 LockFileEx はスレッドセーフではない(複数のスレッドで同時に呼び出してはいけない)ということです。
なので、このような排他制御を行うのであれば、クリティカルセクションを使って制御した方がいいでしょう。
ファイルの指定領域をロックするLockFileExは、あくまでその領域をロックする機能で、スレッドの実行タイミングを制御するものではありません。
160ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..プログラマー(39,979ポイント)
Date: 2010/08/03(火) 15:53
No:58043
|
|
Title: Re:マルチスレッドのファイル書き込み
|
|
Mistさん。すみません。その通りですね。
ファイルの排他制御のテストをしたいのは分かりますが、ThreadProcのスレッドを連続で呼び出して良いんでしょうか?
違う名前の関数を呼び出して、一つのファイルにアクセスして排他制御のテストをするのは分かりますが、
ThreadProcという一つの関数を終了するのを確認せずに、連続で呼び出すのはどうかと思いまして。
勉強不足なんであまり分かってないんですけどね;
変なこと言ってたら完全スルーして下さい。
16ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(147,031ポイント)
Date: 2010/08/03(火) 16:18
No:58044
|
|
Title: Re:マルチスレッドのファイル書き込み
|
|
> ThreadProcという一つの関数を終了するのを確認せずに、連続で呼び出すのはどうかと思いまして。
ThreadProc は一つの関数ですが、複数のスレッドから呼び出されること自体は問題ありませんよ。
各スレッドはそれぞれがスタック領域をが持っている(グローバル領域は共有)ので、
同じ関数を複数のスレッドに起動時に実行する関数として指定しても全く問題ありません。
マルチスレッドで一番問題となるのは、一つの変数(データ)領域に同時に書き込む状況がある場合がほとんどです。
それを防ぐために排他制御が必要になります。
129ポイント を手に入れた。
|
|
|
|
|
Name: お豆 ..ぴよぴよ(531ポイント)
Date: 2010/08/03(火) 18:11
No:58048
|
|
Title: Re:マルチスレッドのファイル書き込み
|
|
OVERLAPPED ov;
//初期化
ZeroMemory( &ov, sizeof(ov) );
ov.Offset = 0;
ov.OffsetHigh = 0;
ov.hEvent = NULL;
//オーバラップ構造体を使う指定 6番目の引数にFILE_FLAG_OVERLAPPED
hFile = CreateFile( "out.txt", GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_ALWAYS, FILE_FLAG_OVERLAPPED | FILE_ATTRIBUTE_NORMAL, NULL );
(追記)よくよく考えると、WriteFileを非同期にするわけでもないので、初期化だけでいいですね
あと本件には関係ないですが、_beginthreadexで作ったスレッドのハンドルは自動でとじられないので自分でやってあげてください
繰り返し〜 CloseHandle(thread[i])
見た感じこれで駄目なら私にはわかりません。 
202ポイント を手に入れた。
|
|
|
|
|
Name: C言語です ..入門者(2,723ポイント)
Date: 2010/08/04(水) 01:24
No:58070
| 解決!
|
Title: Re:マルチスレッドのファイル書き込み
|
|
みなさま、コメントありがとうございます!
いろいろ試してみまして、期待通り動きました!ありがとうございました。
まとめて返信で失礼致します。
>シエルさん、Mistさん
コメントありがとうございました!同じスレッド関数を使ってスレッド作ってもいい
のかな?という点は少し不安だったので、問題ないとのことで、助かりました〜。
>toyoさん
LockFileEx()にLOCKFILE_FAIL_IMEDIATELYフラグ追加したところ、ロックできない
場合すぐ返ってきて、止まらず最後まで走るようにはなりました。ただ、ほとんど
のスレッドでロックできず、ファイルに書き込めるのは2スレッド前後でした。
そこで、ロック失敗後にまたロックするよう無限リトライしたところ、全スレッド
でファイル書き込みができました!ありがとうございました〜。
retry:
if( LockFileEx( hFile, LOCKFILE_EXCLUSIVE_LOCK |LOCKFILE_FAIL_IMMEDIATELY, ...
{
:
}
else
goto retry;
ただ、無限ループになってしまっている点が、少々無駄にCPUを使っているんじゃない
だろうか・・?と気になってしまいます・・。
>御津凪さん
ご指摘のとおり、MSDNのLockFileExのページを見ると「領域をロックすると、他の
プロセスがその領域にアクセスすることを防止できます。」と書いてあるだけで、
「スレッドでも大丈夫」とは書いてありませんでした。これは「プロセス間排他は
いいけどスレッド間排他はダメ」ということでしょうか。
LockFileEx をやめて、クリティカルセクションを使ってみたところ、期待通り動作
しました!
EnterCriticalSection(&cs);
SetFilePointer( hFile, 0, NULL, FILE_END );
WriteFile( hFile, buf, len, &dwWrite, NULL );
LeaveCriticalSection(&cs);
なるほど、こういう時に使うんですね。このやり方がいいのかな・・。
勉強になりました。ありがとうございました!
>お豆さん
スレッドのハンドルをCloseHandleする処理はすっかり抜け落ちていました。ご指摘
ありがとうございました!
OVERLAPPED 構造体の初期化を、ZeroMemory だけでなくちゃんとやってみました。が、
特に挙動に変化は見られないようでした。
また、CreateFile() で FILE_FLAG_OVERLAPPED フラグを使ってみたところ、なんと
LockFileEx でブロックせずに、ロックできないとすぐに戻ってくるようになりました。
これは LOCKFILE_FAIL_IMMEDIATELY を指定した時の挙動と似ています。意外でした。
こんな動作になるんですね・・勉強になりました。ありがとうございました〜。
趣味で画像処理アプリを作っていたのですが、巨大画像の処理を速くしたくて、マルチ
スレッドにしてみようと、手を加え始めた矢先につまづいていましたが、これで前に
進めそうです!みなさま本当にありがとうございました!
最終的なソースは以下のようになりました。クリティカルセクションを使っています。
─────────────< main.c >────────────────
#include <windows.h>
#include <process.h>
#include <stdio.h>
#define THREAD_NUM 16
HANDLE hThread[THREAD_NUM];
HANDLE hFile;
CRITICAL_SECTION cs;
unsigned __stdcall ThreadProc( void *p )
{
UINT id = (UINT)p;
char buf[128];
DWORD dwWrite;
OVERLAPPED ov;
_snprintf( buf,128,"スレッド%dです。\r\n",id );
ZeroMemory( &ov, sizeof(OVERLAPPED) );
ov.Offset = 0;
ov.OffsetHigh = 0;
ov.hEvent = NULL;
// クリティカルセクションでスレッド間排他制御して追記書き込み
EnterCriticalSection( &cs );
SetFilePointer( hFile, 0, NULL, FILE_END );
WriteFile( hFile, buf, strlen(buf), &dwWrite, NULL );
LeaveCriticalSection( &cs );
_endthreadex(0);
return 0;
}
void main( void )
{
int i;
InitializeCriticalSection( &cs );
hFile = CreateFile( "out.txt", GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
if( hFile==INVALID_HANDLE_VALUE )
{
puts("CreateFileエラー");
return;
}
for( i=0; i<THREAD_NUM; i++ )
{
hThread[i] = (HANDLE)_beginthreadex( NULL, 0, ThreadProc, (void*)i, 0, NULL );
if( !hThread[i] )
puts("_beginthreadexエラー");
}
WaitForMultipleObjects( THREAD_NUM, hThread, TRUE, INFINITE );
for( i=0; i<THREAD_NUM; i++ ) if( hThread[i] ) CloseHandle( hThread[i] );
CloseHandle( hFile );
} 
1,842ポイント を手に入れた。
|
|
|
|
Name: ジキル ..ぴよぴよ(83ポイント)
Date: 2010/08/03(火) 22:28
No:58058
|
|
Title: C言語でOS作成
|
|
今使っているOSはWin XP SP3です。
開発環境は無料のVC++ 2010です。
C言語でOSを作成したいです。
そこでいくつか質問があります。
@言語はC言語だけで作れますか?
A開発環境はLinuxなどのほうがいいのでしょうか?
BC言語をコンパイルするとWinだとexe形式の実行ファイルが作成されますが、
OSはどのように実行されるのでしょうか?
パソコンの電源を入れるとOSのexeが実行されるのでしょうか?
OSの実行がいまいち理解できません。
C入門書を三冊それぞれ五回ほど読んだ程度のまだまだ初心者です。
そんな私でも作成することはできるのでしょうか?
DフリーのLinuxを改造するなどせずに、一から作成した場合はどのくらい時間がかかりますか?
Eその他、これは勉強したほうがいいというものをお願いします。
OSを作りたいといっても最初は起動とシャットダウンができる程度の簡単なものでいいです。
その程度のOSを作成するという仮定で上記の質問に回答お願いします。
83ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..ハッカー(217,505ポイント)
Date: 2010/08/03(火) 22:39
No:58059
|
|
Title: Re:C言語でOS作成
|
|
ハードウェアはどんなものを想定していますか?
ブートローダが存在することを前提で作るのか、リセット処理から作るのかによっても話が変わります。
> @言語はC言語だけで作れますか?
どんな処理系を使うかにもよりますが、普通は無理だと考えたほうがよいでしょう。
Visual C++とかは論外です。
> A開発環境はLinuxなどのほうがいいのでしょうか?
何でもよいと思います。
> BC言語をコンパイルするとWinだとexe形式の実行ファイルが作成されますが、
> OSはどのように実行されるのでしょうか?
> パソコンの電源を入れるとOSのexeが実行されるのでしょうか?
> OSの実行がいまいち理解できません。
パソコン上で動くOSを作ることが前提なのでしょうか?
そこのところをはっきりさせてください。
> C入門書を三冊それぞれ五回ほど読んだ程度のまだまだ初心者です。
> そんな私でも作成することはできるのでしょうか?
できるかどうかでいえばできますが、まだまだ勉強と試行錯誤が必要になると思います。
> DフリーのLinuxを改造するなどせずに、一から作成した場合はどのくらい時間がかかりますか?
どんなハードウェアで、どんなOSを、どんな開発ツールを使って作るのかによります。
> Eその他、これは勉強したほうがいいというものをお願いします。
アセンブリ言語とハードウェアの基本的な知識は必須です。
割り込み処理とか、I/Oポートの制御とかが分からないようでは話になりませんので。
2倍のポイントを手に入れた! 404ポイント を手に入れた。
|
|
|
|
|
Name: ぽこ ..プログラマー(26,765ポイント)
Date: 2010/08/03(火) 22:40
No:58060
|
|
Title: Re:C言語でOS作成
|
|
1.No。
アセンブリ言語でしか記述できない部分があります。
2.あったほうがいいかも知れません。
VMWare PlayerやVirtualBox等、仮想マシン環境は必須かな、と思います。
3.ハードディスクやフロッピーディスク、いわゆるブートデバイスの先頭512バイトを
BIOSが読み込み、実行します。OSは一番最初にこの512バイトに起動プログラムを
各必要があります。
4.5.6.誰だってできます。
OSは起動とシャットダウンが出来れば、後はアプリケーションプログラムと
余り変わりません(といいつつ結構違いますが。)。
↓の本を買ってみてはどうですか?
http://www.amazon.co.jp/dp/4839919844
聞いたところによると、この本を元に中学生がOS作成したらしいです。
#かかった期間は忘れましたが。
311ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(188,538ポイント)
Date: 2010/08/04(水) 00:26
No:58067
|
|
Title: Re:C言語でOS作成
|
|
>@言語はC言語だけで作れますか?
作るOSによっては、アセンブラは必須です。
マイコン向けのOSならアセンブラを使わずに書けるものもあります。
>A開発環境はLinuxなどのほうがいいのでしょうか?
WinでLinuxでも構いません。
>BC言語をコンパイルするとWinだとexe形式の実行ファイルが作成されますが、
exeはOS向けの形式ですので、リアルアドレスに変換された機械語ファイルを作る必要があります。
大雑把に説明します。パソコンを起動するとパソコンのBIOSが、HDDやFDDに記録されたブートローダを起動します。ブートローダは、OSのカーネル部分の機械語ファイルをメモリに展開してOSにジャンプします。
>C入門書を三冊それぞれ五回ほど読んだ程度のまだまだ初心者です。
並行して勉強する気さえあれば、出来ると思います。
>DフリーのLinuxを改造するなどせずに、一から作成した場合はどのくらい時間がかかりますか?
分かりません。
人それぞれです。
>Eその他、これは勉強したほうがいいというものをお願いします。
すでに紹介されてますが、パソコン用なら「30日でできる! OS自作入門」をお勧めします。
http://book.mycom.co.jp/book/4-8399-1984-4/4-8399-1984-4.shtml
「30日でできる! OS自作入門」のWiki
http://hrb.osask.jp/wiki/?index
出来るOSの画面は、こんな感じです。
http://hrb.osask.jp/figures.html
もし、もっと素朴なものから始めたいと思うのならマイコン用のOS(モニタ程度のものから)を書くのも一つの方法です。
379ポイント を手に入れた。
|
|
|
|
Name: 佐久間 ..ぴよぴよ(75ポイント)
Date: 2010/08/03(火) 21:04
No:58054
|
|
Title: visual studio 2005と2008
|
|
やさしいCという本を購入したのですが、visual studio 2005をダウンロードしてくださいみたいなことが
書かれていたのですが、2005ではなく、2008でも大丈夫でしょうか?
visual studio 2005とvisual studio 2008の違いはなんでしょうか。
75ポイント を手に入れた。
|
|
|
|
Name: 佐久間 ..ぴよぴよ(169ポイント)
Date: 2010/08/04(水) 00:02
No:58065
|
|
Title: Re:visual studio 2005と2008
|
|
ookami様 ご返信ありがとうございます。
気にすることじゃないとのことで、安心しました。
2008を使って、学習したいと思います!
2倍のポイントを手に入れた! 94ポイント を手に入れた。
|
|
|
|
Name: ぐれーと ..ぴよぴよ(37ポイント)
Date: 2010/08/03(火) 23:08
No:58063
|
|
Title: 背景の画像について
|
|
こんにちわ。今日も適当にいろいろやってみようかなと思っていたらわからないことがありました。
下のようにただ単に左右にキャラが移動するようなプログラムを書いてみたんですが、
背景の画像を入れたいんですけど、
whileの中に LoadGraphScreen(0,0,"haikei5.png",FALSE);
を入れると、なんだか動作が重くなります。
かといってwhileの上に LoadGraphScreen(0,0,"haikei5.png",FALSE);
を書くと、一瞬で消えてしまいます。
ちゃんと表示するにはどうしたらいいでしょうか?
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
typedef struct{
int x,y,gazou;
}xh_t;
char Key[256];
int gazou[16];
xh_t xh;
xh.x = 0;
xh.y = 350;
SetDrawScreen( DX_SCREEN_BACK ); //裏画面に設定
LoadDivGraph("char.png",16,4,4,32,32,gazou);
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない
if(Key[KEY_INPUT_LEFT]==1)
xh.x -= 3;
if(Key[KEY_INPUT_RIGHT]==1)
xh.x += 3;
xh.gazou = gazou[8];
LoadGraphScreen(0,0,"haikei5.png",FALSE); //背景(どこに入れたらよいのやら・・・)
DrawGraph(xh.x , xh.y , xh.gazou , TRUE);
ScreenFlip();//裏画面を表画面に反映
}
DxLib_End();
return 0;
}
37ポイント を手に入れた。
|
|
|
|
Name: motuna ..ぴよぴよ(453ポイント)
Date: 2010/08/03(火) 23:18
No:58064
|
|
Title: Re:背景の画像について
|
|
LoadGraphScreenは毎回読み込みをしてしまうので処理は遅くなるようです。
ゲームプログラミングの館の
14. メモリに画像を読み込んで表示する。 に詳しく書いてあります
70ポイント を手に入れた。
|
|
|
|
Name: エイジュン ..ぴよぴよ(191ポイント)
Date: 2010/07/21(水) 20:54
No:57082
|
|
Title: VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
はじめまして、エイジュンと申します。
二箇所分からないところがあります。
一つ目は、
4.DXライブラリを使用するためのプロジェクトの設定を行う
E『追加のインクルードディレクトリ』の項目にDXライブラリのパッケージ内に入っている
『プロジェクトに追加すべきファイル_VC用』フォルダのパスを入力してから、
再度ダイアログ右下にある『適応』ボタンを押します。
( パスの例→ c:\DxLib_VC\プロジェクトに追加すべきファイル_VC用
なお、DXライブラリをマイドキュメントフォルダに入れるとこれらのパス指定が面倒になりますので
DXライブラリはなるべく浅いフォルダに入れておくことをお勧めします )
Dまでは進めたのですが、Eの部分がどこにも表示されません・・・
二つ目はビルドしたら、
プログラム'C\users\*******\documents\visual stdio
2010\Projects\test\Debug\test.exe'を開始できません。
指定されたファイルが見つかりません。
と表示されます。
解決法が分かりません。宜しく、お願い致します。
191ポイント を手に入れた。
|
|
|
|
Name: シエル ..プログラマー(31,546ポイント)
Date: 2010/07/21(水) 20:58
No:57084
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
表示されないという画面を張ってください
7ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(54,271ポイント)
Date: 2010/07/22(木) 06:55
No:57121
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
普通は画像のように表示されます
この設定が出来ないとビルド失敗すると思うので実行も出来ませんよ
25ポイント を手に入れた。
|
|
|
|
|
Name: エイジュン ..ぴよぴよ(0ポイント)
Date: 2010/07/22(木) 22:20
No:57191
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
シエルさん、toyoさん返信有難うございます。
画像は、toyoさんが貼られてるのがそうです。
toyoさんが、貼られている画像のA番の編集のところに、
c:\DxLib_VC\プロジェクトに追加すべきファイル_VC用を入力しました。
あとも、書かれているように進めましたが、やはりファイルが見つからないと出ます・・・
因みに、
〜入門編〜(基本的な関数の使い方)
0. (導入)DXライブラリを手に入れる。(全てはココから)
の下の方に表示されている緑の服の少女は表示出来ますが、他のプログラムに打ち変えても、緑の服の少女が表示されます・・・
何が、原因なのでしょうか・・・
宜しくお願い致します。
307ポイント を落としてしまった。
|
|
|
|
|
Name: シエル ..プログラマー(32,110ポイント)
Date: 2010/07/22(木) 22:22
No:57192
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
ん?インクルードディレクトリの設定が無くても、
緑の服の少女は表示できるの?
42ポイント を手に入れた。
|
|
|
|
|
Name: エイジュン ..ぴよぴよ(36ポイント)
Date: 2010/07/22(木) 22:47
No:57196
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
表示できます。
サンプルプログラム実行用フォルダの中のDxLib_VC2010用を使うと表示できます。
が・・・プログラムを消して、全く違うのを入力しても表示されます・・・
36ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,234,144ポイント)
Date: 2010/07/22(木) 23:53
No:57206
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
きっと入力しているファイルがプロジェクトのファイルじゃないんだと思いますよ。
まず、エディタ部に表示されているソースのタブを全て消して下さい。
ソリューションエクスプローラーに表示されているファイル名をダブルクリックして出てきたエディタで変更し、再コンパイルしてみて下さい。
違う場所の同じ名前のファイルを同じプロジェクトで開いていたりすると訳が解らなくなりますよね。
111ポイント を手に入れた。
|
|
|
|
|
Name: エイジュン ..ぴよぴよ(110ポイント)
Date: 2010/07/23(金) 19:00
No:57295
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
管理人さん返信有難うございます。
試しましたが、
プログラム'C\users\*******\documents\visual stdio
2010\Projects\test\Debug\test.exe'を開始できません。
指定されたファイルが見つかりません。
と表示されます。
・VisualC++ 2010 Express Edition
・VisualC++用 DXライブラリ
を別々に開いていました。
二つを持っている状態で、VisualC++ 2010 Express Editionの新しいプロジェクトを作成すれば出来るってことですか?
74ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,235,560ポイント)
Date: 2010/07/24(土) 00:11
No:57324
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
とりあえず新しいプロジェクトを作る前に、「サンプルプログラム実行用フォルダ」のプロジェクトファイルを使うところからやってみませんか?
今現在まだ自分がコンパイルしたソースをコンパイル出来た事は無いのですか?
私の上の回答は
>サンプルプログラム実行用フォルダの中のDxLib_VC2010用を使うと表示できます。
>が・・・プログラムを消して、全く違うのを入力しても表示されます・・・
に対する物です。
プログラムを変更してもそれが実行結果に反映されないと言う事は、
書いているファイルが違うとしか思えないのです。
ソリューションエクスプローラーに表示されているファイル名をダブルクリックして出てきた所にソースを書いてコンパイルしてみて下さい。
変更が反映されるはずだと思います。
207ポイント を手に入れた。
|
|
|
|
|
Name: エイジュン ..ぴよぴよ(271ポイント)
Date: 2010/07/24(土) 01:40
No:57347
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
自分がコンパイルしたソースをコンパイル出来た事は無いです。
「サンプルプログラム実行用フォルダ」のプロジェクトファイルとはDxLib_VC2010用のことで宜しいのでしょうか?
緑の服の少女が表示出来るのを削除して、点を表示するプログラムを書きましたが、やはり、上で書いている
ファイルが見つかりませんてのが表示されます。
他に違うのを何度も書いてみましたが同じように表示されます。
それから、VisualC++ 2010 Expressで入力したときは、所々に、文字の下線に赤い波線が表示されます。
DxLib_VC2010用では下線は表示されませんが、同じ結果になります。
161ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..プログラマー(37,304ポイント)
Date: 2010/07/26(月) 09:18
No:57483
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
横からすみません。
ファイルを差し替えた後、「リビルド」してみたら意外といけたりして...
あとは うーん...何となくですが、消してはいけないファイルを消したり、
プロジェクトの設定とかビルドパスを変えてしまったりしていませんかね。
緑の少女が出来ていると言うことは、
ライブラリのパスとインクルードのパスは合っていると思いますが...
DXライブラリを再度 ダウンロード・解凍して、
「サンプルプログラム実行用フォルダ」を上書きして、
もう一度試してみてはどうでしょうか。
176ポイント を手に入れた。
|
|
|
|
|
Name: nanashi ..ぴよぴよ(432ポイント)
Date: 2010/07/28(水) 06:13
No:57600
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
一度、C\users\*******\documents\visual stdio2010\Projects\test\Debugの中をみてください。
もし、それでtest.exeがない場合、test.exeを検索してください。
それとtest.exeの出力先はどうなっていますか?
ビルドしたときに、出力にはどんなメッセージが出ていますか?
2倍のポイントを手に入れた! 176ポイント を手に入れた。
|
|
|
|
|
Name: エイジュン ..ぴよぴよ(547ポイント)
Date: 2010/07/28(水) 21:53
No:57682
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
ookamiさん、nanashiさん返信有難うございます。
再ダウンロードしましたが、結果は同じでした。
test.exeを検索しました。一致する結果はありませんと出ました。
出力には、
1>------ ビルド開始: プロジェクト: DxLib_VC2010用, 構成: Debug Win32 ------
1>LINK : error LNK2001: 外部シンボル "_WinMainCRTStartup" は未解決です。
1>C:\Users\**********\Downloads\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\DxLib_VC2010用.exe : fatal error LNK1120: 外部参照 1 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
と、表示されます。
276ポイント を手に入れた。
|
|
|
|
|
Name: naanashi ..ぴよぴよ(53ポイント)
Date: 2010/07/29(木) 01:42
No:57700
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
ビルドできていませんよ?
まずは
LINK : error LNK2001: 外部シンボル "_WinMainCRTStartup" は未解決です。
このエラーをなくしてください。
53ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..プログラマー(37,936ポイント)
Date: 2010/07/29(木) 16:46
No:57743
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
どうしても解決しないようであれば、一度DXライブラリ本家の掲示板で聞いてみるといいですよ。
45ポイント を手に入れた。
|
|
|
|
|
Name: エイジュン ..ぴよぴよ(766ポイント)
Date: 2010/07/30(金) 23:57
No:57837
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
WinMainCRTStartupを検索したのですが、一致する結果はありませんと出ました。
LINK : error LNK2001: 外部シンボル "_WinMainCRTStartup" は未解決です。
で、他の過去レスでC++2006で同じのがあったのですが・・・
_WinMainCRTStartup関数は、WinMainを呼び出す関数です。_WinMainCRTStartup関数は誰が呼び出すかというと、.EXEファイルの開始アドレス(エントリポイント)が_WinMainCRTStartup関数に設定されているため自動的に呼び出されます。そして、_WinMainCRTStartupはランタイムライブラリに含まれているのです。ということで、ランタイムライブラリをリンクしようとしたが、libc.lib はリンクしないようリンカオプションで設定されていたため、エラーが起きたんですね。
どうしたらよいかというと、開始アドレス(エントリポイント)をWinMain関数に設定してやればいいのです。
とありました。
C++2010でも同じように出来るのでしょうか?
219ポイント を手に入れた。
|
|
|
|
|
Name: naohiro19 ..ぴよぴよ(184ポイント)
Date: 2010/07/31(土) 08:45
No:57855
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
プログラムの上に
#pragma comment(linker, "/entry:\"WinMain\"")
と記述することでWinMain関数に設定することができます。
61ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..中級者(9,762ポイント)
Date: 2010/07/31(土) 23:21
No:57902
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
WinMainCRTStartupは、C言語ランタイム(CRT)ライブラリの初期化モジュールですから、WinMainCRTStartupを呼ばないでWinMainから直接起動すると初期化の必要なC言語の標準関数は正常に動作しなくなります。
WindowsAPIしか使っていなければ実行ファイルのサイズを削るのに有効な手段ですが、DXライブラリでCRTライブラリを呼び出していないという保証がなければ危険です。
114ポイント を手に入れた。
|
|
|
|
|
Name: エイジュン ..ぴよぴよ(840ポイント)
Date: 2010/08/01(日) 00:17
No:57907
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
// ここにサンプルプログラムをペーストしてください
// 初期状態では LoadGraphScreen のサンプルプログラムが入力されています。
#include "DxLib.h"
#pragma comment(linker, "/entry:\"WinMain\"")
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// BMP画像の表示
LoadGraphScreen( 0 , 0 , "test1.bmp" , TRUE ) ;
WaitKey() ; // キーの入力待ち((7-3)『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
指定されたファイルは見つかりませんとなります・・・
74ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..中級者(9,969ポイント)
Date: 2010/08/01(日) 00:52
No:57908
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
#もう何が何だか良く分かりませんが
No:57682で、
> 1>C:\Users\**********\Downloads\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\DxLib_VC2010用.exe : fatal error LNK1120: 外部参照 1 が未解決です。
とあるので、DXライブラリをC:\Users\**********\Downloadsに展開していると思うんですが、『追加のインクルードディレクトリ』にはずっと『c:\DxLib_VC\プロジェクトに追加すべきファイル_VC用』と入力しているのでしょうか?
108ポイント を手に入れた。
|
|
|
|
|
Name: エイジュン ..ぴよぴよ(878ポイント)
Date: 2010/08/01(日) 10:03
No:57918
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
追加のインクルードディレクトリ
追加のライブラリディレクトリに
c:\DxLib_VC\プロジェクトに追加すべきファイル_VC用を入力しています。
38ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..中級者(10,081ポイント)
Date: 2010/08/01(日) 18:06
No:57936
|
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
> 追加のインクルードディレクトリ
> 追加のライブラリディレクトリに
> c:\DxLib_VC\プロジェクトに追加すべきファイル_VC用を入力しています。
実際の『プロジェクトに追加すべきファイル_VC用』フォルダが
C:\DxLib_VC\プロジェクトに追加すべきファイル_VC用
にありますか?
C:\Users\**********\Downloads\DxLib_VC\プロジェクトに追加すべきファイル_VC用
にあるのでは?
ダウンロードしたDXライブラリをC:\に展開してください。
112ポイント を手に入れた。
|
|
|
|
|
Name: エイジュン ..かけだし(1,002ポイント)
Date: 2010/08/03(火) 22:56
No:58062
| 解決!
|
Title: Re:VisualC++ 2010 Express Edition を使用した場合のDXライブラリの使い方
|
|
返信遅くなりました。
解決出来ました。
ちゃんと、画面中心に白い点が表示出来ました。
パスのことを理解していなかったのが原因でした。
パスは、プロパティの場所のことだったんですね。
返信して戴いた方々、有難う御座いました。
124ポイント を手に入れた。
|
|
|
|
Name: yamataka ..ぴよぴよ(705ポイント)
Date: 2010/07/25(日) 07:12
No:57438
|
|
Title: ウィンドウの枠の太さ
|
|
タイトルの通りで、DXライブラリとC言語を使ってウィンドウの枠の太さを変えることは出来ないでしょうか?
もし出来たら、やり方を教えていただけると有り難いです。
66ポイント を手に入れた。
|
|
|
|
Name: yamataka ..ぴよぴよ(772ポイント)
Date: 2010/07/25(日) 11:51
No:57443
|
|
Title: Re:ウィンドウの枠の太さ
|
|
> DXライブラリで作ったウィンドウの枠のサイズを変更するのではなく、
> DXライブラリとC言語で他のアプリのウィンドウのサイズを変更したいと言う事でしょうか?
いえ、DXライブラリで作ったウィンドウの枠の太さを変更したいのです。
DXライブラリで作ったウィンドウの枠は、なぜか他のソフトより少し枠が太いと思ったので。
67ポイント を手に入れた。
|
|
|
|
|
Name: yamataka ..ぴよぴよ(820ポイント)
Date: 2010/07/25(日) 13:08
No:57445
|
|
Title: Re:ウィンドウの枠の太さ
|
|
画像を張れれば質問の意味が伝えやすいのですが…
すみません、画像の張り方がわかりません。
あと、SetWindowStyleMode()は違う気がするので、CreateWindow()?
48ポイント を手に入れた。
|
|
|
|
|
Name: yamataka ..ぴよぴよ(840ポイント)
Date: 2010/07/25(日) 13:31
No:57449
|
|
Title: Re:ウィンドウの枠の太さ
|
|
おお、気付かなかった!
シエルさんありがとうございます。
上の画像のように、DXライブラリを使用して作ったソフトの枠が他のソフトより太いのです。
DXライブラリを使用したソフトの枠の太さを、他のソフトの枠の太さに変更することはできますか?
(まあ、そんな気になる程の違いではないのですが…) 
20ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..中級者(9,152ポイント)
Date: 2010/07/27(火) 00:42
No:57528
|
|
Title: Re:ウィンドウの枠の太さ
|
|
> 上の画像のように、DXライブラリを使用して作ったソフトの枠が他のソフトより太いのです。
> DXライブラリを使用したソフトの枠の太さを、他のソフトの枠の太さに変更することはできますか?
ウインドウスタイルを調べてみたところ、枠付きのウインドウ(WS_BORDERあり)でもWS_POPUPスタイルが設定されているのが原因のような気がします。
41ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..プログラマー(34,812ポイント)
Date: 2010/07/27(火) 11:08
No:57542
|
|
Title: Re:ウィンドウの枠の太さ
|
|
DXライブラリは使わないのでできるか分かりませんが、
APIでSetWindowLongあたりを使えば、好きなスタイルに変更できるのでは?
48ポイント を手に入れた。
|
|
|
|
|
Name: yamataka ..ぴよぴよ(909ポイント)
Date: 2010/07/28(水) 09:58
No:57608
|
|
Title: Re:ウィンドウの枠の太さ
|
|
SetWindowLong(GetMainWindowHandle,GWL_STYLE,WS_VISIBLE | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX);
と、上記のようにだけ付け加えて実行してみましたが、変化はありませんでした。
(もしかしたら WS_〜 の選択を間違っている?) 
69ポイント を手に入れた。
|
|
|
|
|
Name: yamataka ..かけだし(1,296ポイント)
Date: 2010/08/03(火) 10:43
No:58018
| 解決!
|
Title: Re:ウィンドウの枠の太さ
|
|
お久しぶりに失礼します。
色々と試してみて、
SetWindowStyleMode(2);
を設定してDxLib_Init()した後に、
SetWindowLong(GetMainWindowHandle(),GWL_STYLE,WS_VISIBLE | WS_OVERLAPPEDWINDOW^WS_THICKFRAME);
SetWindowPos(GetMainWindowHandle(),HWND_TOP,0,0,640,480,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
をしてみたら出来たのですが理由がわかりません。
SetWindowStyleMode();に0や1を指定した後では出来ないのです。
誰か理由がわかる方すみませんが教えて下さい。
一応本題は解決したので解決にしておきます 
136ポイント を手に入れた。
|
|
|
|
|
Name: nayo ..上級者(17,938ポイント)
Date: 2010/08/03(火) 12:06
No:58022
|
|
Title: Re:ウィンドウの枠の太さ
|
|
DXライブラリなら
SetWindowStyleMode(9);
でたぶんお望みのウィンドウになると思いますが…
違ってたらすみません
52ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..プログラマー(39,635ポイント)
Date: 2010/08/03(火) 12:12
No:58023
|
|
Title: Re:ウィンドウの枠の太さ
|
|
SetWindowStyleModeを0や1にした場合のどういうスタイルになるのか、
DXライブラリはさっぱりわからないので、分かりませんが、
そのスタイルに対応するsetwindowlogとsetwindowposの引数を指定する必要があると思います。
2倍のポイントを手に入れた! 190ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(55,569ポイント)
Date: 2010/08/03(火) 12:31
No:58024
|
|
Title: Re:ウィンドウの枠の太さ
|
|
DxWin.cppより
------------------------
// ウインドウスタイルの定義
#define WSTYLE_NUM (7) // ウインドウスタイルの数
// 0 :デフォルト
// 1 :タスクバーなし
// 2 :タスクバーなし枠なし
// 3 :枠なし
// 4 :何もなし
// 5 :最小化無し
// 6 :ツールバーに適したウインドウ
const DWORD WStyle_WindowModeTable[WSTYLE_NUM] =
{
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_POPUP | WS_SYSMENU,
WS_POPUP | WS_SYSMENU,
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_POPUP | WS_SYSMENU,
WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
} ;
const DWORD WExStyle_WindowModeTable[WSTYLE_NUM] =
{
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
0,
WS_EX_TOOLWINDOW,
WS_EX_TOOLWINDOW,
WS_EX_WINDOWEDGE,
} ;
0,1と2の違いは拡張スタイルの有無のようです
408ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(56,011ポイント)
Date: 2010/08/03(火) 12:41
No:58026
|
|
Title: Re:ウィンドウの枠の太さ
|
|
ソースのバージョンが古かったので当たらし3.03のものでは
// 0 :デフォルト
// 1 :タスクバーなし
// 2 :タスクバーなし枠なし
// 3 :枠なし
// 4 :何もなし
// 5 :最小化無し
// 6 :ツールバーに適したウインドウ
// 7 :最大化ボタンつきウインドウ、初期状態が通常サイズ
// 8 :最大化ボタンつきウインドウ、初期状態が最大化状態
// 9 :デフォルトに縁の立体化無し
const DWORD WStyle_WindowModeTable[WSTYLE_NUM] =
{
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_POPUP | WS_SYSMENU,
WS_POPUP | WS_SYSMENU,
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_POPUP | WS_SYSMENU,
WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION | WS_MAXIMIZE,
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
} ;
const DWORD WExStyle_WindowModeTable[WSTYLE_NUM] =
{
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
0,
WS_EX_TOOLWINDOW,
WS_EX_TOOLWINDOW,
WS_EX_WINDOWEDGE,
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
WS_EX_WINDOWEDGE,
} ;
でした
442ポイント を手に入れた。
|
|
|
|
|
Name: yamataka ..かけだし(1,354ポイント)
Date: 2010/08/03(火) 22:46
No:58061
|
|
Title: Re:ウィンドウの枠の太さ
|
|
あ、最新のバージョンにしたらSetWindowStyleMode(9)でできました。
こんな質問につき合わせてしまってみなさんすみませんでした。
58ポイント を手に入れた。
|
|
|
|
Name: 真等 [URL] ..ぴよぴよ(567ポイント)
Date: 2010/07/31(土) 11:23
No:57861
|
|
Title: 【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】
|
|
きゅーさんいつもお世話になっております。
スペースをお借りします。
皆様、こんにちは。
この度、私は新たにSTG-シューティングゲームの制作企画を立ち上げました。(東方……龍神録そっくりのシステムを考えております。)
しかし、そのプログラミング部分で悩んでおります。
と言いますのも、今回の企画を通じて、他のプログラマーさんと共同で開発してみたいと思いまして。(満足できるほどの規模を持ったゲームのプログラムを自分一人でやりきるのに時間的な限界を感じました。)
しかし、個人でSTGを完成させたことはあるのですが、他の方との共同プログラミングをしたことはなく、どうしたらいいものかと迷っております。
現状、まだ私の他にプログラマーさんが居ない状況です。(企画の詳細を詰めていって、募集サイト様にて募集させていただこうと考えてます。もし、条件次第では一緒にやっても構わないという方がいらっしゃいましたらメール下さい。)
プログラマーは私一人というこの期間の内に、できるだけの下準備と言いますか心構えのようなものをしっかりさせておきたいと思いました。
そこで、皆様のゲームプログラマーとして活躍された経験を基に、もしくは、予想できる範囲でお教え下さい。
もし共同制作するとしたら、どんなことに気を付けるべきなのか、どういう能力があったらいいのかなどなど。
逆に、こんな人となら一緒にやってみたいなど、何でも大歓迎です!
超真面目も雑談感覚でも、レスお待ちしております!
以上です。
よろしくお願いいたします。
279ポイント を手に入れた。
|
|
|
|
Name: softya [URL] ..ハッカー(187,803ポイント)
Date: 2010/07/31(土) 13:32
No:57868
|
|
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】
|
|
共同作業で気をつけることは、
1)一番プログラミングに理解が深くて、作業時間に自由度が高い人がライブラリ等の足回りを担当すること。
ようするにすぐ対処できて、バグ周りの面倒を見れる人がやるべき。
2)進捗管理は別の人でも良いが、気配りの出来る人、ちゃんと言うべき時に言うことが出来る人を。
人にモノを頼んだり、作業の状況を把握は大変なことなんです。普通は企画者がやることになりますが。
ビジネス用語ですが、報告・連絡・相談がキモですね。相手に求める前に自分が先に実践してください。そうしないと相手に同じことを求めることが出来ません。
3)バージョン管理ツール(CVSやサブバージョン)等を使ってバージョンの管理や同じソースコードを同時に変更した場合のコンフリクト等にも留意すること。ここら辺はよく話し合った方が良いです。大きな修正を行う場合は、相手に必ず一言断ること。
サブバージョンとは、
http://ja.wikipedia.org/wiki/Subversion
サブバージョンの無料サーバ
http://www.red-mount.com/blogs/show/beanstalk
4)コーディング規約を決めること。ゆるやかで構いません。
名前の付け方やグローバル変数にするのかどうかとか、大雑把な取り決めです。
やりながら、相手に合わせて変えていく事も大事です。ガチガチなのは嫌がられます。
373ポイント を手に入れた。
|
|
|
|
|
Name: ookami ..プログラマー(37,686ポイント)
Date: 2010/07/31(土) 20:16
No:57893
|
|
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】
|
|
# Dixq (管理人)さん
> ookamiさんもよくトピを立てていらっしゃいます。
> サイトも立ち上げて支援されているようです。
なんと。
ご紹介ありがとうございます^^
# 真等さん
ということで、支援サイトを作成しています。
実は「方向性を考えている段階」なのでアレなのですけど。
今は「ただの掲示板に繊毛が生えたくらい」なのですけど。
よかったらご利用くださいませ。
http://oookami.sakura.ne.jp/integ/
108ポイント を手に入れた。
|
|
|
|
|
Name: 真等 [URL] ..かけだし(1,291ポイント)
Date: 2010/08/01(日) 03:47
No:57914
|
|
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】
|
|
レスありがとうございます。
簡単ではございますが、返答させていただきます。
遅くて申し訳ありません。(ゲームを公開したばっかでバグ続出ーの、対応あばばばでした 笑)
>きゅーさん
お久しぶりですー。
「STGはもう作らない!」とか言いつつ、結局STGですいません 笑
リンクありがとうございます。
リンク先のモノにのめり込んでしまい、おかげでレスが凄い遅れましたぜ、ごめんなさい(ノ´▽`)ノ〜
色々参考になりました。
これからも何度か見直したいと思います。
ジジ猫さんは高校生なのに、すごい挑戦的で良いですね。
皆様の暖かい声援が羨ましいです。
私も影ながら応援しております〜!
>softyaさん
ありがとうございます。
きゅーさんの貼ったリンク先で有り難いお言葉を拝見させていただきました。
自分にはない考えを目にし、反省するばかりでした。
また、プログラミングに関してもお答え下さり、ありがとうございます。
返答させていただきます。
1)
ライブラリを作るほどの規模になると、大変そうですね。
今回はDXライブラリ(か、頑張ってseleneでしょうかね)を使わせていただこうかと思いまして、それでカバーできない他の部分はライブラリと言えるまで昇華させるほどのことはしないのではと予想しておりますが……。
(結局は、「果たしてどうなるやら」状態なんですけどね。)
2)
進捗管理は難しいですね。
大事ですが、企画者が制作過程で完璧にやり切ることはまず無理でしょうから、上手い仕組みづくりが必要かなぁと思ってます。
プログラミング担当の切り分け方などにも大きいですかね。
3)
Subversionは使ったことないんですよね。
その勉強も含めて、一緒にやっていけたらなぁと思ってます。
リンクまで貼って下さり、ありがとうございます。
4)
コーディング規約――はまったく考えてませんでした。
確かに必要ですね。
一度プロのものを見たことはあるのですが、あれはガチガチでしたね 笑
どうしていいか分からない範囲ですので、勉強したいと思います。
>ookamiさん
凄いことされてますね!
同じような体験が私にもありますので、応援したいです!
支援サイトの方も良いですね。
期待させていただきます。
色々な方のご意見を吸収され、ますます良いツールになっていくものと思います。
使っていいとのことで、本当にありがとうございます。
レスありがとうございます。
改めて、返事が遅くなってしまい申し訳ありません。
お詫び申し上げます。
まだまだレスお待ちしています!
よろしくお願いいたします。
724ポイント を手に入れた。
|
|
|
|
|
Name: ぜらーちん ..初心者(5,317ポイント)
Date: 2010/08/02(月) 12:37
No:57975
|
|
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】
|
|
リーダーを最初に決める。
まず、どんなゲームを作るのかを打ち合わせする。ゲームが決まったら、
そのゲームに必要なものは何かを話し合う(classや、関数、変数など)
ある程度出たら、それを表にまとめる。
共有データが多いのであれば、
共有データ.hを作っておいて、共有するデータはまとめてそこに置いておくなどもいいかも
フローチャートを作る(UMLでもok)
どういった流れで一連の作業が続いていくかを簡単に作る。
これによって、一連の流れや、どんな処理が必要か〜が分かる
ここまでの作業が終わったら、誰がどの部分を作るかを話し合い
役割分担を行う
進捗表に沿って作成していく。
その際に必要な関数や、変数が増減した場合にはチームに報告する。(ケースバイケース)
また変更が必要になる場合も、勝手に変更しないで相談する
例えば引数などなど、勝手に変更してしまうのはまずい
で、一次テストでまとめてみて
バグとかがあった時は、また話し合って、また修正していく感じ
一番まずいのが、勝手にプログラムを変更したり
何も決めずにこんなのあればいいなとか、後のことを考えずに増設していくことかな?
まとめ役も欲しい処
404ポイント を手に入れた。
|
|
|
|
|
Name: softya [URL] ..ハッカー(188,159ポイント)
Date: 2010/08/02(月) 13:16
No:57977
|
|
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】
|
|
あっ大事なことを書き忘れてました。
バグが出たときに、まず自分のコードを疑うこと。
自分のコード内でのメモリ破壊の結果、プログラム全体の動きが悪くなって相手のコードの部分でバグが出ている可能性が結構あります。これを怠ると当然チーム内はギクシャクします。
お前のバグだからお前が調べろって態度が一番良くないです。一緒に調べるか、まず自分で先に調べて問題を絞り込んでから相手に報告するかすると良いでしょう。
2倍のポイントを手に入れた! 356ポイント を手に入れた。
|
|
|
|
|
Name: 真等 [URL] ..かけだし(1,573ポイント)
Date: 2010/08/02(月) 21:33
No:57993
|
|
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】
|
|
レスありがとうございます。
>ぜらーちんさん
「リーダーを決める」だけはまだ行けそうに思えるのですが、そこからはもう理想郷にしか見えません……。
自分は作り始めてからアレがないコレがないとやってしまうタイプなので、まずそこから直さなくてはですね……;;
しかし、そこまで計画性を持ってやるとなりますと、やはり一度はどなたか凄い人が上に付いてもらってやってみるっていう経験が欲しいですね。
そういう機会を探していこうと思います。
まとめ役は欲しいですね。
プログラミングに限らず、この役が居ないとゲーム作りは厳しいです。
>softyaさん
確かに、バグを下手に扱うと酷いことになりそうですね……。
他人と上手くやっていく方法ってのは難しいですよね。
銘じて取り組んでいきたいと思います。
本当にレスありがとうございます!
282ポイント を手に入れた。
|
|
|
|
|
Name: 真等 [URL] ..かけだし(1,665ポイント)
Date: 2010/08/03(火) 21:35
No:58056
|
|
Title: Re:【雑談歓迎】多人数での共同での同人ゲームプログラミングに対する心構えについて【マジレスも大歓迎】
|
|
>ookamiさん
情報ありがとうございます。
任天堂ゲームセミナーは良いって聞きますねー。
あと10年前ぐらいに知りたかったです 笑
もし学生の方がいらっしゃいましたら、私からもオススメしておきます!
92ポイント を手に入れた。
|
|
|
|
Name: sood ..入門者(3,607ポイント)
Date: 2010/07/31(土) 16:52
No:57877
|
|
Title: 部分的に透明のpngファイルの作り方
|
|
例えば、龍神録のキャラクター素材を、pngで書き換えると
白や黒で四角く画像そのまま出てしまうのですが、どうしたらいいのでしょうか?
9章で試しています。
42ポイント を手に入れた。
|
|
|
|
Name: シエル ..プログラマー(38,321ポイント)
Date: 2010/07/31(土) 17:21
No:57879
|
|
Title: Re:部分的に透明のpngファイルの作り方
|
|
アルファ情報が無くなってしまったのではないでしょうか。
関数を使って透明色を指定するか、グラフィックソフトなどで透明色を設定してさい。
42ポイント を手に入れた。
|
|
|
|
|
Name: sood ..入門者(3,632ポイント)
Date: 2010/07/31(土) 18:19
No:57883
|
|
Title: Re:部分的に透明のpngファイルの作り方
|
|
↑すいません、NAME書いてませんでした;
保存されないんですね;
25ポイント を手に入れた。
|
|
|
|
|
Name: sood ..入門者(3,757ポイント)
Date: 2010/07/31(土) 18:19
No:57884
|
|
Title: Re:部分的に透明のpngファイルの作り方
|
|
> アルファ情報が無くなってしまったのではないでしょうか。
> 関数を使って透明色を指定するか、グラフィックソフトなどで透明色を設定してさい。
ええと、つまり、ペイントでは無理ということですよね。
専用ソフトでしか編集できない領域があるということですか
>龍神録と言うことは DxLib でしょうか。
>画像に透過しているかどうかの情報が入っていないや、
>描画系関数の引数にあります TransFlag に TRUE が設定されていないためだと思います。
すいません、言葉足らずでした。
ソースをコピペして「よし、動くな」ってわかったあと
素材だけ交換するカタチでしたので、おそらくそれは無いと思います。。
125ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..プログラマー(38,368ポイント)
Date: 2010/07/31(土) 18:32
No:57886
|
|
Title: Re:部分的に透明のpngファイルの作り方
|
|
ペイントでは無理ですね。
透明色を指定できるソフトなら、フリーでもたくさんあるので、探してみて下さい。
47ポイント を手に入れた。
|
|
|
|
Name: 1617 ..ぴよぴよ(16ポイント)
Date: 2010/08/03(火) 09:39
No:58011
|
|
Title: 三角比
|
|
VC++2010を使っているのですが、角度を入力するとその角度のsin とcosの値が表示されるプログラムを作ろうと思っています
どうしたらよいでしょうか・・・・
16ポイント を手に入れた。
|
|
|
|
Name: ぜらーちん ..初心者(5,884ポイント)
Date: 2010/08/03(火) 09:52
No:58012
|
|
Title: Re:三角比
|
|
計算式が分からないのですか?
普通に表示させるなら
int main()
{
変数宣言
printf("角度を入力してください>");
scanf("%lf", &変数);
gets(配列);
計算式
printf("sin = %0.1f , cos = %0.1f", 変数, 変数);
return(0);
}
見たいな感じでいいのでは?
sinとかの出し方は、数学のサイト見れば分かると思います
171ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(217,108ポイント)
Date: 2010/08/03(火) 09:52
No:58013
|
|
Title: Re:三角比
|
|
どうしたらって...
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>
int main(void)
{
double angle;
char s[256];
char *endptr;
fgets(s, sizeof s, stdin);
errno = 0;
angle = strtod(s, &endptr);
if (errno != 0 || *endptr != '\n')
{
fputs("入力値が不正\n", stderr);
return EXIT_FAILURE;
}
printf("sin(%g) = %g cos(%g) = %g\n", angle, sin(angle), angle, cos(angle));
return EXIT_SUCCESS;
}
これでよいのでは?(テストしていませんが...)
320ポイント を手に入れた。
|
|
|
|
|
Name: fatens ..上級者(17,309ポイント)
Date: 2010/08/03(火) 09:52
No:58014
|
|
Title: Re:三角比
|
|
math.hのsin関数, cos関数で角度に応じたそれぞれの値を求めることができます。
角度の単位はラジアンなので注意してください。
46ポイント を手に入れた。
|
|
|
|
|
Name: ぜらーちん ..初心者(5,934ポイント)
Date: 2010/08/03(火) 09:56
No:58016
|
|
Title: Re:三角比
|
|
そういえばmath.h何てありましたね(*'д'*)
自分で求めるよりは、関数使った方が楽でした。すみません
47ポイント を手に入れた。
|
|
|
|
Name: フェノン ..ぴよぴよ(98ポイント)
Date: 2010/07/30(金) 23:28
No:57832
|
|
Title: バウンド処理がわかりません
|
|
頻繁にお世話になっています。
今回、弾をバウンドさせようとと思うのですが、
うまくいきません。
ソースか、アルゴだけでもと思い、探したりしましたが、なかなか見当たりません。
もしよければ、教えていただけませんか?
お願いします。
98ポイント を手に入れた。
|
|
|
|
Name: フェノン ..ぴよぴよ(609ポイント)
Date: 2010/07/31(土) 18:49
No:57887
|
|
Title: Re:バウンド処理がわかりません
|
|
ありがとうございます。
C言語で制作しているのですが、うまくいかなくて・・
あと、DXライブラリとはなんですか?
冒頭で出てきていましたが、学校ではまだ出てきていませんので、
よく、わからないのですが・・・
よければ、詳しく知りたいのですが・・・
とりあえずは、バウンス処理をお願いします。
えっと、ブロック崩しのように思ったのですが、
うまくいきません。念のため、ソースを置いておきます。
また、学校のオリジナルの関数などがありますので、わからないところがあれば、
お答えします。
以下ソース
#include <conio.h>
#include "dglib.h"
char_far gvram;
main()
{
int x=160,y=150;
int vx=1,vy=1;
do{
dg_gcls(gvram,0);
if(getch3('E')==1){break;} /*終了*/
if(x<0){
vx=1;
}else if(y<0){
vy=1;
}else if(x>=320){
vx=-1;
}else if(y>=200){
vy=-1;
}
x=x+vx;
y=y+vy;
/*四角を描画*/
dg_box(gvram,x,y,4,4,1,2);
/*座標表示*/
dg_printf(160,0,15,"x:%3d,y:%3d",x,y);
Sleep(30);
ML(); /*ウェイト*/
}while(1);
}
よろしくお願いします。
511ポイント を手に入れた。
|
|
|
|
|
Name: フェノン ..ぴよぴよ(673ポイント)
Date: 2010/08/01(日) 00:52
No:57909
|
|
Title: Re:バウンド処理がわかりません
|
|
ありがとうございます。
とりあえず、DXライブラリの説明は呼んだのですが、
C言語じゃあ、使えないし、どうすればいいのかな?と、
悩んでいたところです。
う〜ん、cで何とかなればと思いましたが・・・
またの機会に、ありがとうございます。
64ポイント を手に入れた。
|
|
|
|
|
Name: EX ..ぴよぴよ(658ポイント)
Date: 2010/08/02(月) 14:20
No:57979
|
|
Title: Re:バウンド処理がわかりません
|
|
簡単なバウンス処理なら、意外と簡単にできます。
ただ、ブロック崩しのような、ちょっと複雑な場合は工夫が要ります。
アルゴリズムでいえば、
int speed=5;
まず何でもいいから変数を用意し、数字を入れる。
弾の座標X-=speed; 弾の座標Y-=speed;
↑で弾を斜めに動かす。speed=5なので、各々5ピクセルずつ動く。
if( 弾の座標X<=0 ) speed*=-1;
↑で、弾の座標Xが0以下に(つまり画面端)になったら、speedに-1をかけることで、speedが-5となり、
結果的に 弾の座標X-(-5) = 弾の座標X+5 になる。
絵で言えば、
| ↗
|/
|\
| ↖
こんな感じかな?
説明するのは得意じゃないんです・・・
ともかく、数字ではなく変数を使用し、バウンドさせる時に、変数に-1をかけることがミソとなります。
386ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..中級者(10,226ポイント)
Date: 2010/08/02(月) 17:13
No:57982
|
|
Title: Re:バウンド処理がわかりません
|
|
「うまくいかない」ではなくてどういう動作を期待していて実際にはどういう動作になっているかを具体的に書きましょう。
ボールの大きさが4x4ピクセルあるようですが画面の左と下ではボールがはみ出しますね。
画面の四隅ではXY座標同時にはみ出す可能性があるので、if文をX座標の分とY座標の分は分ける(elseで繋げない)ほうが良いと思います。
とは言えプログラムソースを見た限りでは「うまくいってる」と思います。
145ポイント を手に入れた。
|
|
|
|
|
Name: フェノ ..ぴよぴよ(309ポイント)
Date: 2010/08/03(火) 01:28
No:58002
|
|
Title: Re:バウンド処理がわかりません
|
|
色々お答えありがとうございます。
とりあえず、アドバイスを含めてまとめます。
希望する実行結果
4×4の四角が画面内でバウンスさせるプログラム
イメージ図
--------------------
| ┏ |
| ┏|
| ┓|
| ■ ┓ |
| ┛ ┓ |
| ┛ ┓ |
--------------------
実際の結果(現在)
--------------------
| |
|┏ |
| ┏ ウロウロ |
| ■ |
| ┛ |
| ┛ |
--------------------
EXさんや、ISLeさんからアドバイスを頂いた通りにするとかなり形になってきました。
もう少し頑張ってみます。
また、アドバイスや至らぬ点、等ございましたら、よろしくお願いします。
309ポイント を手に入れた。
|
|
|
|
|
Name: フェノン ..ぴよぴよ(795ポイント)
Date: 2010/08/03(火) 02:08
No:58007
| 解決!
|
Title: Re:バウンド処理がわかりません
|
|
ありがとうございます。
なんとかできました。
お世話になりました。また、機会があればお世話になると思いますが、
お願いします。
2倍のポイントを手に入れた! 122ポイント を手に入れた。
|
|
|
|
Name: ねんどじん ..初心者(7,955ポイント)
Date: 2010/08/02(月) 20:49
No:57992
|
|
Title: 【雑談程度の相談】雪の降ってくる弾幕
|
|
雪がどんどん降ってきて、だんだんつもっていく(だんだん地平線が下から迫ってくる)
弾幕を作ってみたんですが、弾を画面に残すので当然だんだんと処理が重くなるんですよね・・
降ってからしばらくした弾は確率で消すようにしてみたんですが、なんか画面上の雪が
突然ぱっと消えるってのも変な感じだなとおもいまして。
なにか処理速度を維持しやすい方法ってありますか?
龍神録と同じ形式で作っています
void boss_shot_bulletI007(){ //雪の積もる弾幕
#define TM007 6 //6カウントに一回、「地平線」を1上に
int i,k,t=boss_shot.cnt,t2=boss_shot.cnt%TM007;
static double landline=520;//「地平線」の初期高さ
if(bom.flag!=0)
landline=520;//ボムが撃たれたら「地平線」を元に戻す
if(t%180==0) //3秒に一回ボスの移動
move_boss_pos(50,50,FMX-50,150,100,60);
if(t>=0&&t%1==0){//常に雪を降らせる
int j=t%2==0?7:8;//弾の形
int l=t%2==0?9:8;//弾の色
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].flag=1;
boss_shot.bullet[k].knd=j;//弾の形
boss_shot.bullet[k].cnt=0;
boss_shot.bullet[k].col=l;//弾の色
boss_shot.bullet[k].x=GetRand(384)+rang(0.5);//x座標は画面全体にわたって
boss_shot.bullet[k].y=-30; //画面端の少し↑から降ってくる
boss_shot.bullet[k].angle=PI/2+rang(PI/9);//だいたいまっすぐ降ってくる
boss_shot.bullet[k].spd=2-rang(1);//ゆっくり降ってくる
}
}
for(i=0;i<BOSS_BULLET_MAX;i++){//雪が「地平線」よりちょっと下なら
if(boss_shot.bullet[i].y>landline)
boss_shot.bullet[i].spd=0;//雪の降下を止める
//降ってある程度たった弾は確率で消す
if(boss_shot.bullet[i].spd==0&&boss_shot.bullet[i].cnt>=300&&GetRand(2000)==0)
boss_shot.bullet[i].flag=0;
}
if(t2==0)
landline--;//「地平線」をあげていく
}
同じような弾幕を知っていたら参考にしたいので教えてくださると助かります
719ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,244,543ポイント)
Date: 2010/08/02(月) 22:40
No:57994
|
|
Title: Re:【雑談程度の相談】雪の降ってくる弾幕
|
|
面白い発想の弾幕ですね。
ただ、次第に降り積もった雪が穴あき状態になるのはいいのでしょうか?
被弾した後、出現した時八方ふさがりになることもあるようです。
何か大きな弾を発射して、大きな弾が通った所は降り積もった雪が消えるような演出にしてみてはどうでしょう。
逃げ道も確保でき、描画すべき弾も減るように思います。
また、突然消えるとちょっとやすっぽいのでフワっと消えるようにしてみてはどうでしょう?
弾に
int Alpha;
なるものを持たせておき、Alphaには通常255を入れておきます。
255ではない値がセットしてある時だけ、描画するときに
SetDrawBlendModeでアルファブレンドするようにしてみてはどうでしょう?
消えるとき、Alphaを255→0にしてやればフワッと消えるように見えると思います。
後降り積もるときはもうちょっとぎっしりつめたほうがよくないですかね?
268ポイント を手に入れた。
|
|
|
|
|
Name: ねんどじん ..初心者(8,230ポイント)
Date: 2010/08/02(月) 23:26
No:57995
|
|
Title: Re:【雑談程度の相談】雪の降ってくる弾幕
|
|
>>Dixqさん
こんばんは。助言ありがとうございます。
なるほど、降り積もった雪を別の弾で消すっていう発想はなかったです。
おもしろくなりそうなので実装させていただきます。
ぎっしり降り積もらせるとますます弾が多くなっちゃうんですよね・・もう少し大きめの弾を使うなどして
調整して、弾消しの量も考えていきたいと思います。
ブレンドモードについては詳しく知りませんでした。結構種類があるんですね。色々試してみたいと思います。
雪が積もってる感だすにはまだまだ調整が必要みたいです。がんばってみます。
解決にするまで一応、もうちょっとだけ時間をあけます。コメントをおまちしています!
275ポイント を手に入れた。
|
|
|
|
|
Name: ねんどじん ..初心者(8,283ポイント)
Date: 2010/08/03(火) 01:42
No:58003
|
|
Title: Re:【雑談程度の相談】雪の降ってくる弾幕
|
|
>>Dixqさん
物理・・演算・・・
苦手ですがいつか本格的にやってみたいと思います。
いろいろとアイディアをありがとうございました。
これでこの質問は解決にします。
53ポイント を手に入れた。
|
|
|
|
Name: COUTION ..ぴよぴよ(547ポイント)
Date: 2010/08/02(月) 17:06
No:57981
|
|
Title: ファイルの読み込み
|
|
はじめまして
ライブラリはDXライブラリで
VC++2010を使ってます
txtファイルを読みこんでint型の配列に入れてゲームのマップを作ろうとしてるんですか
intの変数にtxtの数字をうまく入れられません。
int map[5][5]={
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,1,1,1,1},
};
このような事をファイルから読み込みたいんですがうまくできません
int FileHandle, y ,map ;
// test.txt を開く
FileHandle = FileRead_open( "test.txt" ) ;
// 表示Y座標の初期化
y = 0 ;
// ファイルの終端が来るまで表示する
while( FileRead_eof( FileHandle ) == 0 )
{
// 一文字読む
map = FileRead_getc( FileHandle ) ;
// 画面に描画
DrawFormatString( 0, y , GetColor( 255,255,255 ) , "%d" , map) ;
// 表示Y座標を下にずらす
y += 16 ;
}
// ファイルを閉じる
FileRead_close( FileHandle ) ;
---test.txtの中身----
10001
10001
10001
10001
11111
---------------------
これでためしに表示してみたんですが
49
48
48
48
49
・・・
(以下略)
みたいになります
1
0
0
0
1
みたいになれば配列に入れてやろうと思ったんですが・・・
どうすればいいでしょうか?
説明下手ですいません 
547ポイント を手に入れた。
|
|
|
|
Name: お豆 ..ぴよぴよ(329ポイント)
Date: 2010/08/02(月) 18:02
No:57986
|
|
Title: Re:ファイルの読み込み
|
|
確認できる環境にいないので、質問になってしまいますが
31じゃなくて49になるんですか?
---2010_8_2 19:49--------------------
(追記)そういえば10進数は49でしたね、解決方法は出てたみたいなので、追記編集としました
プログラムの雰囲気からして、文字'1'(31)をmap変数に入れて、それを整数値として
出力しているように見えますけど 
60ポイント を手に入れた。
|
|
|
|
|
Name: COUTION ..ぴよぴよ(633ポイント)
Date: 2010/08/02(月) 18:11
No:57987
|
|
Title: Re:ファイルの読み込み
|
|
0は48、1は49、2は50って感じです
>プログラムの雰囲気からして、文字'1'(31)をmap変数に入れて、それを整数値として
>出力しているように見えますけど
多分そうです
文字'1'を整数値の1にするやり方が分からなくて
どうしたらいいでしょうか?
86ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..熟練のプログラマー(55,025ポイント)
Date: 2010/08/02(月) 18:18
No:57988
|
|
Title: Re:ファイルの読み込み
|
|
48を0にしたいのですから48を引けばいいのではないでしょうか
map = FileRead_getc( FileHandle ) - 48;
または
map = FileRead_getc( FileHandle ) - '0';
のような書き方もよく見ます
75ポイント を手に入れた。
|
|
|
|
|
Name: COUTION ..ぴよぴよ(634ポイント)
Date: 2010/08/02(月) 18:52
No:57991
| 解決!
|
Title: Re:ファイルの読み込み
|
|
なるほど!
そういう考えは思いつきませんでしたw
これで出来そうです!
お豆さんtoyoさんありがとうございました!
解決しておきますが何か他にも良いやり方などありましたら教えてくれるとありがたいです
1ポイント を手に入れた。
|
|
|
|
|
Name: nanashi ..ぴよぴよ(598ポイント)
Date: 2010/08/03(火) 00:02
No:57998
|
|
Title: Re:ファイルの読み込み
|
|
FILE *pFile = NULL;
int data;
int array[5][5];
if( ( pFile = fopen( test.txt, "r" ) ) != NULL ){
for( int y = 0; y < MAP_Y; y ++ ){
for( int x = 0; x < MAP_X * MAP_MAX; x ++ ){
fscanf( pFile, "%d", &data );
array[5][5][ y ][ x ] = data;
}
}
}else{
printf("読み込めない\n");
}
fclose( pFile );
---test.txtの中身----
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 1 1 1 1
---------------------
これはどうでしょうか?
166ポイント を手に入れた。
|
|
|
|
Name: jay ..上級者(20,046ポイント)
Date: 2010/08/01(日) 12:23
No:57923
|
|
Title: 修正版できました
|
|
ちょうど一週間前に公開したSTGの修正版をアップしました。
以下のURL先よりDLして下さい
容量はおよそ55MBです
http://www1.axfc.net/uploader/O/so/131464
キーワード
night
ただ単に弾幕STGで遊ぶだけの内容なので「弾幕遊戯」と安直に名づけました
(いいのか、そんなんで)
修正点は以下の通りです
(ほぼみなさんに指摘して頂いた所を直しただけです)
・コンパイルするDXライブラリのバージョンを”3.03”にしました
・デバッグビルドではなくリリースビルドにしました
・アイコンを付けて、ファイル名も変えました
ついでにフレームも作りました
・Log.txtが出て来ないようにしました
・ゲームバランスを修正しました(全部説明すると長いので詳細は省略)
・ファイル構成を手直ししました
以上です
練習用チュートリアルステージ+メインゲーム5ステージ+やたら難しいEXステージ
という構成になっています。
素材はほとんどフリーのものを使用しています。
今後の参考にしたので、感想や意見など頂けたら嬉しいです。 
249ポイント を手に入れた。
|
|
|
|
Name: ぬるぽ ..入門者(4,321ポイント)
Date: 2010/08/01(日) 13:26
No:57925
|
|
Title: Re:修正版できました
|
|
制作お疲れさまでした。
タイトルの「弾幕遊戯」に関する余談ですが、
ちょうど1年前くらい前に御津凪さんが
制作したゲーム「弾幕避遊戯」を思い出してしまいました。
65ポイント を手に入れた。
|
|
|
|
|
Name: 白い時空 ..入門者(4,187ポイント)
Date: 2010/08/01(日) 15:15
No:57930
|
|
Title: Re:修正版できました
|
|
STG制作お疲れ様です。
さっそくやらせていただきました。良く出来ていて楽しかったですよ。
修正前のEXはパワーが増えず、難しかったですが、修正後のEXはパワーが減りづらくなったので、少し簡単になっていてクリアすることができました。EXのボスを、ボムを打っている間無敵にしてみるのもいいかもしれません。
えっと、修正してほしい箇所が少しあったので、挙げていくと
・「CLEAR BONUS」が「CREAL BONUS」になっている。
・自機のオプション4つの内、2つから弾が何も出ていない気がする。
・起動直後、EXステージを選ぶと自機のオプション2つが描画されていない。
こんなところでしょうか。 
242ポイント を手に入れた。
|
|
|
|
|
Name: jay ..上級者(19,788ポイント)
Date: 2010/08/01(日) 18:23
No:57938
|
|
Title: Re:修正版できました
|
|
>ぬるぽさん
まぁ、こんな安直なタイトルですしw
なにも不思議はないですねww
ちょっと興味がありますが、流石にアップローダーにも残っていないでしょうね・・・。
>白い時空さん
ご指摘ありがとうございます。
時間的にも気力的にもこれ以上の修正は無理そうなので、しっかり参考にさせていただきますね。
でも英単語のスペルミスとか情けないにも程がある・・・。
ゲームプログラミングについてもっと勉強したら、またいつか弾幕STGを作ろうと思っているので
その時にはもっとクオリティ上げられるように頑張りますね。
楽しんでくださってありがとうございました。 
258ポイント を落としてしまった。
|
|
|
|
|
Name: シエル ..プログラマー(39,247ポイント)
Date: 2010/08/01(日) 18:50
No:57943
|
|
Title: Re:修正版できました
|
|
さっきやってみたんですが、画面が戻るたびにメモリ使用量増大していきませんか?
いつかパンクしますよ。
前回アップされたときも同じ現象を指摘されていたと思いますが。
53ポイント を手に入れた。
|
|
|
|
|
Name: jay ..上級者(19,862ポイント)
Date: 2010/08/01(日) 20:39
No:57948
|
|
Title: Re:修正版できました
|
|
>御津凪さん
おお!
ありがとうございます。
時間がある時にじっくり遊ばせてもらいます。
とりあえずは今すぐDL
>シエルさん
指摘を受けましたので、これが原因かな?
と思った部分をいくつか手直ししたのですが、改善されていなかったようですね。
申し訳ないです。
その辺りももっと勉強してきます。
74ポイント を手に入れた。
|
|
|
|
|
Name: Tatu ..熟練のプログラマー(43,249ポイント)
Date: 2010/08/01(日) 23:57
No:57956
|
|
Title: Re:修正版できました
|
|
制作お疲れ様でした。
EXステージクリアしました。トラウマはやっぱりあのキャラですか。
自機が四聖龍神録のアイシャなのに龍神録のスペルがないとは。
あと、「月のいはかさの呪い」(下までいったナイフが赤くなって戻ってくるスペル)
の体力が低い気がしました。
チュートリアルに操作説明があるかと思っていたのですがありませんでした。
難易度を見てもこのステージはチュートリアルというよりは体験版ステージといった方がよいようなきがします。
143ポイント を手に入れた。
|
|
|
|
|
Name: jay ..上級者(20,266ポイント)
Date: 2010/08/02(月) 11:35
No:57974
|
|
Title: Re:修正版できました
|
|
>Tatuさん
楽しんで下さってありがとうございます。
”トラウマ”と言えばあのキャラ・・・、と言うよりほとんどただの悪乗りですけどねww
チュートリアルはテストプレイの段階でなぜかステージ1より難しくなってしまったので、あれでもかなり難易度を落としたんのですけれどね。
やはりバランス調整は難しいものですね。
これも経験として、次以降に活かしていきますね。
ご意見ありがとうございます。
2倍のポイントを手に入れた! 404ポイント を手に入れた。
|
|
|
|
|
Name: Tororo ..中級者(9,431ポイント)
Date: 2010/08/02(月) 12:53
No:57976
|
|
Title: Re:修正版できました
|
|
これをフルスクリーンでプレイする方法ってありますかね^^;
少し今の画面だと避けづらいような・・
でも、面白かったですよ!
続編(勝手に)期待していますww
71ポイント を手に入れた。
|
|
|
|
Name: ねんどじん ..初心者(7,257ポイント)
Date: 2010/08/01(日) 23:29
No:57952
|
|
Title: 無題
|
|
もう3度目になりますがよければ指摘をください。
東方の二時創作STGをつくり途中(まだ骨組みすらできてない)なのですが、
ほかの部分は支障なく動くのに、低速時の自機あたり判定だけが表示できないので
困っています。
作業工程が「龍神録プログラミングの館」で学んだのとほぼ同じですので
それで説明しますと、
img_chetc[10]を宣言し、そこに
img_chetc[0]=LoadGraph("../dat/img/char/atari.png");(パスは確認しました)
として画像の場所をいれ、DrawRotaGraphFで描画しています。
画像の場所を入れる変数を作り、そこにLoadGraphで場所を入れ、
毎ループに一回、低速ボタンが押されているかチェックして描画する・・・
これでいけると思ったのですが、どうにも描画されている気がしません。
あと、なぜだかさっぱりなのですが、img_chetc配列の[10]を[1]に変えてみたところ、
自機ショットまでもがなぜか描画されなくなってしまいました。配列の数を[10]に
直すと、また描画されるのですが・・
ちなみに、自機ショットの場所はimg_chetcではなく、別の変数に入っています。
説明下手ですがよろしくお願いします。
296ポイント を手に入れた。
|
|
|
|
Name: DVDM [URL] ..熟練のプログラマー(55,831ポイント)
Date: 2010/08/02(月) 13:46
No:57978
|
|
Title: Re:無題
|
|
>>ねんどじんさん
ソース拝見させて頂きました。
img_chetc[0] に atari.png を読み込めてはいたのですが
どこかのタイミングで img_chetc[0] の中身が 0 になっていました。
ブレークポイントを設定して調べてみると ini() 関数内での memset に原因があるようでした。
ねんどじんさんのお書きになったソースでは
memset(del_effect, 0, sizeof(del_effect)*DEL_EFFECT_MAX);
のようになっていたのですが、
memset(del_effect, 0, sizeof(del_effect_t)*DEL_EFFECT_MAX);
もしくは、
memset(del_effect, 0, sizeof(del_effect));
とすれば、こちらでは低速移動中に当たり判定用の画像が表示されました。
357ポイント を手に入れた。
|
|
|
|
|
Name: ねんどじん ..初心者(7,236ポイント)
Date: 2010/08/02(月) 17:50
No:57984
| 解決!
|
Title: Re:無題
|
|
>>DVDMさん
一式見てくれなんて無茶な頼みにもかかわらずありがとうございました!
初期化時に本来、dell_effectのサイズ分初期化するところを、
そのDEL_EFFECT_MAX倍のメモリに0を入れてしまって、img_chetc[0]にも0が
入ってしまったんですね。
自分の確認が甘かったです。ご指摘の通りにやってみると、確かに
あたり判定が表示されました。
メモリがどうなってるかまだ詳しく知らないので、大変勉強になりました。
今後ともよろしくお願いします。
161ポイント を落としてしまった。
|
|
|
|
Name: かぶと ..ぴよぴよ(989ポイント)
Date: 2010/08/02(月) 06:26
No:57959
|
|
Title: C++の変数のスコープについて
|
|
C++の構造体やクラスなどの変数のスコープは
どれがどこからどこまで何でしょうか。
結局あれから探しましたが
詳しく載っているサイトが見つからなかったので
解説された講座サイトなどはありますか?
54ポイント を手に入れた。
|
|
|
|
Name: かぶと ..かけだし(1,038ポイント)
Date: 2010/08/02(月) 08:30
No:57963
|
|
Title: Re:C++の変数のスコープについて
|
|
>山崎さん
回答どうもありがとうございます。
説明足らずで申し訳ありませんでした。
僕が知りたい事を詳しく書きます。
1つのファイルにまとめて書く方法なら
クラスも構造体も全てが上手く書けるのですが
分割コンパイルをすると、エラーが
たくさん出てしまいます。
それで、分割コンパイルをした場合は
変数や構造体、クラスの扱いは
どう言う風にしたら良いのかと言う事でした。
C言語でのローカル変数、グローバル変数の扱いは
良く分かるのですが、C++では良く分かりません。
49ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(216,731ポイント)
Date: 2010/08/02(月) 08:53
No:57966
|
|
Title: Re:C++の変数のスコープについて
|
|
> C言語でのローカル変数、グローバル変数の扱いは
> 良く分かるのですが、C++では良く分かりません。
では、Cでの有効範囲について説明してみてください。
その上で、違いを説明するほうがわかりやすいでしょうから。
41ポイント を手に入れた。
|
|
|
|
|
Name: かぶと ..かけだし(1,115ポイント)
Date: 2010/08/02(月) 09:13
No:57967
|
|
Title: Re:C++の変数のスコープについて
|
|
■グローバル変数
関数外で定義されて
プログラムが始まって終わるまで有効
■ローカル変数
関数内で定義されて関数内で消滅
ですかね。
77ポイント を手に入れた。
|
|
|
|
|
Name: お豆 ..ぴよぴよ(269ポイント)
Date: 2010/08/02(月) 14:34
No:57980
|
|
Title: Re:C++の変数のスコープについて
|
|
ひょっとして、共通ヘッダの書き方が知りたいのかな?
Cは分かっているということなので、クラスだけ
ttp://www.asahi-net.or.jp/~wv7y-kmr/memo/old/cpp_cls.html
44ポイント を手に入れた。
|
|
|
|
Name: AMU ..ぴよぴよ(276ポイント)
Date: 2010/08/02(月) 00:24
No:57957
|
|
Title: 12章
|
|
龍神録プログラミングの館12章についてなんですけど、
//ゲームの初期化
void ini(){
stage_count=1;
memset(&ch,0,sizeof(ch_t));//自機データの初期化
ch.x=FIELD_MAX_X/2;
ch.y=FIELD_MAX_Y*3/4;
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);//敵データの初期化
}
この部分がよくわかりません。
memsetを調べてみたんですがstring.hが必要なのにGV.hにもどこにも書かれていません。
DXライブラリにmemsetは用意されているのですか?
sizeof は調べてみましたが理解しづらかったです。
短い期間になんどもすみません。
220ポイント を手に入れた。
|
|
|
|
Name: ookami ..プログラマー(37,887ポイント)
Date: 2010/08/02(月) 09:44
No:57970
|
|
Title: Re:12章
|
|
疑問点は、「memsetはどこで宣言されているか?」でいいのでしょうか??
私の環境では、
string.h に
void * __cdecl memset(__out_bcount_full_opt(_Size) void * _Dst, __in int _Val, __in size_t _Size);
のように宣言されています。
dxlib.hの中に、
#include <windows.h>
とありますから、
たしか windows.h の中で #include <string.h> していたと思います。
sizeof は、型のサイズを返す演算子です。
166ポイント を手に入れた。
|
|
|
|
|
Name: AMU ..ぴよぴよ(354ポイント)
Date: 2010/08/02(月) 10:27
No:57971
|
|
Title: Re:12章
|
|
DxLib.hを見てみたらwindows.hが見つかりました。ありがとうございます。
もう一つ質問ですが
memset(&ch,0,sizeof(ch_t));//自機データの初期化
の&chとはなんなのでしょうか
78ポイント を手に入れた。
|
|
|
|
Name: シエル ..プログラマー(38,728ポイント)
Date: 2010/08/01(日) 17:14
No:57932
|
|
Title: 外部データ(画像、音楽等)の読み込みについて
|
|
いつもお世話になっております。
今回は画像や音楽データなどの外部データの読み込みについてお聞きしたいことがあります。
ゲームなどを配布する際、画像データなどの外部データも一緒に配布する必要があると
思いますが、そのままフォルダごと配布してしまったら、盗まれたり利用されてしまう可能性が
あると思います。
なので別の形で配布して読み込めるようにしたいと思っています。
DXライブラリは圧縮したデータを読み込める専用の関数があると思いますが、
私はWindowsAPIとDirectXで開発を行っています。
実行ファイルのリソースに直接取り込ませようとも思いましたが、
実行ファイルのサイズが大きくなりすぎてしまいます。
また、リソースのみのDLLを作成することも考えましたが、BMPやWAVEファイルはリソースとして
登録できても、その他のPNG形式の画像などは、私が調べる限り登録できないようでした。
一般的には外部データはどのような状態で配布し、読み込み等を行っているのでしょうか?
まずは簡単な回答でかまいません。
その回答からまた質問を広げさせていただきます。
よろしくお願い致します!
429ポイント を手に入れた。
|
|
|
|
Name: TowaK ..ぴよぴよ(422ポイント)
Date: 2010/08/01(日) 17:32
No:57934
|
|
Title: Re:外部データ(画像、音楽等)の読み込みについて
|
|
拡張子の変更とかではダメなのですか?
PNGはgrpにしてみるとか……。
23ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(560,822ポイント)
Date: 2010/08/01(日) 18:23
No:57939
|
|
Title: Re:外部データ(画像、音楽等)の読み込みについて
|
|
>DLL
>その他のPNG形式の画像などは、私が調べる限り登録できないようでした
そんなことはないはずです。
普通に PNGだろうが JPGだろうがカスタムリソース扱いで登録できます。
もし仮に環境とかツールの都合でリソース扱い出来なかったとしたら
DLL側のソースコードにCの配列にして埋め込むことはできるのでなんとでもなるかと。
>一般的には外部データはどのような状態で配布し、読み込み等を行っているのでしょうか?
素のままで配布するものもありますし、リソースに登録して exeなり dll内に
埋め込んでいるものもありますけど、ゲームだとその会社や製品独自の或いはミドルウェア等が
提供しているツールを使って複数のファイルをパック(アーカイブ)していることが多いですね。
必要ならその段階で圧縮・暗号化もしています。
細かいところは違いますけど、やっていることはDXライブラリのアーカイバとほとんど同じです。
ただどういう単位でパックしているかはそれぞれです。
カテゴリ毎にまとめたり、全てを1つにまとめていたり。
438ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..プログラマー(39,194ポイント)
Date: 2010/08/01(日) 18:49
No:57942
|
|
Title: Re:外部データ(画像、音楽等)の読み込みについて
|
|
>そんなことはないはずです。
>普通に PNGだろうが JPGだろうがカスタムリソース扱いで登録できます。
>もし仮に環境とかツールの都合でリソース扱い出来なかったとしたら
>DLL側のソースコードにCの配列にして埋め込むことはできるのでなんとでもなるかと。
カスタムリソースの存在を知りませんでした。すいません。勉強します。
が、あまりリソースで埋め込むことは考えていません。
>素のままで配布するものもありますし、リソースに登録して exeなり dll内に
>埋め込んでいるものもありますけど、ゲームだとその会社や製品独自の或いはミドルウェア等が
>提供しているツールを使って複数のファイルをパック(アーカイブ)していることが多いですね。
>必要ならその段階で圧縮・暗号化もしています。
>細かいところは違いますけど、やっていることはDXライブラリのアーカイバとほとんど同じです。
>ただどういう単位でパックしているかはそれぞれです。
>カテゴリ毎にまとめたり、全てを1つにまとめていたり。
できれば、勉強のため、アーカイブで対応してみたいです。
DXライブラリはどのようにアーカイブしているのか、簡単に説明していただけますでしょうか?
466ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..プログラマー(39,385ポイント)
Date: 2010/08/01(日) 23:31
No:57953
|
|
Title: Re:外部データ(画像、音楽等)の読み込みについて
|
|
すいません。色々調べてたんですが、
アーカイブの作り方って、fopen等で読み込んだデータを
他の一つのファイルにfwriteで書きだすっていうイメージでいいでしょうか?
後から読み出しやすくするために、書き込むときに目印等を付けておく必要がありそうですけど。
120ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(561,046ポイント)
Date: 2010/08/02(月) 00:30
No:57958
|
|
Title: Re:外部データ(画像、音楽等)の読み込みについて
|
|
>アーカイブの作り方って、fopen等で読み込んだデータを
>他の一つのファイルにfwriteで書きだすっていうイメージでいいでしょうか?
そんな感じです。
>後から読み出しやすくするために、書き込むときに目印等を付けておく必要がありそうですけど
そうですね。
DXArchive.hでいうと DARC_FILEHEAD構造体がそれを担当しており、このヘッダを読み取って
実データが存在する場所を探しにいきます。
171ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..プログラマー(39,461ポイント)
Date: 2010/08/02(月) 08:41
No:57964
| 解決!
|
Title: Re:外部データ(画像、音楽等)の読み込みについて
|
|
Justyさん!ありがとうございます!
イメージ掴めたので、後は何とか一人でやってみます!
これにて解決いたします!
47ポイント を手に入れた。
|
|
|
|
|
Name: ねんどじん ..初心者(6,961ポイント)
Date: 2010/08/01(日) 23:09
No:57951
|
|
Title: Re:龍神録60章
|
|
こんばんは。
たしかmusic.cppのどこかに
StopSoundMemやらDeleteSoundMemという関数が書いてあったはずですので、
stage_countが2900になったらそれらをよんでみてはどうでしょう?
適当なこといってたらすみません・・
101ポイント を手に入れた。
|
|
|
|
Name: 16R ..ぴよぴよ(50ポイント)
Date: 2010/07/30(金) 23:24
No:57831
|
|
Title: アプリケーション
|
|
プログラムとは直接関係ないのですが・・
自分で製作したプログラムをアプリケーション(ダブルクリックで起動できるやつです。拡張子は.exeかな・・)にしたいのですが、どなたか方法教えてはいただけないでしょうか・・
50ポイント を手に入れた。
|
|
|
|
Name: 16R ..ぴよぴよ(15ポイント)
Date: 2010/07/30(金) 23:37
No:57835
|
|
Title: Re:アプリケーション
|
|
説明不足ですみません・・
あ、「Debug」フォルダのなかにありました!
どうもありがとうございます(^^)
15ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..中級者(9,472ポイント)
Date: 2010/07/30(金) 23:57
No:57838
|
|
Title: Re:アプリケーション
|
|
> あ、「Debug」フォルダのなかにありました!
他人にコピーしてあげる場合は、Releaseビルドしたものを渡しましょう。
デバッグ版は配布の仕方(同梱物等)によってはライセンス違反になります。
66ポイント を手に入れた。
|
|
|
|
|
Name: 16R ..ぴよぴよ(27ポイント)
Date: 2010/07/31(土) 00:13
No:57839
|
|
Title: Re:アプリケーション
|
|
申し訳ありません・・・Releaseビルドとは何でしょうか?
初心者なもので・・
21ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..中級者(9,581ポイント)
Date: 2010/07/31(土) 00:47
No:57842
|
|
Title: Re:アプリケーション
|
|
ツールバーに『Debug』と表示されているプルダウンメニューを『Release』に切り替えてビルドしてください。
実行ファイルはReleaseフォルダに出力されます。
Releaseビルドは配布用の実行ファイルを作るためのモードです。
Debug版に比べて実行ファイルのサイズが小さくなり処理速度も概ね速くなります。
109ポイント を手に入れた。
|
|
|
|
|
Name: 16R ..ぴよぴよ(79ポイント)
Date: 2010/08/01(日) 20:33
No:57947
| 解決!
|
Title: Re:アプリケーション
|
|
みなさまありがとうございます。
勉強になりました
29ポイント を手に入れた。
|
|
|
|
Name: imakado ..ぴよぴよ(55ポイント)
Date: 2010/08/01(日) 11:55
No:57921
|
|
Title: DebugからReleaseへ
|
|
龍神録プログラミングについて質問です。
projectの第何章でもいいので開いて、Debugモードで実行するとうまくいくのですが、Releaseモードにして実行しようとすると、
"Link : fatal error LNK1104: ファイル 'DxLib_d.lib'を開くことができません。"
とエラーが出て実行できません。
いろいろな章で試してみましたが、どれもこのエラーが出て実行できませんでした。
どなたか解決方法を教えてください。お願いします。
55ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(560,875ポイント)
Date: 2010/08/01(日) 18:29
No:57940
|
|
Title: Re:DebugからReleaseへ
|
|
Releaseビルドのプロジェクトの構成プロパティにあるリンカの設定の「追加のライブラリディレクトリ」の項目に
../include/
を入れてみて下さい。
53ポイント を手に入れた。
|
|
|
|
|
Name: imakado ..ぴよぴよ(61ポイント)
Date: 2010/08/01(日) 19:35
No:57946
| 解決!
|
Title: Re:DebugからReleaseへ
|
|
arrayさん、Justyさん、早速回答くださってありがとうございました。
無事解決しました。
6ポイント を手に入れた。
|
|
|
|
Name: SR ..ぴよぴよ(71ポイント)
Date: 2010/08/01(日) 13:14
No:57924
|
|
Title: DXライブラリによるウィンドウのサイズ変更
|
|
はじめまして、SRと申します
このたび物理の研究としてDXライブラリを用いて
シミュレーターを作ることになりDXライブラリで
プログラムを組んでいるのですが
ウィンドウ表示モードにおいてそのウィンドウのサイズを変更するやり方が分からないのです
(マウスでドラッグしてウィンドウサイズを変更することではありません)
どのようなプログラムを組めばよいのでしょうかお教えください。
71ポイント を手に入れた。
|
|
|
|
Name: ぬるぽ ..入門者(4,427ポイント)
Date: 2010/08/01(日) 13:31
No:57926
|
|
Title: Re:DXライブラリによるウィンドウのサイズ変更
|
|
まずはググりましょう。
「DXライブラリ ウィンドウのサイズ変更」と検索してみてください。
一番上に、DXライブラリ置き場 リファレンスページが表示されてますね?
そのページを開き、Ctrl+Fで「ウインドウのサイズ」を検索してみましょう。
SetWindowSizeChangeEnableFlagという関数が見つかると思います。
その関数を使えば可能です。参考までにどうぞ。
106ポイント を手に入れた。
|
|
|
|
|
Name: ナムアニクラウド [URL] ..ぴよぴよ(434ポイント)
Date: 2010/08/01(日) 13:39
No:57927
|
|
Title: Re:DXライブラリによるウィンドウのサイズ変更
|
|
「起動時のウィンドウのクライアント領域のサイズの変更」であれば、SetWindowSize関数やSetGraphMode関数を用いればいいです。
SetGraphModeは呼びだすと全てのグラフィックハンドルが破棄されるので、特に理由がなければDxLib_Initより前に呼び出すとよいでしょう。(SetWindowSizeは問題ないようです)
SetWindowSize( int Width, int Height );
[Width] :横幅
[Height]:縦幅
SetGraphMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth );
[ScreenSizeX] :横幅
[ScreenSizeY] :縦幅
[ColorBitDepth]:使用する色のビット数
SetGraphModeについては、DXライブラリのリファレンスの「その他画面操作系関数」のところに載っているので、よく見てみて下さい。ぬるぽさんの言った通りです。
また、リファレンスに載ってない関数で有用なものもあるので、必要なときはDxLib.hから検索してみるといいでしょう。
434ポイント を手に入れた。
|
|
|
|
|
Name: SR ..ぴよぴよ(91ポイント)
Date: 2010/08/01(日) 14:09
No:57929
|
|
Title: Re:DXライブラリによるウィンドウのサイズ変更
|
|
ぬるぽさん、ナムアニクラウドさん
解決しました
誠にありがとうございました
20ポイント を手に入れた。
|
|
|
|
|
Name: SR ..ぴよぴよ(3ポイント)
Date: 2010/08/01(日) 18:02
No:57935
| 解決!
|
Title: Re:DXライブラリによるウィンドウのサイズ変更
|
|
解決しました!
3ポイント を手に入れた。
|
|
|
|
Name: DecentLove ..中級者(10,062ポイント)
Date: 2010/07/31(土) 22:48
No:57897
|
|
Title: デスクトップの枠
|
|
またまたすみません。
いま時計をつくっていて、大体骨組みは完成しました。
時計なので、デスクトップの隅などに自由に置けて、かつ、目障りにならないようにしたいです。
SetWindowStyleMode(4);
で、邪魔なウィンドウの枠を消しました。すると、今度はウィンドウを全く動かせなくなってしまいました。
邪魔なウィンドウの枠を消してウィンドウを自由に動かせるようにするにはどのようにしたらいいですか?
どなたか分かる人、お願いします。
VC++2010
DxLibを使用です。
195ポイント を手に入れた。
|
|
|
|
Name: シエル ..プログラマー(38,248ポイント)
Date: 2010/07/31(土) 23:07
No:57900
|
|
Title: Re:デスクトップの枠
|
|
DXライブラリか。。.
ウィンドウプロシージャでメッセージを処理できれば余裕なんだけどなぁ。
DXライブラリはさっぱり分かりませんので、
DXライブラリにどんなマウス関連の関数があるのかわかりませんが、
ウィンドウ内にマウスがあり、クリックしていたら、
マウスの移動量だけ移動した方向に動かせばいいと思います。
DXライブラリにマウスのクリック判定、マウスの移動量等を求める関数があればの話ですけど。 
120ポイント を落としてしまった。
|
|
|
|
|
Name: ISLe ..中級者(9,861ポイント)
Date: 2010/07/31(土) 23:59
No:57904
|
|
Title: Re:デスクトップの枠
|
|
メインループの中に
if (GetMouseInput() & 1) { /* 左クリックで */
/* ウインドウ枠をクリックしたと思わせる */
SendMessage(GetMainWindowHandle(), WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
というコードを入れてみてください。
99ポイント を手に入れた。
|
|
|
|
|
Name: DecentLove ..中級者(10,731ポイント)
Date: 2010/08/01(日) 00:10
No:57905
|
|
Title: Re:デスクトップの枠
|
|
みなさん回答ありがとうございます!
おかげで出来ました。ありがとうございます!
動かすことはできたのですが、移動中に、時刻の描画の処理が止まってしまいます。
ウィンドウの移動中にも処理を続けさせることのできる関数はありませんか?
調べてはみたんですが…。いまいち見つからなくて。
145ポイント を手に入れた。
|
|
|
|
Name: 画像 ..ぴよぴよ(96ポイント)
Date: 2010/07/31(土) 19:30
No:57889
|
|
Title: 敵のアイコンが重なってる
|
|
龍神録プログラミングの館の12章まで進みましたのでエクセルの敵の種類を0と1をつけて何体かずつ別々の絵で敵が出てくる、とやろうとしました。ですが敵のアイコンが重なって表示されるか、或いはどちらかしか表示されない、という状況になってしまい…
GV.h
GLOBAL int img_enemy[2][1];//画像1枚分を2キャラ分
load.cpp
LoadDivGraph( "../dat/img/enemy/0.png" , 1 , 1 , 1 , 32 , 32 , img_enemy[0] ) ;
LoadDivGraph( "../dat/img/enemy/1.png" , 1 , 1 , 1 , 32 , 32 , img_enemy[1] ) ;
graph.cpp
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[0][enemy[i].img],TRUE);
この状態では0.pngの絵しか出ず、graph.cppに
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[1][enemy[i].img],TRUE);
を加えると0.pngと1.pngの絵が重なってしまいます。
他にいじれそうなところもなく、見本60章のソースも覗きましたがこの部分に関しては12章のままのようでどうすればいいかわかりません。
どこをいじれば別々の絵として認識されるのでしょうか?
96ポイント を手に入れた。
|
|
|
|
Name: jay ..上級者(19,316ポイント)
Date: 2010/07/31(土) 20:03
No:57892
|
|
Title: Re:敵のアイコンが重なってる
|
|
ではこんな感じでどうでしょうか?
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[i][enemy[i].img],TRUE);
これでちゃんと動作してくれると思いますが、今の僕には確認する術がないので確証は全くないです。
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[0][enemy[i].img],TRUE);
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[1][enemy[i].img],TRUE);
この二つは消して下さいね。
159ポイント を手に入れた。
|
|
|
|
|
Name: 画像 ..ぴよぴよ(172ポイント)
Date: 2010/07/31(土) 20:32
No:57894
|
|
Title: Re:敵のアイコンが重なってる
|
|
jayさんのプログラムを試したところ、別々の絵で表示はされましたがその2体分しか敵が出ないようになってしまいました。
一度動かした後キャラデータで敵数を増やしても2体のままで…
76ポイント を手に入れた。
|
|
|
|
|
Name: Tatu ..熟練のプログラマー(43,106ポイント)
Date: 2010/07/31(土) 23:28
No:57903
|
|
Title: Re:敵のアイコンが重なってる
|
|
>>エクセルの敵の種類を0と1をつけて何体かずつ別々の絵で敵が出てくる、とやろうとしました。
敵の種類を扱う変数はenemy[i].kndだから
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[enemy[i].knd][enemy[i].img],TRUE);
とすればうまく表示されるはずです。
jayさんのプログラムではいくら敵を増やしても二体までしか表示されません。
img_enemy[2][enemy[i].img]などの画像は読み込んでいないからです。
229ポイント を手に入れた。
|
|
|
|
|
Name: jay ..上級者(19,356ポイント)
Date: 2010/08/01(日) 11:20
No:57919
|
|
Title: Re:敵のアイコンが重なってる
|
|
あー、やはり何かで確認しないと駄目ですね。
今後は気をつけます。
失礼しましたー。
40ポイント を手に入れた。
|
|
|
|
Name: Void ..ぴよぴよ(74ポイント)
Date: 2010/08/01(日) 01:53
No:57911
|
|
Title: 右詰め
|
|
RPGのメニュー画面、戦闘などで
HP 150 / 2500
MP 10 / 120
ではなく
HP 150 / 2500
MP 10 / 120
のようにステータスの値を右詰めに描きたいのですが
何かいい方法はありませんか
74ポイント を手に入れた。
|
|
|
|
Name: 夏天 ..初心者(7,995ポイント)
Date: 2010/08/01(日) 02:00
No:57912
|
|
Title: Re:右詰め
|
|
DXライブラリでは試したことありませんが
コンソールプログラムでは
3文字分確保の場合
printf("%3d",10);
とかくと右詰
printf("%-3d",10);
とかくと左詰になりますよね
もしかしたらDXライブラリでも通用するかもですよ
108ポイント を手に入れた。
|
|
|
|
Name: 夏天 ..初心者(7,693ポイント)
Date: 2010/07/31(土) 15:06
No:57875
|
|
Title: URLからIPアドレスを取得
|
|
URLを入力しそのサーバーのIPアドレスを取得するというプログラムを作りたいのですが
まったくやり方がわかりません
検索をかけてもnslookupしか出てきません
DXライブラリにもそういった関数はついていないので
どうすればいいのか教えていただけないでしょうか
開発環境
OS:WindowsXP
エディタ:VisualStudio2010
ライブラリ:DXライブラリ
94ポイント を手に入れた。
|
|
|
|
Name: お豆 ..ぴよぴよ(225ポイント)
Date: 2010/07/31(土) 15:30
No:57876
|
|
Title: Re:URLからIPアドレスを取得
|
|
socketプログラミングですね。
こういった回答が適切かはわかりませんが、該当するのは下記の関数です。
この関数をキーワードに検索して見るとすぐに、サンプルコードが見つかると思いますよ。
gethostbyname
getaddrinfo
2倍のポイントを手に入れた! 198ポイント を手に入れた。
|
|
|
|
|
Name: shiro4ao ..初心者(8,596ポイント)
Date: 2010/07/31(土) 18:17
No:57882
|
|
Title: Re:URLからIPアドレスを取得
|
|
DXライブラリから離れてしまいますが、以下のようにしてホスト名から
IPアドレスを求めることができます。
===============GetIPaddr.cpp=============================================
#include <stdio.h>
#include <winsock2.h>
int main() {
LPHOSTENT host;
WSADATA wsaData;
char hostname[]="www.google.co.jp"; //試しにgoogleのアドレス
IN_ADDR inaddr;
int i,addr1,addr2,addr3,addr4;
WSAStartup(2 , &wsaData);
host = gethostbyname(hostname);
printf("IPアドレス = %d.%d.%d.%d\n" ,(BYTE)*((host->h_addr_list[0])) ,(BYTE)*((host->h_addr_list[0]) + 1) ,(BYTE)*((host->h_addr_list[0]) + 2) ,(BYTE)*((host->h_addr_list[0) + 3));
WSACleanup();
return 0;
}
===================================================================
====実行結果======================================================
C:\GetIPaddr>GetIPaddr.exe
IPアドレス = 66.249.89.104
================================================================
大変申し訳ないのですが、
エラー処理はしていませんので、実行する際は確実にgoogleにアクセス出来る状態で実行してください。
配列へのポインタになっているべき理由があるはずなのですが自分にはわかりませんでした。
あと、URLからではなくてすみません。
480ポイント を手に入れた。
|
|
|
|
|
Name: 夏天 ..初心者(7,887ポイント)
Date: 2010/07/31(土) 22:49
No:57898
| 解決!
|
Title: Re:URLからIPアドレスを取得
|
|
皆さんの協力で無事満足のいく結果が得られましたありがとうございます
>>お豆さんへ
なるほど、ソケットプログラムというのですね。
初めて聞きました^^;
まだまだ自分には覚えるべきことがたくさんあることがわかったので
ありがとうございます
>>shiro4aoさんへ
DXライブラリから離れていても大丈夫です
自分がU・R・L!U・R・L!っていっていたものはどうやらホスト名のことっぽいです
まさにこういうのを求めていました
最初エラーが出ましたがws2_32.libをリンクするのをしていなかったっぽいので
無事コンパイルが通ったのでよかったです
ありがとうございます

194ポイント を手に入れた。
|
|
|
|
Name: 博士 ..ぴよぴよ(173ポイント)
Date: 2010/07/31(土) 02:42
No:57849
|
|
Title: 確認
|
|
主様
初めまして。博士と申します。
一つ質問があります。
主様の質問で出てくるDXライブラリではなく、
自前のライブラリでゲーム制作を進めています。
(ゲーム業界に転職するべく、開発した物です。)
現在、コーディングが終了し、デバック作業を行っているのですが、
Zキー(決定キー)押すと次画面に遷移するはずが、遷移せずに画面がフリーズしてしまう。
(自機及びパーツセレクトで呼び出されるGameSelectDisplayとGameSelectInput関数及び
上記内で呼び出しされる関数を確認したが、問題と思われる箇所は発見できず。)
また、タイトル画面,セレクト画面のカーソルが正常に機能しない状態です。
つきましては、動作確認を依頼したいのですが、引き受けて頂けますでしょうか。
(もちろん、引き続きこちらでもデバック作業は行っていきます。)
ご返答宜しくお願い致します。
173ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..ハッカー(146,831ポイント)
Date: 2010/07/31(土) 03:38
No:57851
|
|
Title: Re:確認
|
|
確認というか、依頼ですね。
もし引き受けた場合、実行ファイルのみでデバッグ作業をすることになるのでしょうか?
ソースコード一式が与えられないと明確なバグは把握しにくいです。
それと、受諾した場合の対象データは何を使って渡すのですか?
69ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,244,144ポイント)
Date: 2010/07/31(土) 12:15
No:57866
|
|
Title: Re:確認
|
|
主様というのは・・?私の事でしょうか?^^;
キューか管理人でいいですよ。
> 動作確認を依頼したいのですが
依頼というのは動作確認ですか?
本文を拝見するとデバッグ作業のように思われますがいかがでしょう。
デバッグ作業まで出来るかはわかりませんが、動作確認するだけでよければ協力します。
また、softyaさんも仰っているようにそこまで発見が困難なバグには思えません。
何がトリガーになっているか解らず、長時間遊んでいるとたまにフリーズするというようなバグであればなかなか困難な場合もあるでしょうけど、
今回の場合、トリガーがはっきりしているので、そこにブレイクポイントを置いていけば比較的容易に発見出来そうです。
今のデバッグ作業は具体的に何をされているのでしょう?
160ポイント を手に入れた。
|
|
|
|
|
Name: 博士 ..ぴよぴよ(601ポイント)
Date: 2010/07/31(土) 18:52
No:57888
|
|
Title: Re:確認
|
|
返信有難う御座います。
本文を拝見するとデバッグ作業のように思われますがいかがでしょう。
→デバック作業です。
また、softyaさんも仰っているようにそこまで発見が困難なバグには思えません。
何がトリガーになっているか解らず、長時間遊んでいるとたまにフリーズするというようなバグであればなかなか困難な場合もあるでしょうけど、今回の場合、トリガーがはっきりしているので、
そこにブレイクポイントを置いていけば比較的容易に発見出来そうです。
今のデバッグ作業は具体的に何をされているのでしょう?
→対応完了致しました。
→管理人様が質問に書かれている通りのことを、現在作業している最中です。
確認したとありますが、デバッガ等でトレースされたんでしょうか?
→デバッガ等でのトレースは、行っていますよ。
もし引き受けた場合、実行ファイルのみでデバッグ作業をすることになるのでしょうか?
ソースコード一式が与えられないと明確なバグは把握しにくいです。
それと、受諾した場合の対象データは何を使って渡すのですか?
→受諾した場合は、依頼した方のURLにファイル送信サービスを使用して受諾された方に
渡そうと思っていました。
(しかし、上記のサービスを使用して渡す場合、受諾した方のメールアドレスを知らないと
渡せないことを考慮していませんでした。申し訳ない。)
最後に、お騒がせして申し訳ないです。
428ポイント を手に入れた。
|
|
|
|
Name: shiro4ao ..初心者(8,079ポイント)
Date: 2010/07/31(土) 13:45
No:57869
|
|
Title: インラインアセンブラによるスタックポインタの値の取得
|
|
VC++2010でインラインアセンブラをつかって、現在のスタックポインタの値を
取得したいです。
============ここから=============================
unsigned long GetStackPointer(void)
{
__asm movl %esp,%eax
}
int main(void)
{
long esp;
esp=GetStackPointer();
printf("スタックポインタの値->0x%x\n",esp);
return 0;
}
============ここまで===========================
ところが、
「オペコード' の 'MOD' はインライン アセンブラーの構文エラーになります。」
とエラーになりました。
(オペコードは"movl"のはずなのになぜか"mod"となってエラーが報告されます・・・・・)
何がまずかったのでしょうか?
2倍のポイントを手に入れた! 378ポイント を手に入れた。
|
|
|
|
Name: toyo ..熟練のプログラマー(54,921ポイント)
Date: 2010/07/31(土) 14:01
No:57870
|
|
Title: Re:インラインアセンブラによるスタックポインタの値の取得
|
|
それはgccのアセンブラ用の書き方ですね
VisualC++では使えません
%が剰余(MOD)として処理されたのでしょう
自信ないですが
__asm mov eax, esp
のように書くのだと思います
83ポイント を手に入れた。
|
|
|
|
|
Name: shiro4ao ..初心者(8,116ポイント)
Date: 2010/07/31(土) 14:36
No:57872
| 解決!
|
Title: Re:インラインアセンブラによるスタックポインタの値の取得
|
|
ありがとうございます。
無事にスタックポインタの値がわかりました。
自分が書いていたのはgccの文法だったのですね!
ありがとうございました。
37ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..ハッカー(216,690ポイント)
Date: 2010/07/31(土) 15:06
No:57874
|
|
Title: Re:インラインアセンブラによるスタックポインタの値の取得
|
|
関数を呼び出した時点でスタックポインタの値を破壊してしまうので、その方法では正確な値を取得することは困難かと思います。
関数全体をアセンブリ言語で記述し、呼出し時に戻り先番地をスタックに積んだ分を調整する必要があります。
65ポイント を手に入れた。
|
|
|
|
|
Name: shiro4ao ..初心者(8,641ポイント)
Date: 2010/07/31(土) 18:19
No:57885
| 解決!
|
Title: Re:インラインアセンブラによるスタックポインタの値の取得
|
|
ありがとうございます。
たしかに考えていた挙動と違っていました・・・・
別の方法を考えたいと思います。
ありがとうございました。
45ポイント を手に入れた。
|
|
|
|
Name: 名無し ..初心者(7,074ポイント)
Date: 2010/07/30(金) 17:38
No:57811
|
|
Title: FPS設定
|
|
FPSを制御しようとして、龍神録プログラミングの館の43を参考に(というかほぼぶち込み)して
自分のプログラムに組み込んだら、エラーは出ないんですけど、画面に何も出力されなくなって
しまいました。
FPS関数を組み込む前には描画されてたものも描画されなくなってしまったので、
どこかで無限ループが起きてると思うのですが、自分で見てみてもよく分かりません。
変なコメントしてるのは、こうでもしないと見にくいためです。
環境はBCC Developerです。 返答お願いします。
#include "DxLib.h"
#define FLAME 60
//宣言////////////////////////////////////////////////////////////////////////////////////////
char Key[256];
int Graph=LoadGraph("Ziki.png");
int X=320,Y=400;
int color=GetColor(255,255,255);
int fps_count,count0t; //fpsのカウンタ、60フレームに1回基準となる時刻を記録する変数
int f[FLAME]; //平均を計算するため60回の1周時間を記録
double ave; //平均fps
//宣言終//////////////////////////////////////////////////////////////////////////////////////
//FLAME fps になるようにfpsを計算・制御
void fps_wait(){
int term,i,gnt;
static int t=0;
if(fps_count==0){//60フレームの1回目なら
if(t==0)//完全に最初ならまたない
term=0;
else//前回記録した時間を元に計算
term=count0t+1000-GetNowCount();
}
else //待つべき時間=現在あるべき時刻-現在の時刻
term = (int)(count0t+fps_count*(1000.0/FLAME))-GetNowCount();
if(term>0)//待つべき時間だけ待つ
Sleep(term);
gnt=GetNowCount();
if(fps_count==0)//60フレームに1度基準を作る
count0t=gnt;
f[fps_count]=gnt-t;//1周した時間を記録
t=gnt;
//平均計算
if(fps_count==FLAME-1){
ave=0;
for(i=0;i<FLAME;i++)
ave+=f[i];
ave/=FLAME;
}
fps_count = (++fps_count)%FLAME ;
}
//x,yの位置にfpsを表示
void draw_fps(int x, int y){
if(ave!=0){
DrawFormatString(x, y,color,"[%.1f]",1000/ave);
}
return;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SetDrawScreen(DX_SCREEN_BACK);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
fps_wait();
draw_fps(0,465);
DrawGraph(X,Y,Graph,TRUE);
ScreenFlip();
}
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
WaitKey() ; // キーの入力待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
1,380ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,243,116ポイント)
Date: 2010/07/30(金) 20:52
No:57822
|
|
Title: Re:FPS設定
|
|
グローバル変数にこのように入れる事は出来ないです。
int Graph=LoadGraph("Ziki.png");
int color=GetColor(255,255,255);
LoadGraphもGetColorもDXライブラリの関数ですから、DXライブラリを初期化する関数を呼んだ後に呼ぶ必要があります。
後、上記のようなコメントを入れてコードを見やすくするのではなく、関数分けするとか、
字下げを明確にするとか、括弧で挟むなどして可読性を向上させるようにする方が良いのではないかと思います。
また、私が書いておいて申し訳ないのですが、グローバル変数にするなら特徴的な名前にし、他のファイルから参照出来ないようにstatic変数にした方が良いですね。
それとメインループ以外にwhileもforもgotoもありませんから、無限ループする可能性は無いので、
この時点で仮に処理が返ってこないのであれば疑うのはSleep位でしょうか。
もしどこかで処理が止まっていると思うのであればブレイクポイントを置いて確認してみて下さい。
最後に、名無しというお名前は使用されないようにお願いしているお名前ですので
よろしければ何か自分だけの名前を付けて頂けたら幸いです。
詳しくは利用規約をご覧ください >http://dixq.net/board/board.html
126ポイント を手に入れた。
|
|
|
|
|
Name: EX ..ぴよぴよ(272ポイント)
Date: 2010/07/31(土) 14:50
No:57873
| 解決!
|
Title: Re:FPS設定
|
|
すみません。名無しは今後使わないようにします。
>LoadGraphもGetColorもDXライブラリ
なるほど・・・ 忘れてたわけではないけど盲点でした
直しても直接は解決しなかったけど、いろいろいじったら表示されるようになりました。
それと、グローバル変数はちょっとした間に合わせなので、このままでも大丈夫です。
指摘ありがとうございました。
162ポイント を手に入れた。
|
|
|
|
Name: ガラ ..ぴよぴよ(431ポイント)
Date: 2010/07/31(土) 08:06
No:57853
|
|
Title: ソートのオーダーに関する問題。
|
|
質問させていただくのは2回目になるかと思います。
大学生のガラと申します。情報工学科に在籍しています。
C言語は大学2年生までに習う初級程度は大体理解できていると思いますが、あやふやな点もあります。
提出期限が本日の課題に含まれているものであるため、困っています。
質問は大学の課題のアルゴリズムとデータ構造(ソート等)に関する問題についてです。
計算量を示すオーダーについて理解が乏しく、どのようなことを求められているのかもわかりません。
以下のような問題です。
大きさnの相異なる整数要素からなるソート済みの配列a,a[1] < a[2] < ... <a[n]が与えられている。
入力として与えられている整数lに対し、a[i] = lとなるiが存在すればそのようなiを返し、どのi(1<=i<=n)に対してもa[i]≠lなら0を返すようなO(logn)ステップで動作するアルゴリズムを構成せよ。C言語などに基づく擬似コードでよい。
この問題に対して、以下のようなアルゴリズムでは題意を満たさないように思えるのですが、どうすればよいのでしょうか。
for (i = 1, i <= n, i++) {
if (a[i] == l)
return i;
}
return 0;
ご教授願います。 
431ポイント を手に入れた。
|
|
|
|
Name: ドラ ..中級者(10,173ポイント)
Date: 2010/07/31(土) 08:28
No:57854
|
|
Title: Re:ソートのオーダーに関する問題。
|
|
二分探索(Binary Search)しろって事だと思います。
>以下のようなアルゴリズムでは題意を満たさないように思えるのですが
はい。線形探索ではO(n)になってしまいます。
59ポイント を手に入れた。
|
|
|
|
|
Name: ガラ ..ぴよぴよ(514ポイント)
Date: 2010/07/31(土) 09:18
No:57856
|
|
Title: Re:ソートのオーダーに関する問題。
|
|
int low = 1;
int high = n;
int i;
while (low <= high) {
i = (low + high) / 2;
if (a[i] == l) {
return i;
}else if (a[i] < l) {
low = i + 1;
}else if (a[i] > l) {
high = mid -1;
}
}
return 0;
二分探索だとこのような感じでしょうか。
83ポイント を手に入れた。
|
|
|
|
|
Name: sizuma [URL] ..熟練のプログラマー(42,660ポイント)
Date: 2010/07/31(土) 14:04
No:57871
|
|
Title: Re:ソートのオーダーに関する問題。
|
|
>提出期限が本日の課題に含まれているものであるため、困っています。
すっごい分かりづらいです。
>二分探索だとこのような感じでしょうか
擬似コードでいいって書いてますけど、普通にコンパイルできて動作するように作ったほうがいいですよ。
100ポイント を手に入れた。
|
|
|
|
Name: kabuto ..ぴよぴよ(101ポイント)
Date: 2010/07/31(土) 09:48
No:57857
|
|
Title: マウスでタッチしたマスを反転させる
|
|
2次元配列でマスの情報を管理してます。(1マス64*64)
タッチしたマスを1なら2に2なら1にしたいのですが上手くいきません。
タッチした瞬間に全てのマスが反転してしまいます。
x,y・・・マウスの座標
panel[*][*].num・・・1か2の情報
マスのサイズ・・・中心原点で64*64
for( int i=0; i<HEIGHT_MAX; i++ ){
for( int j=0; j<WIDTH_MAX; j++ ){
if((int)x-32 < panel[i][j].x+32 && (int)x+32 > panel[i][j].x-32 &&
(int)y-32 < panel[i][j].y+32 && (int)y+32 > panel[i][j].y-32){
if( panel[i][j].num == 1 ) panel[i][j].num = 2;
else if( panel[i][j].num == 2 ) panel[i][j].num = 1;
}
}
}
わかりにくい質問で申し訳ないのですが
みては頂けないでしょうか?
101ポイント を手に入れた。
|
|
|
|
Name: シエル ..プログラマー(38,278ポイント)
Date: 2010/07/31(土) 09:50
No:57858
|
|
Title: Re:マウスでタッチしたマスを反転させる
|
|
一瞬しか見ていないですが、全部のマスを処理しちゃまずいんじゃないですか?
該当のマスだけ処理したらbreakしないと。
29ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..上級者(16,112ポイント)
Date: 2010/07/31(土) 10:31
No:57859
|
|
Title: Re:マウスでタッチしたマスを反転させる
|
|
>>シエルさん
breakしなくても問題ないのでは?
全部のマスを見に行ってますが処理は一部分しか行っておりません。
質問者を混乱させている気がします。
ソース的には問題ないと思うのですが
panel[i][j].x等にきちんと値が入ってますか?
値が0だったりするとこのソースは動かないかと思います。
描画で使っている部分のソースをあげて頂けないでしょうか?
又、座標をキャストしているのですが意味があるのでしょうか?
165ポイント を手に入れた。
|
|
|
|
|
Name: 真等 ..ぴよぴよ(288ポイント)
Date: 2010/07/31(土) 10:49
No:57860
|
|
Title: Re:マウスでタッチしたマスを反転させる
|
|
初めまして、こんにちは。
回答させていただきます。
breakはしなくても問題なさそうですね。
もしパネルに重なり部分がないのでしたら、breakした方が処理的には軽くて良いかとは思いますが。
ソースをお借りしまして試してみたのですが、私の環境では、多少違和感がありました(後述)が、基本的に問題なく意図した動作をしました。
ですので、紅葉さんの仰る通り、何かしらの値が正確にinputされてないのだと思います。
x, y, panelの値をご確認いただければと思います。
以下、ソースとなります。
コメントアウトしました箇所は、お借りしたソースの原本です。
コメントアウトされてないものは、元の
panel[i][j].x+32,panel[i][j].x-32,panel[i][j].y+32,panel[i][j].y-32
の部分の[+|-]32が気になりまして、削除いたしましたものです。
#include <stdio.h>
#include <stdlib.h>
static const int HEIGHT_MAX = 10;
static const int WIDTH_MAX = 10;
class CPanel{
public:
int x;
int y;
int num;
};
int main(){
int x = 100;
int y = 100;
CPanel panel[HEIGHT_MAX][WIDTH_MAX];
for( int i=0; i<HEIGHT_MAX; i++ ){
for( int j=0; j<WIDTH_MAX; j++ ){
panel[i][j].x = j*64;
panel[i][j].y = i*64;
panel[i][j].num = ((int)rand())%2 + 1;
}
}
/*
for( int i=0; i<HEIGHT_MAX; i++ ){
for( int j=0; j<WIDTH_MAX; j++ ){
if((int)x-32 < panel[i][j].x+32 && (int)x+32 > panel[i][j].x-32 &&
(int)y-32 < panel[i][j].y+32 && (int)y+32 > panel[i][j].y-32){
if( panel[i][j].num == 1 ) panel[i][j].num = 2;
else if( panel[i][j].num == 2 ) panel[i][j].num = 1;
}
}
}
*/
for( int i=0; i<HEIGHT_MAX; i++ ){
for( int j=0; j<WIDTH_MAX; j++ ){
if((int)x-32 < panel[i][j].x && (int)x+32 > panel[i][j].x &&
(int)y-32 < panel[i][j].y && (int)y+32 > panel[i][j].y){
if( panel[i][j].num == 1 ) panel[i][j].num = 2;
else if( panel[i][j].num == 2 ) panel[i][j].num = 1;
}
}
}
}
268ポイント を手に入れた。
|
|
|
|
|
Name: mats ..入門者(3,190ポイント)
Date: 2010/07/31(土) 11:52
No:57862
|
|
Title: Re:マウスでタッチしたマスを反転させる
|
|
これも混乱を招いてしまうのかもしれないのですが…
panel[((int)y-32)%64][((int)x-32)%64]
のように,マウス座標から直接マスを求めることはできないのでしょうか?
(マスが移動したりしないという前提ですが)
マスがどのように並んでいるのか理解していないので,計算式は微妙に違っているかもしれません
96ポイント を手に入れた。
|
|
|
|
|
Name: シエル ..プログラマー(38,279ポイント)
Date: 2010/07/31(土) 12:14
No:57865
|
|
Title: Re:マウスでタッチしたマスを反転させる
|
|
すいません。一瞬しか見てなかったので、質問の意味を勘違いしてました。
私の投稿は完全無視してください。
1ポイント を手に入れた。
|
|
|
|
|
Name: kabuto ..ぴよぴよ(248ポイント)
Date: 2010/07/31(土) 12:38
No:57867
|
|
Title: Re:マウスでタッチしたマスを反転させる
|
|
>>紅葉s
それでした!!
テスト用に描画してたものを使っており
変数には値が入っておりませんでした・・・。
>>真等s
テストソースありがとうございます。
お手数お掛け致しました。
>>mats さん
ご回答ありがとうございます。
そのようなやり方もあるのですねw
配列を壊さないように気をつけます。
>>シエルs
回答ありがとうございました。
breakをした方が処理が軽くなりそうなので入れさせて頂きます。
ありがとうございました。
147ポイント を手に入れた。
|
|
|
|
Name: 蓮 ..入門者(3,211ポイント)
Date: 2010/07/29(木) 06:25
No:57707
|
|
Title: OpenGL ESでの範囲指定でのテクスチャの読み込み
|
|
何度も質問してすいません(汗)
やはり解決できないので再度質問させて頂きました。
http://www.play21.jp/board/formz.cgi?action=res&resno=57689&page=&id=dixq&rln=57703
作ったテクスチャ用のクラスは下記の様な感じです。
/*--------------------------------------------------
テクスチャ用クラス
--------------------------------------------------*/
class Texture{
public:
GLuint texture;
CGSize imageSize, textureSize;
NSString *imagePath;
int startX, startY, sizeX, sizeY;
};
@、Aは自分で作ろうとしている関数です。
@は作ったクラスを入れれば元の関数にセットしてくれる関数です。
エラーは起こっていないのですが何も読み込めていないです。
Aはサイズを指定して読み込む用に作っている関数です。
現在は初期のX座標しか変更しないようにしています。
直接、値を弄らなければいけないので
ポインタを使っているのですがAはエラーが起こってしまいます。
原因はなんとなくはわかるのですが改善案がわかりません。
ポインタをもう少し勉強しないといけませんよね・・・。
// 元の関数
SZGLLoadTexture(NSString *imagePath, CGSize *imageSize, CGSize *textureSize){
if ([[imagePath pathExtension] compare:@"pvr" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
return SZGLLoadTextureImpl_PVR(imagePath, imageSize, textureSize);
}
return SZGLLoadTextureImpl_Apple(imagePath, imageSize, textureSize);
}
// @
GLuint SZGLLoadTexture(Texture texture){
return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);
}
// A
GLuint SZGLLoadTexture(Texture *texture, int startX){
*texture.startX = startX;
return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);
}
693ポイント を手に入れた。
|
|
|
|
Name: 蓮 ..入門者(3,107ポイント)
Date: 2010/07/30(金) 01:06
No:57803
|
|
Title: Re:OpenGL ESでの範囲指定でのテクスチャの読み込み
|
|
return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);
ここの部分でポインタを使って関数を呼ぶと型が違うって言われてしまいます。
1つ目の引数はポインタを使っていないので・・・。
104ポイント を落としてしまった。
|
|
|
|
|
Name: めるぽん ..初心者(8,791ポイント)
Date: 2010/07/30(金) 01:58
No:57804
|
|
Title: Re:OpenGL ESでの範囲指定でのテクスチャの読み込み
|
|
Texture tex;
tex.texture = SZGLLoadTexture(tex);
と書くと、@の引数が
GLuint SZGLLoadTexture(Texture texture){
と定義されているため、tex はコピーされて渡されます。つまり呼び出し元の tex と SZGLLoadTexture の texture は別物です。なので、この texture を変更しても tex は変更されません。なので、
GLuint SZGLLoadTexture(Texture& texture){
として参照を渡すようにすればいいと思います。
あとAの問題ですけど、ポインタ経由で呼び出す場合は
GLuint SZGLLoadTexture(Texture* texture, int startX){
(*texture).startX = startX;
return SZGLLoadTexture((*texture).imagePath, &(*texture).imageSize, &(*texture).textureSize);
}
のように texture を *texture とすればさっきと同じように . で中のデータを使えるようになります。または
GLuint SZGLLoadTexture(Texture* texture, int startX){
texture->startX = startX;
return SZGLLoadTexture(texture->imagePath, &texture->imageSize, &texture->textureSize);
}
のように . の代わりに -> を使う方法もあります。こちらの方が一般的な気がしますね。
ただまあ、ここではポインタを使うのは無駄なので、さっきと同じように
GLuint SZGLLoadTexture(Texture& texture, int startX){
texture.startX = startX;
return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);
}
でいいと思います。
586ポイント を手に入れた。
|
|
|
|
|
Name: 蓮 ..入門者(3,157ポイント)
Date: 2010/07/31(土) 05:30
No:57852
| 解決!
|
Title: Re:OpenGL ESでの範囲指定でのテクスチャの読み込み
|
|
遅くなってすみません。
お陰さまで解決できました!!
アドバイスありがとうございました。
本当に助かりました><
50ポイント を手に入れた。
|
|
|
|
Name: ねんどじん ..初心者(5,304ポイント)
Date: 2010/07/31(土) 00:46
No:57841
|
|
Title: 初歩的な質問ですみません
|
|
前回はお世話になりました。また質問したいことがあるのできました。
自分でDXライブラリをつかってゲームを作ってみようと思い、新しくプロジェクトを作ってから
DXライブラリ置き場に書いてあった「使い方説明」どおりにプロジェクトの
プロパティを設定して、以下のプログラムを組み、デバッグを開始したところ、以下のエラーが出ました。
解読しようとしましたがよくわからなかったので、解決方法を教えてください。
#define GLOBAL_INSTANCE //他のファイルとの差別化に必要
#include"../include/GV.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK||SetDrawScreen(DX_SCREEN_BACK)!=0
||DxLib_Init()==-1)return -1;
WaitKey();
DxLib_End();
return 0;
}
1>------ ビルド開始: プロジェクト: Escape, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(5) : error C2146: 構文エラー : ';' が、識別子 'WinMain' の前に必要です。
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(5) : error C2065: 'HINSTANCE' : 定義されていない識別子です。
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(5) : error C2146: 構文エラー : ')' が、識別子 'hInstance' の前に必要です。
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(5) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(6) : error C2059: 構文エラー : ')'
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(7) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>c:\users\hiroyuki\desktop\escape\escape\mydat\source\main.cpp(7) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
1>ビルドログは "file://c:\Users\hiroyuki\Desktop\Escape\Escape\Debug\BuildLog.htm" に保存されました。
1>Escape - エラー 7、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
844ポイント を手に入れた。
|
|
|
|
Name: ねんどじん ..初心者(5,321ポイント)
Date: 2010/07/31(土) 00:50
No:57843
|
|
Title: Re:初歩的な質問ですみません
|
|
書き忘れていました、VC++2008 ExpressEditionをつかっています。
17ポイント を手に入れた。
|
|
|
|
|
Name: ドラ ..中級者(10,114ポイント)
Date: 2010/07/31(土) 01:31
No:57844
|
|
Title: Re:初歩的な質問ですみません
|
|
DXライブラリを使うには "DxLib.h" をインクルードする事が必要です。
また基本的に、DxLib_Init()を実行するよりも前にDXライブラリの関数を呼び出してはいけません。
ChangeWindowMode() のように DxLib_Init() よりも前に呼び出すことができる関数も存在しますが、
このタイプの関数の方が例外であり、限られています。
39ポイント を手に入れた。
|
|
|
|
|
Name: ねんどじん ..初心者(6,260ポイント)
Date: 2010/07/31(土) 01:52
No:57845
|
|
Title: Re:初歩的な質問ですみません
|
|
上のプログラムを書き変えてみたところ、他のエラーが出てしまったのですが・・・
何の事だかさっぱりです。よければご教示ください。
#define GLOBAL_INSTANCE //他との差別化のために必要
#include"../../../include/DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK||DxLib_Init()==-1||
SetDrawScreen(DX_SCREEN_BACK)!=0)return -1;
//ウィンドウモード、裏画面描画、DXライブラリ初期化処理
WaitKey();
DxLib_End();//DXライブラリ終了処理
return 0;
}
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_execute_transformation が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_execute が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_adjust_parameters が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_request_workspace が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jcopy_markers_setup が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _write_stdout が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_stdin が関数 _main で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _read_scan_script が関数 _parse_switches で参照されました。
1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _keymatch が関数 _parse_switches で参照されました。
1>C:\Users\hiroyuki\Desktop\Escape\Escape\Debug\Escape.exe : fatal error LNK1120: 外部参照 9 が未解決です。
1>ビルドログは "file://c:\Users\hiroyuki\Desktop\Escape\Escape\Debug\BuildLog.htm" に保存されました。
1>Escape - エラー 10、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
939ポイント を手に入れた。
|
|
|
|
|
Name: ねんどじん ..初心者(6,622ポイント)
Date: 2010/07/31(土) 02:15
No:57847
|
|
Title: Re:初歩的な質問ですみません
|
|
回答遅くなってしまいすみません
>>Dixqさん
龍神録遊ばせていただきました!とても面白かったです。
そこで龍神録プログラミングの館で配布されているprojectの、「〜章」を一つだけ
用意したもの(datとincludeはprojectから抜きました)を自分で用意しようと思ったのですが、
projectのryujin.slnだとmain.cppに書いたプログラムが正常に動くのに、
自分で新たに作成したプロジェクトだと動かないのです。
なにか特別な設定をしなければならないのでしょうか?
えっとすみません、プログラムを組みなおしたときに、
GV.h自体消してしまいました。
なので今はWinMainの前でDxLib.hをincludeしています。
ちなみに前、GV.hがあった時にはそこに以下のように書いていました。
#include<math.h>
#include"../../../include/DxLib.h"
362ポイント を手に入れた。
|
|
|
|
|
Name: ISLe ..中級者(9,648ポイント)
Date: 2010/07/31(土) 02:41
No:57848
|
|
Title: Re:初歩的な質問ですみません
|
|
> 1>libjpeg_d.lib(jpegtran.obj) : error LNK2019: 未解決の外部シンボル _jtransform_execute_transformation が関数 _main で参照されました。
(略)
> 1>Escape - エラー 10、警告 0
> ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
>
プロジェクトのプロパティで、『構成プロパティ→リンカ→システム』の『サブシステム』の項目が『Windows』になっているか確認してください。
#『コンソール』になっていませんか?
67ポイント を手に入れた。
|
|
|
|
|
Name: ねんどじん ..初心者(6,860ポイント)
Date: 2010/07/31(土) 02:53
No:57850
| 解決!
|
Title: Re:初歩的な質問ですみません
|
|
>>ISLeさん
遅い時間にご返答いただきすみません。
もろ#『コンソール』でした
『Windows』に変更すると問題なく動きました!的確な指摘ありがとうございました。
ゲーム作る前にVC++の使い方覚えなきゃと痛感しました。
これでこの質問は解決にしたいと思います。返答していただいた方々ありがとうございます。
2倍のポイントを手に入れた! 238ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..初心者(8,587ポイント)
Date: 2010/07/30(金) 22:07
No:57825
|
|
Title: Re:初歩的な質問ですが
|
|
使っている「ソフトウェア名」を書いてほしいんですが・・・
どうして書かないんでしょうか?
44ポイント を手に入れた。
|
|
|
|
|
Name: もぐりん ..かけだし(1,036ポイント)
Date: 2010/07/30(金) 22:31
No:57827
|
|
Title: Re:初歩的な質問ですが
|
|
Visual C++.net 2010なのか、C++Builder 2010なのか、どちらでしょうか?
32ポイント を手に入れた。
|
|
|
|
Name: jay ..上級者(18,829ポイント)
Date: 2010/07/29(木) 00:46
No:57696
|
|
Title: DXライブラリのアーカイブ機能
|
|
先日僕がゲームを公開した時はアーカイブファイルの”dat.dxa”がzip内にあり
プログラムを起動してもちゃんと読み込むことができていました。
しかし修正版を作ったいま、何故か読み込むことが出来ないのです。
ただのフォルダの状態だとちゃんと読み込んでくれるので、ファイルの参照場所の指定は間違っていないハズなのですが・・・。
色々試しているのですが、何が原因で突然読み込んでくれなくなったのか皆目見当がつきません。
何か解決策になりそうな方法
またはDXライブラリのアーカイブ機能以外で、同じような形にファイルを纏める方法は無いでしょうか。
272ポイント を手に入れた。
|
|
|
|
Name: ookami ..プログラマー(37,471ポイント)
Date: 2010/07/29(木) 12:26
No:57718
|
|
Title: Re:DXライブラリのアーカイブ機能
|
|
それはさすがに どんな修正をしたか書かないと
分からないのでは...^^;
とりあえず、
「画像を表示するだけのプログラム」でも作って、
DXアーカイブの問題なのか、そうでないのかを切り分けては
いかがでしょうか。
78ポイント を手に入れた。
|
|
|
|
|
Name: DVDM [URL] ..熟練のプログラマー(55,615ポイント)
Date: 2010/07/29(木) 18:26
No:57763
|
|
Title: Re:DXライブラリのアーカイブ機能
|
|
>>jayさん
・アーカイブするためのソフトをもう一度インストールし直す
・本当にパスが合っているのかもう一度確認する
・以前公開時に作った .dxa のデータを一度削除してからもう一度アーカイブする
・アーカイブしてからファイル名を変更してしまった
と思いついた感じではこんな所なのですが
色々試したと仰っているので既にこれもお試しになりましたよね…。
37ポイント を手に入れた。
|
|
|
|
|
Name: jay ..上級者(19,156ポイント)
Date: 2010/07/29(木) 21:30
No:57774
|
|
Title: Re:DXライブラリのアーカイブ機能
|
|
「画像を表示するだけのプログラム」は既に試してみました。
テストプログラムは問題なく動作したのでDXアーカイブ事態に問題はないと思います。
修正した箇所は、先日みなさんに指摘して頂いたことをそのまま実行したことと
ゲームバランスに関する部分を修正したことくらいなのです。
・アーカイブするためのソフトをもう一度インストールし直す
・本当にパスが合っているのかもう一度確認する
・以前公開時に作った .dxa のデータを一度削除してからもう一度アーカイブする
以上は既に一通り試していますが効果はありあせんでした。
また
・アーカイブしてからファイル名を変更してしまった
ということもありません。
現状はアーカイブする前のただのフォルダの状態だと、正常に読み込んでくれます。
そのフォルダをアーカイブして元のフォルダと入れ替えるとなぜか読み込んでくれないのです。
試しにそのアーカイブフォルダを解凍して元通りにしてみるとまた読み込んでくれたり。
もう少し色々試してみて、上手くいかないようなら他の方法を試すべきなのかもしれませんね・・・。
とにかく、自分でもさらに色々試してみます。
327ポイント を手に入れた。
|
|
|
|
|
Name: jay ..上級者(19,232ポイント)
Date: 2010/07/30(金) 16:23
No:57806
| 解決!
|
Title: Re:DXライブラリのアーカイブ機能
|
|
う〜ん、やはりどうにも解決しないですね・・・。
やはり他の手を使うことにします、失礼しました。
ご協力して下さったみなさま、ありがとうございました。
76ポイント を手に入れた。
|
|
|
|
Name: じぇれみあ ..ぴよぴよ(35ポイント)
Date: 2010/07/30(金) 18:30
No:57813
|
|
Title: タイトルから次の画面へ
|
|
タイトルで、スペースキーを押されたら次の画面に進むようにしたいので、とりあえず画面を黒くしたいのですが、
if (Key[KEY_INPUT_SPACE]==1){
DrawBox(0,0,640,480,black,TRUE);
}
これではスペースを押しても一瞬しか黒くなりません。
どうしても他のやり方が思いつかないのですが・・・
初歩的な質問ですが教えていただければ幸いです。
35ポイント を手に入れた。
|
|
|
|
Name: じぇれみあ ..ぴよぴよ(64ポイント)
Date: 2010/07/30(金) 19:41
No:57816
|
|
Title: Re:タイトルから次の画面へ
|
|
それは具体的にどうすればいいんでしょうか・・・?
int next;
if (y==280&&Key[KEY_INPUT_SPACE]==1){
next=1;
if (next==1){
DrawBox(0,0,640,480,black,TRUE);
}
}
こういうことでしょうか・・・(-_-;)
29ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..ウィザード(1,242,990ポイント)
Date: 2010/07/30(金) 20:44
No:57821
|
|
Title: Re:タイトルから次の画面へ
|
|
状態を示す変数が必要ですね。
Statesという状態を表す変数を使って描画する関数を分けるプログラムを書いてみました。
#include "DxLib/DxLib.h"
void menu0(){
DrawBox(0,0,640,480,GetColor(100,0,0),TRUE);
DrawString(100,100,"メニュー0です",GetColor(0,0,0));
}
void menu1(){
DrawBox(0,0,640,480,GetColor(100,100,0),TRUE);
DrawString(100,100,"メニュー1です",GetColor(0,0,0));
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
int States = 0;
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(!ScreenFlip()&&!ProcessMessage()&&!ClearDrawScreen()&&!CheckHitKey(KEY_INPUT_ESCAPE)){
switch(States){
case 0:
menu0();
if(CheckHitKey(KEY_INPUT_1)==1){
States=1;
}
break;
case 1:
menu1();
if(CheckHitKey(KEY_INPUT_0)==1){
States=0;
}
break;
}
}
DxLib_End();
return 0;
}
0キーや1キーを押してみて下さい。
キーを離しても状態が維持され続けるはずです。
キー入力により状態を変えたらその状態を維持し、処理を分ける必要がありますね。
40ポイント を手に入れた。
|
|
|
|
|
Name: じぇれみあ ..ぴよぴよ(5ポイント)
Date: 2010/07/30(金) 21:04
No:57823
| 解決!
|
Title: Re:タイトルから次の画面へ
|
|
できました!!
教えてくれた皆さん、ありがとうございました!!
5ポイント を手に入れた。
|
|
|
|
|