止まります
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 止まります
これですね?
「透ける! • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3 ... 834#p73834
現状のコードをないので詳細は分かりませんが、キーの処理の後の描画処理がないと1フレーム遅れますが、それが原因ではありませんか?
「透ける! • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3 ... 834#p73834
現状のコードをないので詳細は分かりませんが、キーの処理の後の描画処理がないと1フレーム遅れますが、それが原因ではありませんか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 止まります
想像で話していてもしょうが無いので、ソースコードをお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 止まります
#include <DxLib.h>
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}redball;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}bluecube;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}yellowpyramid;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkball;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkcube;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkpyramid;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkstar;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}p1;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}enemy;
typedef struct
{
int model;
float x;
float y;
float z;
int back;
int BGM;
}stage_1;
typedef struct
{
int attack;
int special;
int shield;
int grab;
int appeal;
int up;
int down;
int right;
int left;
int jump;
int pause;
}key;
typedef struct
{
float x;
float y;
float z;
}camera;
typedef struct
{
float x;
float y;
float width;
float height;
float center_x;
float center_y;
}screen;
typedef struct
{
int frame_1_x;
int frame_1_y;
int frame_1_graph;
int frame_2_x;
int frame_2_y;
int frame_2_graph;
int back;
int keyflag;
int selectsound;
int chosesound;
}menu_t;
int attack(float attack_x,float attack_y,int attack_model)
{
MV1SetPosition(attack_model,VGet(attack_x,attack_y,0.0f));
MV1DrawModel(attack_model);
return 0;
}
int attack_side(float attack_side_x,float attack_side_y,int attack_side_model)
{
MV1SetPosition(attack_side_model,VGet(attack_side_x,attack_side_y,0.0f));
MV1DrawModel(attack_side_model);
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
int DesktopWidth;
int DesktopHeight;
int DesktopColorBitDepth;
redball rb;
bluecube bc;
yellowpyramid yp;
darkball db;
darkcube dc;
darkpyramid dp;
darkstar ds;
p1 p1;
enemy enemy;
stage_1 stage_1;
key key;
camera camera;
screen screen;
menu_t menu;
//GetDefaultState(&DesktopWidth,&DesktopHeight,&DesktopColorBitDepth);
SetGraphMode(1024,768,16);
SetWindowIconID(100);
SetMainWindowText("SolidFighters");
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1) return -1;
SetDrawScreen(DX_SCREEN_BACK);
//REDBALL構造体
rb.model_normal=MV1LoadModel("data\\characters\\redball\\redball.mqo");
rb.x=-500.0f;
rb.y=-5400.0f;
rb.speed=25.0f;
rb.width=200.0f;
rb.height=200.0f;
rb.model_attack=MV1LoadModel("data\\characters\\redball\\redball_attack.mqo");
MV1SetPosition(rb.model_attack,VGet(rb.x,rb.y,0.0f));
//BLUECUBE構造体
bc.model_normal=MV1LoadModel("data\\characters\\bluecube\\bluecube.mqo");
bc.x=-500.0f;
bc.y=-5400.0f;
bc.speed=10.0f;
bc.width=200.0f;
bc.height=200.0f;
bc.model_attack=MV1LoadModel("data\\characters\\bluecube\\bluecube_attack.mqo");
MV1SetPosition(bc.model_attack,VGet(bc.x,bc.y,0.0f));
//YELLOWPYRAMID構造体
yp.model_normal=MV1LoadModel("data\\characters\\yellowpyramid\\yellowpyramid.mqo");
yp.x=-500.0f;
yp.y=-5400.0f;
yp.speed=50.0f;
yp.width=200.0f;
yp.height=200.0f;
yp.model_attack=MV1LoadModel("data\\characters\\yellowpyramid\\yellowpyramid_attack.mqo");
MV1SetPosition(yp.model_attack,VGet(yp.x,yp.y,0.0f));
//DARKBALL構造体
db.model_normal=MV1LoadModel("data\\characters\\darkball\\darkball.mqo");
db.x=500.0f;
db.y=-5400.0f;
db.speed=50.0f;
db.width=200.0f;
db.height=200.0f;
db.model_attack=MV1LoadModel("data\\characters\\darkball\\darkball_attack.mqo");
MV1SetPosition(db.model_attack,VGet(db.x,db.y,0.0f));
//DARKCUBE構造体
dc.model_normal=MV1LoadModel("data\\characters\\darkcube\\darkcube.mqo");
dc.x=500.0f;
dc.y=-5400.0f;
dc.speed=50.0f;
dc.width=200.0f;
dc.height=200.0f;
dc.model_attack=MV1LoadModel("data\\characters\\darkcube\\darkcube_attack.mqo");
MV1SetPosition(dc.model_attack,VGet(dc.x,dc.y,0.0f));
//DARKPYRAMID構造体
dp.model_normal=MV1LoadModel("data\\characters\\darkpyramid\\darkpyramid.mqo");
dp.x=500.0f;
dp.y=-5400.0f;
dp.speed=50.0f;
dp.width=200.0f;
dp.height=200.0f;
dp.model_attack=MV1LoadModel("data\\characters\\darkpyramid\\darkpyramid_attack.mqo");
MV1SetPosition(dp.model_attack,VGet(dp.x,dp.y,0.0f));
//DARKSTAR構造体
ds.model_normal=MV1LoadModel("data\\characters\\darkstar\\darkstar.mqo");
ds.x=500.0f;
ds.y=-5400.0f;
ds.speed=50.0f;
ds.width=200.0f;
ds.height=200.0f;
ds.model_attack=MV1LoadModel("data\\characters\\darkstar\\darkpyramid_star.mqo");
MV1SetPosition(ds.model_attack,VGet(ds.x,ds.y,0.0f));
//STAGE_1構造体
stage_1.model=MV1LoadModel("data\\stages\\stage_1\\stage_1.mqo");
stage_1.x=0.0f;
stage_1.y=-5500.0f;
stage_1.back=LoadGraph("data\\stages\\stage_1\\stage_1_back.png",TRUE);
stage_1.BGM=LoadSoundMem("data\\stages\\stage_1\\stage_1.mp3");
//KEY構造体
key.attack=(KEY_INPUT_Z);
key.special=(KEY_INPUT_X);
key.shield=(KEY_INPUT_C);
key.grab=(KEY_INPUT_D);
key.appeal=(KEY_INPUT_S);
key.up=(KEY_INPUT_UP);
key.down=(KEY_INPUT_DOWN);
key.right=(KEY_INPUT_RIGHT);
key.left=(KEY_INPUT_LEFT);
key.jump=(KEY_INPUT_UP);
key.pause=(KEY_INPUT_RETURN);
//CAMERA構造体
camera.x=0.0f;
camera.y=-5000.0f;
camera.z=-2000.0f;
//SCREEN構造体
screen.x=0.0f;
screen.y=0.0f;
screen.width=1024.0f;
screen.height=768.0f;
screen.center_x=(screen.x+screen.width)/2.0f;
screen.center_y=(screen.y+screen.height)/2.0f-250.0f;
//MENU構造体
menu.frame_1_x=32;
menu.frame_1_y=32;
menu.frame_1_graph=LoadGraph("data\\menu\\frame_1.bmp");
menu.frame_2_graph=LoadGraph("data\\menu\\frame_2.bmp");
menu.back=LoadGraph("data\\menu\\back.bmp");
menu.keyflag=0;
menu.selectsound=LoadSoundMem("data\\menu\\select.wav");
menu.chosesound=LoadSoundMem("data\\menu\\chose.wav");
int bright;
float jumppower;
jumppower=0.0f;
int moveflag;
moveflag=0;
int keyflag;
keyflag=0;
int battle_start_1;
battle_start_1=LoadGraph("data\\menu\\BATTLE_START_1.bmp");
int lose_x;
lose_x=0;
int lose_y;
lose_y=-768;
int lose;
lose=LoadGraph("data\\menu\\lose.bmp");
int black;
black=LoadGraph("data\\menu\\black.bmp");
int alpha;
alpha=0;
int counter_battle_start;
counter_battle_start=0;
int counter_bright;
counter_bright=0;
int counter_combo;
counter_combo=0;
while(!ProcessMessage()&&!ClearDrawScreen())
{
DrawGraph(0,0,menu.back,FALSE);
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_1_graph,TRUE);
if(menu.keyflag==0)
{
if(menu.frame_1_x==32&&CheckHitKey(key.right))
{
menu.frame_1_x=352;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
else if(menu.frame_1_x==352&&CheckHitKey(key.right))
{
menu.frame_1_x=672;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
else if(menu.frame_1_x==352&&CheckHitKey(key.left))
{
menu.frame_1_x=32;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
else if(menu.frame_1_x==672&&CheckHitKey(key.left))
{
menu.frame_1_x=352;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
if(menu.frame_1_x==32&&CheckHitKey(key.pause))
{
menu.frame_1_graph=menu.frame_2_graph;
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_2_graph,TRUE);
PlaySoundMem(menu.chosesound,DX_PLAYTYPE_NORMAL);
p1.model_normal=rb.model_normal;
p1.x=rb.x;
p1.y=rb.y;
p1.speed=rb.speed;
p1.height=rb.height;
p1.model_attack=rb.model_attack;
break;
}
if(menu.frame_1_x==352&&CheckHitKey(key.pause))
{
menu.frame_1_graph=menu.frame_2_graph;
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_2_graph,TRUE);
PlaySoundMem(menu.chosesound,DX_PLAYTYPE_NORMAL);
p1.model_normal=bc.model_normal;
p1.x=bc.x;
p1.y=bc.y;
p1.speed=bc.speed;
p1.height=bc.height;
p1.model_attack=bc.model_attack;
break;
}
if(menu.frame_1_x==672&&CheckHitKey(key.pause))
{
menu.frame_1_graph=menu.frame_2_graph;
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_2_graph,TRUE);
PlaySoundMem(menu.chosesound,DX_PLAYTYPE_NORMAL);
p1.model_normal=yp.model_normal;
p1.x=yp.x;
p1.y=yp.y;
p1.speed=yp.speed;
p1.height=yp.height;
p1.model_attack=yp.model_attack;
break;
}
if(CheckHitKey(KEY_INPUT_ESCAPE))
{
goto END;
}
}
if(CheckHitKeyAll()) menu.keyflag=1;
if(!CheckHitKeyAll()) menu.keyflag=0;
ScreenFlip();
}
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_2_graph,TRUE);
for(bright=255;bright>0;bright-=5)
{
ClearDrawScreen();
if(CheckHitKey(KEY_INPUT_ESCAPE)) break;
DrawGraph(0,0,menu.back,FALSE);
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_2_graph,TRUE);
SetDrawBright(bright,bright,bright);
ScreenFlip();
}
SetDrawBright(255,255,255);
enemy.model_normal=db.model_normal;
enemy.x=db.x;
enemy.y=db.y;
enemy.speed=db.speed;
enemy.width=db.width;
enemy.height=db.height;
enemy.model_attack=db.model_attack;
while(!ProcessMessage()&&!ClearDrawScreen()&&!CheckHitKey(key.pause))
{
counter_battle_start++;
if(counter_battle_start<300)
{
DrawGraph(0,0,battle_start_1,FALSE);
}
else
{
break;
}
if(CheckHitKey(KEY_INPUT_ESCAPE))
{
goto END;
}
ScreenFlip();
}
bright=255;
counter_battle_start=0;
PlaySoundMem(stage_1.BGM,DX_PLAYTYPE_LOOP);
while(!ProcessMessage()&&!ClearDrawScreen())
{
SetCameraPositionAndTargetAndUpVec(VGet(camera.x,camera.y,camera.z),VGet(stage_1.x,stage_1.y,0.0f),VGet(0.0f,1.0f,0.0f));
SetLightDirection(VGet(-1.0f,-10.0f,1.0f));
if(CheckHitKey(key.right)&&CheckHitKey(key.special))
{
counter_combo++;
}
if(CheckHitKey(key.right)&&moveflag==0)
{
p1.x+=p1.speed;
}
if(CheckHitKey(key.left)&&moveflag==0)
{
p1.x-=p1.speed;
}
p1.y+=jumppower;
jumppower-=1.0f;
if(p1.y==-5400.0f&&p1.x>-1100.0f&&p1.x<1100.0f)
{
p1.y=-5400.0f;
jumppower=0.0f;
}
if(CheckHitKey(key.jump))
{
if(moveflag==0)
{
if(p1.y==-5400.0f)
{
if(keyflag==0)
{
jumppower=25.0f;
}
}
keyflag=1;
}
}
else
{
keyflag=0;
}
DrawGraph(0,0,stage_1.back,FALSE);
//DrawFormatString(0,0,GetColor(255,0,0),"%g,%g",p1.x,p1.y);
MV1SetPosition(p1.model_normal,VGet(p1.x,p1.y,0.0f));
MV1DrawModel(p1.model_normal);
//MV1SetPosition(p1.model_attack,VGet(p1.x,p1.y,0.0f));
MV1SetPosition(enemy.model_normal,VGet(enemy.x,enemy.y,0.0f));
MV1DrawModel(enemy.model_normal);
MV1SetPosition(stage_1.model,VGet(stage_1.x,stage_1.y,0.0f));
MV1DrawModel(stage_1.model);
DrawGraph(lose_x,lose_y,lose,TRUE);
if(p1.y<=-8000.0f)
{
counter_bright++;
p1.x=-1100.0f;
p1.y=-8000.0f;
if(lose_y!=0)
{
lose_y+=6;
}
if(counter_bright>=300)
{
SetDrawBlendMode(DX_BLENDMODE_ALPHA,alpha);
DrawGraph(0,0,black,FALSE);
alpha++;
if(alpha>=255)
{
if(counter_bright>=600)
{
goto END;
}
}
}
}
if(CheckHitKey(key.special))
{
attack(p1.x,p1.y,p1.model_attack);
moveflag=1;
}
else
{
moveflag=0;
}
if(CheckHitKey(KEY_INPUT_ESCAPE))
{
goto END;
}
ScreenFlip();
}
END:
DxLib_End();
return 0;
}
A
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 止まります
えーと前になかったwhileループが増えているだけど?
while(!ProcessMessage()&&!ClearDrawScreen())
こんな事するとタイミング制御に失敗すると思いますよ。
普通は、
「34. メイン関数の書き方。」
http://dixq.net/g/37.html
と言うテクニックでwhileはひとつにします。
あとWinMain関数が長すぎるので関数分けを推奨します。
while(!ProcessMessage()&&!ClearDrawScreen())
こんな事するとタイミング制御に失敗すると思いますよ。
普通は、
「34. メイン関数の書き方。」
http://dixq.net/g/37.html
と言うテクニックでwhileはひとつにします。
あとWinMain関数が長すぎるので関数分けを推奨します。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 止まります
まずメニューとゲーム本編と最後のをswitchで処理を切り分けて、それぞれ関数にして呼び出します。
[追記]
whileループはWinMain側に残しますので、各関数にはwhileループもScreenFlipもProcessMessage()&&!ClearDrawScreenもありません。
[追記]
whileループはWinMain側に残しますので、各関数にはwhileループもScreenFlipもProcessMessage()&&!ClearDrawScreenもありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 止まります
すごい数の変数と同じ処理が・・。
DXライブラリにおける、必ず毎フレーム行わなければならない処理
ProcessMessage()
ClearDrawScreen()
ScreenFlip()
を3大プロセスと呼ぶことにしましょう。
この3大プロセスは、1か所にしか書かないよう、最初は努力して下さい。
同じ関数が2か所以上に出てきたらそれは設計が変です。
何か処理を終えたらループを抜けて下に行くのではなく、毎回メインループは同じところを回り、コールする先を変更するようにして下さい。
こちらにサンプルコードを書きましたのでご覧ください。
http://dixq.net/forum/viewtopic.php?f=3&t=9166#p74294
DXライブラリにおける、必ず毎フレーム行わなければならない処理
ProcessMessage()
ClearDrawScreen()
ScreenFlip()
を3大プロセスと呼ぶことにしましょう。
この3大プロセスは、1か所にしか書かないよう、最初は努力して下さい。
同じ関数が2か所以上に出てきたらそれは設計が変です。
何か処理を終えたらループを抜けて下に行くのではなく、毎回メインループは同じところを回り、コールする先を変更するようにして下さい。
こちらにサンプルコードを書きましたのでご覧ください。
http://dixq.net/forum/viewtopic.php?f=3&t=9166#p74294
Re: 止まります
すみません。
このように分けたのですが、おかしな事になってしまいました。
どうしたら良いのでしょうか?
このように分けたのですが、おかしな事になってしまいました。
#include <DxLib.h>
enum STATUS
{
STATUS_GAME_START,
STATUS_MENU,
STATUS_BATTLE_START_1,
STATUS_BATTLE_1,
STATUS_BATTLE_START_2,
STATUS_BATTLE_2,
STATUS_BATTLE_START_3,
STATUS_BATTLE_3,
STATUS_BATTLE_START_FINAL,
STATUS_BATTLE_FINAL,
STATUS_WIN,
STATUS_LOSE,
};
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}redball;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}bluecube;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}yellowpyramid;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkball;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkcube;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkpyramid;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkstar;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}p1_t;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}enemy_t;
typedef struct
{
int model;
float x;
float y;
float z;
int back;
int BGM;
}stage_1_t;
typedef struct
{
int attack;
int special;
int shield;
int grab;
int appeal;
int up;
int down;
int right;
int left;
int jump;
int pause;
}key_t;
typedef struct
{
float x;
float y;
float z;
}camera_t;
typedef struct
{
float x;
float y;
float width;
float height;
float center_x;
float center_y;
}screen_t;
typedef struct
{
int frame_1_x;
int frame_1_y;
int frame_1_graph;
int frame_2_x;
int frame_2_y;
int frame_2_graph;
int back;
int keyflag;
int selectsound;
int chosesound;
}menu_t;
STATUS Status=STATUS_MENU;
redball rb;
bluecube bc;
yellowpyramid yp;
darkball db;
darkcube dc;
darkpyramid dp;
darkstar ds;
p1_t p1;
enemy_t enemy;
stage_1_t stage_1;
key_t key;
camera_t camera;
screen_t screen;
menu_t menu;
int bright;
float jumppower;
int moveflag;
int keyflag;
int battle_start_1;
int lose_x;
int lose_y;
int lose;
int black;
int alpha;
int counter_battle_start;
int counter_bright;
int counter_combo;
int BGM_volume;
int attack(float attack_x,float attack_y,int attack_model)
{
MV1SetPosition(attack_model,VGet(attack_x,attack_y,0.0f));
MV1DrawModel(attack_model);
return 0;
}
int attack_side(float attack_side_x,float attack_side_y,int attack_side_model)
{
MV1SetPosition(attack_side_model,VGet(attack_side_x,attack_side_y,0.0f));
MV1DrawModel(attack_side_model);
return 0;
}
void MENU()
{
DrawGraph(0,0,menu.back,FALSE);
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_1_graph,TRUE);
if(menu.keyflag==0)
{
if(menu.frame_1_x==32&&CheckHitKey(key.right))
{
menu.frame_1_x=352;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
else if(menu.frame_1_x==352&&CheckHitKey(key.right))
{
menu.frame_1_x=672;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
else if(menu.frame_1_x==352&&CheckHitKey(key.left))
{
menu.frame_1_x=32;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
else if(menu.frame_1_x==672&&CheckHitKey(key.left))
{
menu.frame_1_x=352;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
if(menu.frame_1_x==32&&CheckHitKey(key.pause))
{
menu.frame_1_graph=menu.frame_2_graph;
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_2_graph,TRUE);
PlaySoundMem(menu.chosesound,DX_PLAYTYPE_NORMAL);
p1.model_normal=rb.model_normal;
p1.x=rb.x;
p1.y=rb.y;
p1.speed=rb.speed;
p1.height=rb.height;
p1.model_attack=rb.model_attack;
Status=STATUS_BATTLE_START_1;
for(bright=255;bright>0;bright-=5)
{
SetDrawBright(bright,bright,bright);
}
}
if(menu.frame_1_x==352&&CheckHitKey(key.pause))
{
menu.frame_1_graph=menu.frame_2_graph;
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_2_graph,TRUE);
PlaySoundMem(menu.chosesound,DX_PLAYTYPE_NORMAL);
p1.model_normal=bc.model_normal;
p1.x=bc.x;
p1.y=bc.y;
p1.speed=bc.speed;
p1.height=bc.height;
p1.model_attack=bc.model_attack;
Status=STATUS_BATTLE_START_1;
for(bright=255;bright>0;bright-=5)
{
SetDrawBright(bright,bright,bright);
}
}
if(menu.frame_1_x==672&&CheckHitKey(key.pause))
{
menu.frame_1_graph=menu.frame_2_graph;
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_2_graph,TRUE);
PlaySoundMem(menu.chosesound,DX_PLAYTYPE_NORMAL);
p1.model_normal=yp.model_normal;
p1.x=yp.x;
p1.y=yp.y;
p1.speed=yp.speed;
p1.height=yp.height;
p1.model_attack=yp.model_attack;
Status=STATUS_BATTLE_START_1;
for(bright=255;bright>0;bright-=5)
{
SetDrawBright(bright,bright,bright);
}
}
}
if(CheckHitKeyAll()) menu.keyflag=1;
if(!CheckHitKeyAll()) menu.keyflag=0;
}
void BATTLE_START_1()
{
counter_battle_start++;
if(counter_battle_start<300)
{
DrawGraph(0,0,battle_start_1,FALSE);
}
else
{
Status=STATUS_BATTLE_1;
}
}
void BATTLE_1()
{
ChangeVolumeSoundMem(BGM_volume,stage_1.BGM);
SetCameraPositionAndTargetAndUpVec(VGet(camera.x,camera.y,camera.z),VGet(stage_1.x,stage_1.y,0.0f),VGet(0.0f,1.0f,0.0f));
SetLightDirection(VGet(-1.0f,-10.0f,1.0f));
if(CheckHitKey(key.right)&&CheckHitKey(key.special))
{
counter_combo++;
}
if(CheckHitKey(key.right)&&moveflag==0)
{
p1.x+=p1.speed;
}
if(CheckHitKey(key.left)&&moveflag==0)
{
p1.x-=p1.speed;
}
p1.y+=jumppower;
jumppower-=1.0f;
if(p1.y==-5400.0f&&p1.x>-1100.0f&&p1.x<1100.0f)
{
p1.y=-5400.0f;
jumppower=0.0f;
}
if(CheckHitKey(key.jump))
{
if(moveflag==0)
{
if(p1.y==-5400.0f)
{
if(keyflag==0)
{
jumppower=25.0f;
}
}
keyflag=1;
}
}
else
{
keyflag=0;
}
DrawGraph(0,0,stage_1.back,FALSE);
//DrawFormatString(0,0,GetColor(255,0,0),"%g,%g",p1.x,p1.y);
MV1SetPosition(p1.model_normal,VGet(p1.x,p1.y,0.0f));
MV1DrawModel(p1.model_normal);
//MV1SetPosition(p1.model_attack,VGet(p1.x,p1.y,0.0f));
MV1SetPosition(enemy.model_normal,VGet(enemy.x,enemy.y,0.0f));
MV1DrawModel(enemy.model_normal);
MV1SetPosition(stage_1.model,VGet(stage_1.x,stage_1.y,0.0f));
MV1DrawModel(stage_1.model);
DrawGraph(lose_x,lose_y,lose,TRUE);
if(p1.y<=-8000.0f)
{
counter_bright++;
p1.x=-1100.0f;
p1.y=-8000.0f;
if(lose_y!=0)
{
lose_y+=6;
}
if(counter_bright>=300)
{
SetDrawBlendMode(DX_BLENDMODE_ALPHA,alpha);
DrawGraph(0,0,black,FALSE);
alpha++;
BGM_volume--;
if(alpha>=255)
{
if(counter_bright>=600)
{
Status=STATUS_LOSE;
}
}
}
}
if(CheckHitKey(key.special))
{
attack(p1.x,p1.y,p1.model_attack);
moveflag=1;
}
else
{
moveflag=0;
}
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
SetGraphMode(1024,768,16);
SetWindowIconID(100);
SetMainWindowText("SolidFighters");
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1) return -1;
SetDrawScreen(DX_SCREEN_BACK);
//REDBALL構造体
rb.model_normal=MV1LoadModel("data\\characters\\redball\\redball.mqo");
rb.x=-500.0f;
rb.y=-5400.0f;
rb.speed=25.0f;
rb.width=200.0f;
rb.height=200.0f;
rb.model_attack=MV1LoadModel("data\\characters\\redball\\redball_attack.mqo");
MV1SetPosition(rb.model_attack,VGet(rb.x,rb.y,0.0f));
//BLUECUBE構造体
bc.model_normal=MV1LoadModel("data\\characters\\bluecube\\bluecube.mqo");
bc.x=-500.0f;
bc.y=-5400.0f;
bc.speed=10.0f;
bc.width=200.0f;
bc.height=200.0f;
bc.model_attack=MV1LoadModel("data\\characters\\bluecube\\bluecube_attack.mqo");
MV1SetPosition(bc.model_attack,VGet(bc.x,bc.y,0.0f));
//YELLOWPYRAMID構造体
yp.model_normal=MV1LoadModel("data\\characters\\yellowpyramid\\yellowpyramid.mqo");
yp.x=-500.0f;
yp.y=-5400.0f;
yp.speed=50.0f;
yp.width=200.0f;
yp.height=200.0f;
yp.model_attack=MV1LoadModel("data\\characters\\yellowpyramid\\yellowpyramid_attack.mqo");
MV1SetPosition(yp.model_attack,VGet(yp.x,yp.y,0.0f));
//DARKBALL構造体
db.model_normal=MV1LoadModel("data\\characters\\darkball\\darkball.mqo");
db.x=500.0f;
db.y=-5400.0f;
db.speed=50.0f;
db.width=200.0f;
db.height=200.0f;
db.model_attack=MV1LoadModel("data\\characters\\darkball\\darkball_attack.mqo");
MV1SetPosition(db.model_attack,VGet(db.x,db.y,0.0f));
//DARKCUBE構造体
dc.model_normal=MV1LoadModel("data\\characters\\darkcube\\darkcube.mqo");
dc.x=500.0f;
dc.y=-5400.0f;
dc.speed=50.0f;
dc.width=200.0f;
dc.height=200.0f;
dc.model_attack=MV1LoadModel("data\\characters\\darkcube\\darkcube_attack.mqo");
MV1SetPosition(dc.model_attack,VGet(dc.x,dc.y,0.0f));
//DARKPYRAMID構造体
dp.model_normal=MV1LoadModel("data\\characters\\darkpyramid\\darkpyramid.mqo");
dp.x=500.0f;
dp.y=-5400.0f;
dp.speed=50.0f;
dp.width=200.0f;
dp.height=200.0f;
dp.model_attack=MV1LoadModel("data\\characters\\darkpyramid\\darkpyramid_attack.mqo");
MV1SetPosition(dp.model_attack,VGet(dp.x,dp.y,0.0f));
//DARKSTAR構造体
ds.model_normal=MV1LoadModel("data\\characters\\darkstar\\darkstar.mqo");
ds.x=500.0f;
ds.y=-5400.0f;
ds.speed=50.0f;
ds.width=200.0f;
ds.height=200.0f;
ds.model_attack=MV1LoadModel("data\\characters\\darkstar\\darkpyramid_star.mqo");
MV1SetPosition(ds.model_attack,VGet(ds.x,ds.y,0.0f));
//STAGE_1構造体
stage_1.model=MV1LoadModel("data\\stages\\stage_1\\stage_1.mqo");
stage_1.x=0.0f;
stage_1.y=-5500.0f;
stage_1.back=LoadGraph("data\\stages\\stage_1\\stage_1_back.png",TRUE);
stage_1.BGM=LoadSoundMem("data\\stages\\stage_1\\stage_1.mp3");
//KEY構造体
key.attack=(KEY_INPUT_Z);
key.special=(KEY_INPUT_X);
key.shield=(KEY_INPUT_C);
key.grab=(KEY_INPUT_D);
key.appeal=(KEY_INPUT_S);
key.up=(KEY_INPUT_UP);
key.down=(KEY_INPUT_DOWN);
key.right=(KEY_INPUT_RIGHT);
key.left=(KEY_INPUT_LEFT);
key.jump=(KEY_INPUT_UP);
key.pause=(KEY_INPUT_RETURN);
//CAMERA構造体
camera.x=0.0f;
camera.y=-5000.0f;
camera.z=-2000.0f;
//SCREEN構造体
screen.x=0.0f;
screen.y=0.0f;
screen.width=1024.0f;
screen.height=768.0f;
screen.center_x=(screen.x+screen.width)/2.0f;
screen.center_y=(screen.y+screen.height)/2.0f-250.0f;
//MENU構造体
menu.frame_1_x=32;
menu.frame_1_y=32;
menu.frame_1_graph=LoadGraph("data\\menu\\frame_1.bmp");
menu.frame_2_graph=LoadGraph("data\\menu\\frame_2.bmp");
menu.back=LoadGraph("data\\menu\\back.bmp");
menu.keyflag=0;
menu.selectsound=LoadSoundMem("data\\menu\\select.wav");
menu.chosesound=LoadSoundMem("data\\menu\\chose.wav");
bright=255;
jumppower=0.0f;
moveflag=0;
keyflag=0;
battle_start_1=LoadGraph("data\\menu\\BATTLE_START_1.bmp");
lose_x=0;
lose_y=-768;
lose=LoadGraph("data\\menu\\lose.bmp");
black=LoadGraph("data\\menu\\black.bmp");
alpha=0;
counter_battle_start=0;
counter_bright=0;
counter_combo=0;
BGM_volume=255;
while(!ProcessMessage()&&!ScreenFlip()&&!ClearDrawScreen()&&!CheckHitKey(KEY_INPUT_ESCAPE))
{
switch(Status)
{
case STATUS_MENU:
MENU();
case STATUS_BATTLE_START_1:
BATTLE_START_1();
case STATUS_BATTLE_1:
BATTLE_1();
case STATUS_LOSE:
break;
}
}
DxLib_End();
return 0;
}
A
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 止まります
とりあえずswitch文の変なところ(break抜け)を修正しました。
それでも変なので、上の修正を入れた上で現状の問題点を詳しくもう一度説明してください。
あと、前回よりデータ増えてません?
最新のデータを頂きたいです。
[追記]
あと、問題の処理が何処かわからないので関係する部分にだけでもコメントをお願いします。
while(!ProcessMessage()&&!ClearDrawScreen()&&!CheckHitKey(KEY_INPUT_ESCAPE))
{
switch(Status)
{
case STATUS_MENU:
MENU();
break;
case STATUS_BATTLE_START_1:
BATTLE_START_1();
break;
case STATUS_BATTLE_1:
BATTLE_1();
break;
case STATUS_LOSE:
break;
}
ScreenFlip();
}
あと、前回よりデータ増えてません?
と出るので、こちらでは問題点を確認できません。1167:モデルファイル data\characters\bluecube\bluecube_attack.mqo が読み込めませんでした
1174:モデルファイル data\characters\yellowpyramid\yellowpyramid_attack.mqo が読み込めませんでした
1178:モデルファイル data\characters\darkball\darkball.mqo が読み込めませんでした
1182:モデルファイル data\characters\darkball\darkball_attack.mqo が読み込めませんでした
1186:モデルファイル data\characters\darkcube\darkcube.mqo が読み込めませんでした
1190:モデルファイル data\characters\darkcube\darkcube_attack.mqo が読み込めませんでした
1194:モデルファイル data\characters\darkpyramid\darkpyramid.mqo が読み込めませんでした
1199:モデルファイル data\characters\darkpyramid\darkpyramid_attack.mqo が読み込めませんでした
1202:モデルファイル data\characters\darkstar\darkstar.mqo が読み込めませんでした
1206:モデルファイル data\characters\darkstar\darkpyramid_star.mqo が読み込めませんでした
1265:右記のファイルのオープンに失敗しました:data\stages\stage_1\stage_1.mp3
1268:右記の音声ファイルのロードに失敗しました_1:data\stages\stage_1\stage_1.mp3
1307:グラフィックファイル data\menu\BATTLE_START_1.bmp がありません
1312:グラフィックファイル data\menu\lose.bmp がありません
1316:グラフィックファイル data\menu\black.bmp がありません
最新のデータを頂きたいです。
[追記]
あと、問題の処理が何処かわからないので関係する部分にだけでもコメントをお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 止まります
boxさんも言ってますが、重複している要素が多すぎる気がします。
用意している構造体や変数、処理等は本当に全部必要ですか?
例えば
redball;
bluecube;
yellowpyramid;
darkball;
darkcube;
darkpyramid;
darkstar;
p1_t;
enemy_t;
は全て要素が同じなので一つで良いですよね。
値の代入も、全く同じことをするならループで回さないと間違いの元だし、手間もかかると思います。
CheckHitKey系があちこちにありますが、1ループに1度全てのキーの入力状態を保存しておけばいちいちこの関数をコールする必要はないです。
計算部と描画部は明確にわけておかないと描画順序等をソートしたくなっても出来なくなってしまうと思います。
ということで、非効率なコードのままコードが肥大化しているようなので、もう少し単純なコードでスマートに書けるようにしてみませんか?
用意している構造体や変数、処理等は本当に全部必要ですか?
例えば
redball;
bluecube;
yellowpyramid;
darkball;
darkcube;
darkpyramid;
darkstar;
p1_t;
enemy_t;
は全て要素が同じなので一つで良いですよね。
値の代入も、全く同じことをするならループで回さないと間違いの元だし、手間もかかると思います。
CheckHitKey系があちこちにありますが、1ループに1度全てのキーの入力状態を保存しておけばいちいちこの関数をコールする必要はないです。
計算部と描画部は明確にわけておかないと描画順序等をソートしたくなっても出来なくなってしまうと思います。
ということで、非効率なコードのままコードが肥大化しているようなので、もう少し単純なコードでスマートに書けるようにしてみませんか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 止まります
現状で確認出来るのは、最初選択画面を選ぶと黒い画面が表示されること(STATUS_BATTLE_START_1の状態)でしょうか?
[追記]
これは、MENUの終りにSetDrawBright(5,5,5);が実行されているのが原因です。
関数を抜けるときにはSetDrawBright(255,255,255);に戻しておきましょう。
あと、フェードアウトのつもりみたいですが、 1フレーム内で255→5まで変化しています。
フレームごとに処理しないと意味がありませんよ。
[追記の追記]
Dixq (管理人)さんも言われているように全体を整理しないと他者がソースコードを読み解くことがかなり困難な状態になっています。
ご自分のためにも整理される事をお勧めします。
[追記]
これは、MENUの終りにSetDrawBright(5,5,5);が実行されているのが原因です。
関数を抜けるときにはSetDrawBright(255,255,255);に戻しておきましょう。
あと、フェードアウトのつもりみたいですが、 1フレーム内で255→5まで変化しています。
フレームごとに処理しないと意味がありませんよ。
[追記の追記]
Dixq (管理人)さんも言われているように全体を整理しないと他者がソースコードを読み解くことがかなり困難な状態になっています。
ご自分のためにも整理される事をお勧めします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。