処理落ちをしない書き方
処理落ちをしない書き方
初歩的な質問ですいません。
音楽をかけると操作しているキャラクターが
かくかくした動きになってしまうのですが
どうすれば直るのでしょうか。
ご教授お願いします。
音楽をかけると操作しているキャラクターが
かくかくした動きになってしまうのですが
どうすれば直るのでしょうか。
ご教授お願いします。
Re: 処理落ちをしない書き方
理由としては音楽を再生する時に余計な負荷が掛っている事が考えられます。
例えば
・気付かないうちに2重に再生している
・何度も読み込んで格納しようとしているなど、必要のない処理を何度も繰り返している
・前に再生したものをメモリから削除していないのでメモリが圧迫されている
・そもそも他に処理していることが多すぎる
などが考えられます
こういう質問をする時は問題のプログラムコードを張って直接誰かに指摘して貰うのが一番確実だと思いますよ。
例えば
・気付かないうちに2重に再生している
・何度も読み込んで格納しようとしているなど、必要のない処理を何度も繰り返している
・前に再生したものをメモリから削除していないのでメモリが圧迫されている
・そもそも他に処理していることが多すぎる
などが考えられます
こういう質問をする時は問題のプログラムコードを張って直接誰かに指摘して貰うのが一番確実だと思いますよ。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ
Re: 処理落ちをしない書き方
すいません。
音楽をかけずにやっても同じでした。
全ての画面の切り替えに
switchではなくifをつかっていて、
一つ一つの画面で(フィールドで)
ゲームプログラミングの館の(22)で教えていただいた処理をしています。
しかしその一行結果のようにスーっと動かないのですが、
どうしたらいいいでしょうか。
直す点があったら教えてください。
音楽をかけずにやっても同じでした。
全ての画面の切り替えに
switchではなくifをつかっていて、
一つ一つの画面で(フィールドで)
ゲームプログラミングの館の(22)で教えていただいた処理をしています。
しかしその一行結果のようにスーっと動かないのですが、
どうしたらいいいでしょうか。
直す点があったら教えてください。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 処理落ちをしない書き方
勘ですが読み込みを描画途中にやっているに一票。
一番手っ取り早いのは、ソースコードを貼ってもらうことです。
一番手っ取り早いのは、ソースコードを貼ってもらうことです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 処理落ちをしない書き方
C語を勉強し始めたばかりなので
配列が使われていなく、インデントがぐちゃぐちゃなのですが
よろしくお願いします。
切り替えの部分です↓
if(shyou==11){
sf++;
DrawGraph( 0 , 0 , image11 , FALSE ) ;
if (ch.muki==0) //上向きならch.y座標を減らす
DrawGraph( ch.x , ch.y , image3 , TRUE ) ;
else if(ch.muki==1) //左向きならch.x座標を減らす
DrawGraph( ch.x , ch.y , image4 , TRUE ) ;
else if(ch.muki==2) //下向きならch.y座標を増やす
DrawGraph( ch.x , ch.y , image , TRUE ) ;
else if(ch.muki==3) //右向きならch.x座標を増やす
DrawGraph( ch.x , ch.y , image5 , TRUE ) ;
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
else 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(can_or_cannot2(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
ch.walking_flag=0; //歩かないフラグを立てる。
}
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y--;
else 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++;
}
if(ch.y==64&&ch.x==192 ){
ch.x =384;//kk
ch.y =64;
shyou=12;}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(shyou==12){
DrawGraph( 0 , 0 , image12 , FALSE ) ;
if (ch.muki==0) //上向きならch.y座標を減らす
DrawGraph( ch.x , ch.y , image3 , TRUE ) ;
else if(ch.muki==1) //左向きならch.x座標を減らす
DrawGraph( ch.x , ch.y , image4 , TRUE ) ;
else if(ch.muki==2) //下向きならch.y座標を増やす
DrawGraph( ch.x , ch.y , image , TRUE ) ;
else if(ch.muki==3) //右向きならch.x座標を増やす
DrawGraph( ch.x , ch.y , image5 , TRUE ) ;
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
else 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(can_or_cannot3(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
ch.walking_flag=0; //歩かないフラグを立てる。
}
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y--;
else 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++;
}
if(ch.y==320&&ch.x==384 ){
ch.x =128;
ch.y =384;
shyou=0;}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(shyou==0){
DrawGraph( 0 , 0 , image2 , FALSE ) ;
if (ch.muki==0) //上向きならch.y座標を減らす
DrawGraph( ch.x , ch.y , image3 , TRUE ) ;
else if(ch.muki==1) //左向きならch.x座標を減らす
DrawGraph( ch.x , ch.y , image4 , TRUE ) ;
else if(ch.muki==2) //下向きならch.y座標を増やす
DrawGraph( ch.x , ch.y , image , TRUE ) ;
else if(ch.muki==3) //右向きならch.x座標を増やす
DrawGraph( ch.x , ch.y , image5 , TRUE ) ;
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
else 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(can_or_cannot(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
ch.walking_flag=0; //歩かないフラグを立てる。
}
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y--;
else 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++;
}
if(ch.y<40&­ou==0){
st2-=15;
DrawGraph( ch.x , st2 , image15 , TRUE ) ;
ch.muki=0;
st++;
Key[ KEY_INPUT_UP ] =0;
Key[ KEY_INPUT_DOWN ] =0;
Key[ KEY_INPUT_RIGHT] =0;
Key[ KEY_INPUT_LEFT ] =0;
ch.walking_flag=0;
if(st2<ch.y+37)
st2=ch.y+37; }
}
配列が使われていなく、インデントがぐちゃぐちゃなのですが
よろしくお願いします。
切り替えの部分です↓
if(shyou==11){
sf++;
DrawGraph( 0 , 0 , image11 , FALSE ) ;
if (ch.muki==0) //上向きならch.y座標を減らす
DrawGraph( ch.x , ch.y , image3 , TRUE ) ;
else if(ch.muki==1) //左向きならch.x座標を減らす
DrawGraph( ch.x , ch.y , image4 , TRUE ) ;
else if(ch.muki==2) //下向きならch.y座標を増やす
DrawGraph( ch.x , ch.y , image , TRUE ) ;
else if(ch.muki==3) //右向きならch.x座標を増やす
DrawGraph( ch.x , ch.y , image5 , TRUE ) ;
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
else 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(can_or_cannot2(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
ch.walking_flag=0; //歩かないフラグを立てる。
}
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y--;
else 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++;
}
if(ch.y==64&&ch.x==192 ){
ch.x =384;//kk
ch.y =64;
shyou=12;}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(shyou==12){
DrawGraph( 0 , 0 , image12 , FALSE ) ;
if (ch.muki==0) //上向きならch.y座標を減らす
DrawGraph( ch.x , ch.y , image3 , TRUE ) ;
else if(ch.muki==1) //左向きならch.x座標を減らす
DrawGraph( ch.x , ch.y , image4 , TRUE ) ;
else if(ch.muki==2) //下向きならch.y座標を増やす
DrawGraph( ch.x , ch.y , image , TRUE ) ;
else if(ch.muki==3) //右向きならch.x座標を増やす
DrawGraph( ch.x , ch.y , image5 , TRUE ) ;
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
else 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(can_or_cannot3(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
ch.walking_flag=0; //歩かないフラグを立てる。
}
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y--;
else 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++;
}
if(ch.y==320&&ch.x==384 ){
ch.x =128;
ch.y =384;
shyou=0;}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(shyou==0){
DrawGraph( 0 , 0 , image2 , FALSE ) ;
if (ch.muki==0) //上向きならch.y座標を減らす
DrawGraph( ch.x , ch.y , image3 , TRUE ) ;
else if(ch.muki==1) //左向きならch.x座標を減らす
DrawGraph( ch.x , ch.y , image4 , TRUE ) ;
else if(ch.muki==2) //下向きならch.y座標を増やす
DrawGraph( ch.x , ch.y , image , TRUE ) ;
else if(ch.muki==3) //右向きならch.x座標を増やす
DrawGraph( ch.x , ch.y , image5 , TRUE ) ;
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 ) //上ボタンが押されたら
ch.muki=0; //上向きフラグを立てる
else 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(can_or_cannot(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
ch.walking_flag=0; //歩かないフラグを立てる。
}
if(ch.walking_flag==1){ //歩くフラグが立っていたら
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y--;
else 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++;
}
if(ch.y<40&­ou==0){
st2-=15;
DrawGraph( ch.x , st2 , image15 , TRUE ) ;
ch.muki=0;
st++;
Key[ KEY_INPUT_UP ] =0;
Key[ KEY_INPUT_DOWN ] =0;
Key[ KEY_INPUT_RIGHT] =0;
Key[ KEY_INPUT_LEFT ] =0;
ch.walking_flag=0;
if(st2<ch.y+37)
st2=ch.y+37; }
}
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 処理落ちをしない書き方
コードを貼り付ける機能がありますので、そっちを使ってください。
インデントが無くなるので読み辛いです。 あと原因は他の部分にあると思います。
貼られたコードをコメントアウトしても速度は変わらないのではないでしょうか?
【追記】
VC++なら、編集→詳細→選択範囲のフォーマットで自動インデントできますので試してみてください。
インデントが無くなるので読み辛いです。 あと原因は他の部分にあると思います。
貼られたコードをコメントアウトしても速度は変わらないのではないでしょうか?
【追記】
VC++なら、編集→詳細→選択範囲のフォーマットで自動インデントできますので試してみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 処理落ちをしない書き方
softyaさんのおっしゃる通り、このプログラムの中にはそれ程処理が重くなる原因となりそうなものは見受けられないですね。
ならば画像の読み込み処理を何度も繰り返しているというのが一番に考えられる原因ですね
他にも必要がないのに何度も繰り返している処理があるならそれらも手直しした方がいいですね。
ならば画像の読み込み処理を何度も繰り返しているというのが一番に考えられる原因ですね
他にも必要がないのに何度も繰り返している処理があるならそれらも手直しした方がいいですね。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ
Re: 処理落ちをしない書き方
いろいろ試したところ
最初の方に間違いがあることが分かったのですが
ここからどうすればいいでしょうか。
#include "DxLib.h"
typedef struct{
int x,y,img,muki,walking_flag;
}ch_t;
int hantei[15][20] = {
{ 1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,1,1,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1 },
};
int hantei2[15][20] = {
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,0,0,1,0,0,2,1,1,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};
int hantei3[15][20] = {
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};
//256//384//224//352
int can_or_cannot(int x,int y,int muki){//進めるかを判定する
if(muki==0)//上向きなら
if(hantei[y/32-1][x/32]>0)//進めるか判定
return 1;//エラー
if(muki==1)//左向きなら
if(hantei[y/32][x/32-1]>0)
return 1;
if(muki==2)//下向きなら
if(hantei[y/32+1][x/32]>0)
return 1;
if(muki==3)//右向きなら
if(hantei[y/32][x/32+1]>0)
return 1;
return 0;//正常
}
int can_or_cannot2(int x2,int y2,int muki){//進めるかを判定する
if(muki==0)//上向きなら
if(hantei2[y2/32-1][x2/32]>0)//進めるか判定
return 1;//エラー
if(muki==1)//左向きなら
if(hantei2[y2/32][x2/32-1]>0)
return 1;
if(muki==2)//下向きなら
if(hantei2[y2/32+1][x2/32]>0||hantei2[y2/32][x2/32]==2)
return 1;
if(muki==3)//右向きなら
if(hantei2[y2/32][x2/32+1]==1)
return 1;
return 0;//正常
}
int can_or_cannot3(int x2,int y2,int muki){//進めるかを判定する
if(muki==0)//上向きなら
if(hantei3[y2/32-1][x2/32]>0)//進めるか判定
return 1;//エラー
if(muki==1)//左向きなら
if(hantei3[y2/32][x2/32-1]>0)
return 1;
if(muki==2)//下向きなら
if(hantei3[y2/32+1][x2/32]>0||hantei2[y2/32][x2/32]==2)
return 1;
if(muki==3)//右向きなら
if(hantei3[y2/32][x2/32+1]==1)
return 1;
return 0;//正常
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int image, image2,image3,image4,image5,image10,image11,image12,image13,image14,image15,image16,image17,image18,image19,image20,image21,img[20],sound;
char Key[256];
ch_t ch;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
ch.x =320;
ch.y =224;
ch.walking_flag=0;
ch.muki=2;
int sb;
sb=0;
if(sb==1)
SetDrawScreen( DX_SCREEN_BACK ) ;
image = LoadGraph( "satou.png" ) ; //back.bmpのハンドルを代入
image2 = LoadGraph( "sibafu.bmp" ) ; //char.pngのハンドルを代入
image3 = LoadGraph( "satouu.png" ) ;
image4 = LoadGraph( "satoum.png" ) ;
image5 = LoadGraph( "satouh.png" ) ;
image10 = LoadGraph( "satpst.bmp" ) ;
image11 = LoadGraph( "nikai.bmp" ) ;
image12 = LoadGraph( "ikkai.bmp" ) ;
image13 = LoadGraph( "sibab.bmp" ) ;
image14 = LoadGraph( "oku2.png" ) ;
image15 = LoadGraph( "oko.png" ) ;
image16 = LoadGraph( "satoub.png" ) ; //char.pngのハンドルを代入
image17 = LoadGraph( "comsb.png" ) ;
image18 = LoadGraph( "aikon.png" ) ;
image19 = LoadGraph( "commb.png" ) ;
image20 = LoadGraph( "comtb.png" ) ;
image21 = LoadGraph( "ama.png" ) ;
img[0]= LoadGraph( "oku.bmp" ) ;
img[1] = LoadGraph( "sibab2.bmp" ) ;
img[2] = LoadGraph( "ulo.png" ) ;
img[3] = LoadGraph( "satov.bmp" ) ;
img[4] = LoadGraph( "poison.png" ) ;
img[5] = LoadGraph( "gin2.png" ) ;
img[6] = LoadGraph( "comdb.png" ) ;
img[7] = LoadGraph( "ekusu.png" ) ;
img[8] = LoadGraph( "iwa.png" ) ;
img[9] = LoadGraph( "tai.png" ) ;
img[10] = LoadGraph( "bisi.png" ) ;
img[11] = LoadGraph( "smo.png" ) ;
img[12] = LoadGraph( "cua.png" ) ;
img[13] = LoadGraph( "sh.png" ) ;
img[14] = LoadGraph( "gomi.png" ) ;
img[15] = LoadGraph( "fbs.png" ) ;
img[16] = LoadGraph( "kiri.png" ) ;
sound = LoadSoundMem( "machi.mp3" );
//描画先を裏画面に設定
int shyou=11; int st=0,st2=480;
int i,j,iz,com,aif=1,aix=0,aiy=0,ar=0,comf=0,tf=0,ma=0,hp=0,thp=0,masf=0,kt=0,fbsf=0; //ハンドルを受け取るためのint型変数を宣言
com=0;
double com4t=0,al=0,tdm=0,cdm=0,ta=0,hk=0,mp=0,mh=0,pf=0,cbz=0,mas=0,m=0,sf=0;
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
///////////////////////////////////////////////////////////////////////////////////////////////////
最初の方に間違いがあることが分かったのですが
ここからどうすればいいでしょうか。
#include "DxLib.h"
typedef struct{
int x,y,img,muki,walking_flag;
}ch_t;
int hantei[15][20] = {
{ 1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,1,1,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1 },
};
int hantei2[15][20] = {
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,0,0,1,0,0,2,1,1,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};
int hantei3[15][20] = {
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};
//256//384//224//352
int can_or_cannot(int x,int y,int muki){//進めるかを判定する
if(muki==0)//上向きなら
if(hantei[y/32-1][x/32]>0)//進めるか判定
return 1;//エラー
if(muki==1)//左向きなら
if(hantei[y/32][x/32-1]>0)
return 1;
if(muki==2)//下向きなら
if(hantei[y/32+1][x/32]>0)
return 1;
if(muki==3)//右向きなら
if(hantei[y/32][x/32+1]>0)
return 1;
return 0;//正常
}
int can_or_cannot2(int x2,int y2,int muki){//進めるかを判定する
if(muki==0)//上向きなら
if(hantei2[y2/32-1][x2/32]>0)//進めるか判定
return 1;//エラー
if(muki==1)//左向きなら
if(hantei2[y2/32][x2/32-1]>0)
return 1;
if(muki==2)//下向きなら
if(hantei2[y2/32+1][x2/32]>0||hantei2[y2/32][x2/32]==2)
return 1;
if(muki==3)//右向きなら
if(hantei2[y2/32][x2/32+1]==1)
return 1;
return 0;//正常
}
int can_or_cannot3(int x2,int y2,int muki){//進めるかを判定する
if(muki==0)//上向きなら
if(hantei3[y2/32-1][x2/32]>0)//進めるか判定
return 1;//エラー
if(muki==1)//左向きなら
if(hantei3[y2/32][x2/32-1]>0)
return 1;
if(muki==2)//下向きなら
if(hantei3[y2/32+1][x2/32]>0||hantei2[y2/32][x2/32]==2)
return 1;
if(muki==3)//右向きなら
if(hantei3[y2/32][x2/32+1]==1)
return 1;
return 0;//正常
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int image, image2,image3,image4,image5,image10,image11,image12,image13,image14,image15,image16,image17,image18,image19,image20,image21,img[20],sound;
char Key[256];
ch_t ch;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
ch.x =320;
ch.y =224;
ch.walking_flag=0;
ch.muki=2;
int sb;
sb=0;
if(sb==1)
SetDrawScreen( DX_SCREEN_BACK ) ;
image = LoadGraph( "satou.png" ) ; //back.bmpのハンドルを代入
image2 = LoadGraph( "sibafu.bmp" ) ; //char.pngのハンドルを代入
image3 = LoadGraph( "satouu.png" ) ;
image4 = LoadGraph( "satoum.png" ) ;
image5 = LoadGraph( "satouh.png" ) ;
image10 = LoadGraph( "satpst.bmp" ) ;
image11 = LoadGraph( "nikai.bmp" ) ;
image12 = LoadGraph( "ikkai.bmp" ) ;
image13 = LoadGraph( "sibab.bmp" ) ;
image14 = LoadGraph( "oku2.png" ) ;
image15 = LoadGraph( "oko.png" ) ;
image16 = LoadGraph( "satoub.png" ) ; //char.pngのハンドルを代入
image17 = LoadGraph( "comsb.png" ) ;
image18 = LoadGraph( "aikon.png" ) ;
image19 = LoadGraph( "commb.png" ) ;
image20 = LoadGraph( "comtb.png" ) ;
image21 = LoadGraph( "ama.png" ) ;
img[0]= LoadGraph( "oku.bmp" ) ;
img[1] = LoadGraph( "sibab2.bmp" ) ;
img[2] = LoadGraph( "ulo.png" ) ;
img[3] = LoadGraph( "satov.bmp" ) ;
img[4] = LoadGraph( "poison.png" ) ;
img[5] = LoadGraph( "gin2.png" ) ;
img[6] = LoadGraph( "comdb.png" ) ;
img[7] = LoadGraph( "ekusu.png" ) ;
img[8] = LoadGraph( "iwa.png" ) ;
img[9] = LoadGraph( "tai.png" ) ;
img[10] = LoadGraph( "bisi.png" ) ;
img[11] = LoadGraph( "smo.png" ) ;
img[12] = LoadGraph( "cua.png" ) ;
img[13] = LoadGraph( "sh.png" ) ;
img[14] = LoadGraph( "gomi.png" ) ;
img[15] = LoadGraph( "fbs.png" ) ;
img[16] = LoadGraph( "kiri.png" ) ;
sound = LoadSoundMem( "machi.mp3" );
//描画先を裏画面に設定
int shyou=11; int st=0,st2=480;
int i,j,iz,com,aif=1,aix=0,aiy=0,ar=0,comf=0,tf=0,ma=0,hp=0,thp=0,masf=0,kt=0,fbsf=0; //ハンドルを受け取るためのint型変数を宣言
com=0;
double com4t=0,al=0,tdm=0,cdm=0,ta=0,hk=0,mp=0,mh=0,pf=0,cbz=0,mas=0,m=0,sf=0;
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
///////////////////////////////////////////////////////////////////////////////////////////////////
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 処理落ちをしない書き方
新しく貼られたソースコードにも原因となる部分は見当たりません。
なぜ、そこに問題があると判断したのかお聞きしたいのですが?
あとプレビューでちゃんと貼れているかチェックをお願いします。
ソースを[ code ]~[ /code ]で囲まないとちゃんと表示されませんでの。
↑コードにならないためにわざとスペース開けてるので、使わないでください。
なぜ、そこに問題があると判断したのかお聞きしたいのですが?
あとプレビューでちゃんと貼れているかチェックをお願いします。
ソースを[ code ]~[ /code ]で囲まないとちゃんと表示されませんでの。
↑コードにならないためにわざとスペース開けてるので、使わないでください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 処理落ちをしない書き方
sb=0;
if(sb==1)
SetDrawScreen( DX_SCREEN_BACK ) ;
というのが気になるんですが、これでいいのでしょうか?
if(sb==1)
SetDrawScreen( DX_SCREEN_BACK ) ;
というのが気になるんですが、これでいいのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 処理落ちをしない書き方
それだとバタつきそうですね。wing さんが書きました:sb=0;
if(sb==1)
SetDrawScreen( DX_SCREEN_BACK ) ;
というのが気になるんですが、これでいいのでしょうか?
もしかして、それでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。