敵キャラを表示して、ランダムに動かしたいのですが、画像の読み込みはできているんですが、表示がされず
勿論キャラも動くことはありません。
どのようにすれば、動くようになるでしょうか?
このように組んで、実行しても、敵はでてきませんでした
敵キャラについて
Re: 敵キャラについて
変数名の相違と全角記号の混入が見受けられます。
コンパイルが通っておらず、古いプログラムを実行しているのではないですか?
また、tekihandlとtekihandleが同一の変数であると仮定しても、
tekihandleに代入していないので画像は描画されないと思います。
tekihandleに別の場所で画像を読み込んでハンドルを代入していると仮定した場合、
その画像は透明またはアルファチャンネル無しの黒色ではないですか?
それはどのように確認しましたか?たいおう さんが書きました:画像の読み込みはできているんですが
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 敵キャラについて
みけCATさん、こちらになっております
#include "DxLib.h"
int muki=3,a_flag=0,i,j;
int px=0,py=420;
int y_tmp=32,y_prev=0;
bool p_flag=false;
char Key[256];
float speed=1.0f;
int mode=0;
int h_color=(255,0,0),st=(255,255,222);
int color=GetColor(255,255,255);
int haikei,haikei1,player[16],Handle;
int stage_haikei,sh_x=0,stage_haikei2,sh2_x=0;
int count=0;
int t_moji;
int goki,ex=GetRand(3),ey=GetRand(3); //敵用変数
int hantei[640][480]={
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
{ 0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0 },
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};
int IsAbleToGo(int x,int y,int muki){ //進めるかどうかの判定
if(muki==1)
if(hantei[py/32][px/32-1]==1)
return 1;
if(muki==2)
if(hantei[py/32-1][px/32]==1)
return 1;
if(muki==3)
if(hantei[py/32][px/32+1]==1)
return 1;
if(muki==4)
if(hantei[py/32+1][px/32]==1){
return 1;
}
return 0;
}
/*
int IsAbleToGo(int x,int y,int gmuki){ //進めるかどうかの判定
if(gmuki==1)
if(hantei[ey/32][ex/32-1]==1)
return 1;
if(gmuki==2)
if(hantei[ey/32-1][ex/32]==1)
return 1;
if(gmuki==3)
if(hantei[ey/32][ex/32+1]==1)
return 1;
if(gmuki==4)
if(hantei[ey/32+1][ex/32]==1){
return 1;
}
return 0;
}
*/
void gameover(){
ClearDrawScreen();
DrawGraph(0,0,haikei1,FALSE);
DrawString(132,123,"gameover",GetColor(255,54,32),TRUE);
}
void title(){
DrawGraph(0,0,haikei,FALSE);
count=(count+1)%30;
if( count < 2 ) {
WaitTimer(200);
DrawGraph(240,320,t_moji,FALSE);
}
if(Key[KEY_INPUT_G]==1) mode = 1;
}
void setumei(){
ClearDrawScreen();
DrawString(320,230,"↑",st);
DrawString(310,240,"←",st);
DrawString(330,240,"→",st);
DrawString(305,200,"ジャンプ",st);
DrawString(250,240,"左移動",st);
DrawString(360,240,"右移動",st);
if(Key[KEY_INPUT_G]==1) mode=1;
if(Key[KEY_INPUT_M]==1) mode=0;
}
void kabe(){
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(hantei[i][j]==1) //i,jで1がたっているところは
DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,color,TRUE); //jが1なら32、iが1なら32かける(ブロック1つを表示させる)、右のブロックにも32かける、したのブロックにも32かける
}
void pmove(){
if(Key[KEY_INPUT_LEFT]==1||Key[KEY_INPUT_RIGHT]==1){
if(Key[KEY_INPUT_UP]==1|| Key[KEY_INPUT_DOWN]==1){
speed=0.71f;
}else{
speed=1.0f;
}
}else if(Key[KEY_INPUT_UP]==1||Key[KEY_INPUT_DOWN]==1){
speed=0.7f;
}
if(Key[KEY_INPUT_LEFT]==1){
muki=1;
if(IsAbleToGo(px,py,muki)==1){
sh_x-=0;
px+=0;
}else {
sh_x+=(int)4*speed;
px-=(int)4*speed;
}
}
if(Key[KEY_INPUT_RIGHT]==1){
muki=3;
if(IsAbleToGo(px,py,muki)==1){
sh_x-=0;
px+=0;
} else {
sh_x-=(int)4*speed;
px+=(int)4*speed;
}
}
if(Key[KEY_INPUT_UP]==1 && !p_flag){ //ジャンプしていないときにスペースを押すと
muki=2;
p_flag=true; //ジャンプフラグを立ててから
y_prev=py; //現在のpを保存させて
py=py-20; //今の場所から20引いたのを、pyに代入
if(IsAbleToGo(px,py,muki)==1){
y_tmp=py; //pyを保存し
py+=(py-y_prev)+1; //ジャンプする前の値をpyから引いて、1足したのをpyに足す
y_prev=y_tmp;
}
}
if(p_flag==true){
muki=4;
y_tmp=py; //pyを保存し
py+=(py-y_prev)+1; //ジャンプする前の値をpyから引いて、1足したのをpyに足す
y_prev=y_tmp;
if(IsAbleToGo(px,py,muki)==1){
p_flag=false;
}
}
if(px>=640-32){
px=640-32;
}else if(px<=0){
px=0;
}
DrawGraph(sh_x,0,stage_haikei,TRUE);
DrawString(0,0,"M:メニュー画面",GetColor(255,0,0));
Handle=player[(sh_x%32+py%32)/8+muki*4];
DrawGraph(px,py,Handle,TRUE);
DrawGraph(ex,ey,goki,TRUE);
if(Key[KEY_INPUT_M]==1){
mode=0;
}
if(Key[KEY_INPUT_S]==1){
setumei();
}
if(sh_x<=-3200+32){
sh_x=-3200+32;
}else if(sh_x>=0){
sh_x=0;
}
if(sh_x<=-3200+32&&px>=640-32){
mode=2;
}
if(mode==2){
px=0;
py=420;
}
}
void enemy(){ //これが敵表示させるための処理
DrawGraph(ex,ey,goki,TRUE);
}
void stage(){
enemy();
pmove();
kabe();
}
void stage2(){
if(Key[KEY_INPUT_LEFT]==1||Key[KEY_INPUT_RIGHT]==1){
if(Key[KEY_INPUT_UP]==1|| Key[KEY_INPUT_DOWN]==1){
speed=0.71f;
}else{
speed=1.0f;
}
}else if(Key[KEY_INPUT_UP]==1||Key[KEY_INPUT_DOWN]==1){
speed=0.7f;
}
if(Key[KEY_INPUT_LEFT]==1){
muki=1;
if(IsAbleToGo(px,py,muki)==1){
// sh2_x-=0;
px+=0;
}else {
//sh2_x+=(int)4*speed;
px-=(int)4*speed;
}
}
if(Key[KEY_INPUT_RIGHT]==1){
muki=3;
if(IsAbleToGo(px,py,muki)==1){
// sh2_x-=0;
px+=0;
} else {
// sh2_x-=(int)4*speed;
px+=(int)4*speed;
}
}
if(Key[KEY_INPUT_UP]==1 && !p_flag){ //ジャンプしていないときにスペースを押すと
muki=2;
p_flag=true; //ジャンプフラグを立ててから
y_prev=py; //現在のpを保存させて
py=py-20; //今の場所から20引いたのを、pyに代入
if(IsAbleToGo(px,py,muki)==1){
y_tmp=py; //pyを保存し
py+=(py-y_prev)+1; //ジャンプする前の値をpyから引いて、1足したのをpyに足す
y_prev=y_tmp;
}
}
if(p_flag==true){
muki=4;
y_tmp=py; //pyを保存し
py+=(py-y_prev)+1; //ジャンプする前の値をpyから引いて、1足したのをpyに足す
y_prev=y_tmp;
if(IsAbleToGo(px,py,muki)==1){
p_flag=false;
}
}
if(px>=640-32){
px=640-32;
}else if(px<=0){
px=0;
}
DrawGraph(0,0,stage_haikei2,TRUE);
DrawString(0,0,"M:メニュー画面",GetColor(255,0,0));
Handle=player[(sh2_x%32+py%32)/8+muki*4];
DrawGraph(px,py,Handle,TRUE);
if(Key[KEY_INPUT_M]==1){
mode=0;
}
if(Key[KEY_INPUT_S]==1){
setumei();
}
/* if(sh2_x<=-3200+32){
sh2_x=-3200+32;
}else if(sh2_x>=0){
sh2_x=0;
}*/
//if(sh_x<=-3200+32&&px>=640-32){
//}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);
if( DxLib_Init() == -1 ){
return -1;
}
LoadDivGraph("アクション画像/キャラクタ10.png",16,4,4,32,32,player);
haikei=LoadGraph("アクション画像/メニュー背景.png");
stage_haikei=LoadGraph("アクション画像/ゲーム背景.png");
t_moji=LoadGraph("アクション画像/teki.png");
goki=LoadGraph("アクション画像/床.png"); //敵読み込み処理
stage_haikei2=LoadGraph("アクション画像/背景2.png");
SetDrawScreen( DX_SCREEN_BACK );
while(1){
ClearDrawScreen();
GetHitKeyStateAll(Key);
switch(mode){
case 0:
title();
break;
case 1:
stage();
break;
case 2:
stage2();
break;
default:
DxLib_End();
return 0;
break;
}
if(Key[KEY_INPUT_ESCAPE]==1){
break;
}
if(ProcessMessage()==-1){
break;
}
ScreenFlip();
}
DxLib_End();
return 0;
}
Re: 敵キャラについて
とりあえずコンパイルして実行してみたのですが、
プレイヤーの位置にメニュー背景の画像がちらつく、
プレイヤーの動ける場所と画面の白い部分の関係がよくわからない(無い?)、
メインループの最初以外でClearDrawScreen()が呼び出されている、
WaitTimer関数が使用されている、
などの不自然な点が見受けられました。
また、肝心の
プレイヤーの位置にメニュー背景の画像がちらつく、
プレイヤーの動ける場所と画面の白い部分の関係がよくわからない(無い?)、
メインループの最初以外でClearDrawScreen()が呼び出されている、
WaitTimer関数が使用されている、
などの不自然な点が見受けられました。
また、肝心の
に相当しそうなコードが見当たりませんでした。
- 添付ファイル
-
- tekikyara_hyouzisarenai_rev1.zip
- ソースコード、バイナリ、仮画像
- (1.89 MiB) ダウンロード数: 90 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 敵キャラについて
すみません。具体的に何行目か教えていただけますか?たいおう さんが書きました:書いていますよ?
一応コメント文で注釈は入れたつもりなんですが
わかりずらかったらすみません
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 敵キャラについて
画像読み込みができたことをどのように確認していますか?
画像が表示されていないのになぜ動いていないことが分かるのでしょうか?
表示されていないだけで動いているかもしれませんよね?
どこまでは出来ていて、どこからが出来ないのかはっきりするべきだと思います。
ソース斜め読みの状態ですが、気づいた点を。
コメントを信じますと、画像読み込みで床を読み込んでいますが、これは大丈夫ですか?
goki=LoadGraph("アクション画像/床.png"); //敵読み込み処理
また、ランダムに動かしたいとの事ですが、敵用変数の ex、eyは最初の宣言以降変化していません。
初期表示位置はランダムになると思いますが、動きはないと思います。
また、ex、eyは0~3の変化しかありません。ランダムではありますが、見た目にはほとんど見分けが付かないと思います。
画像が表示されていないのになぜ動いていないことが分かるのでしょうか?
表示されていないだけで動いているかもしれませんよね?
どこまでは出来ていて、どこからが出来ないのかはっきりするべきだと思います。
ソース斜め読みの状態ですが、気づいた点を。
コメントを信じますと、画像読み込みで床を読み込んでいますが、これは大丈夫ですか?
goki=LoadGraph("アクション画像/床.png"); //敵読み込み処理
また、ランダムに動かしたいとの事ですが、敵用変数の ex、eyは最初の宣言以降変化していません。
初期表示位置はランダムになると思いますが、動きはないと思います。
また、ex、eyは0~3の変化しかありません。ランダムではありますが、見た目にはほとんど見分けが付かないと思います。
ソースコードを検索しましたが、質問時の書き込みにあった teki_x、tekihandl、tekihandle という変数が存在しません。 以下が該当するのではないかと思いますが、回答を求めているのであればしっかり説明を加えましょう。たいおう さんが書きました:書いていますよ?
一応コメント文で注釈は入れたつもりなんですが
わかりずらかったらすみません