東方紅魔郷っぽいタイトル画像の移動について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
鈴仙優曇華院イナバ

東方紅魔郷っぽいタイトル画像の移動について

#1

投稿記事 by 鈴仙優曇華院イナバ » 16年前

タイトルの画像「12345」を分割して読み込んで、その画像をある位置からある位置まで移動させて停滞させる(東方紅魔郷のタイトル画像の動きを見て頂くとわかると思います)を再現したいと思い、プログラムを
組んでみましたが、エラーはなしでしたが、実行しても画面が真っ暗なままでした。

1を座標(-30,50)→(200,50)
2を座標(680,130)→(200,130)
3を座標(-30,210)→(120,210)
4を座標(680,290)→(120,290)
5を座標(-30,370)→(120,370)
汚いですがどんな感じかの画像も添付しました。
void mozi_calc(){
	int j,ix,iy;
		for(j=0;j<5;j++){
			if(titlemove[j].flag==0){
				if(j=0){
					ix=-30;
					iy=50;
				}
				if(j=1){
					ix=680;
					iy=130;
				}
				if(j=2){
					ix=-30;
					iy=320;
				}
				if(j=3){
					ix=680;
					iy=290;
				}
				if(j=4){
					ix=-30;
					iy=370;
				}
				titlemove[j].flag=1;
				titlemove[j].x=ix;
				titlemove[j].y=iy;
				break;
			}
		}

	for(j=0;j<5;j++){
		if(titlemove[j].flag==1){
			if(j=0){
				titlemove[j].x+=7;
				if(titlemove[j].x>=200){
					titlemove[j].x=200;
				}
			}

			if(j=1){
				titlemove[j].x-=10;
				if(titlemove[j].x<=200){
					titlemove[j].x=200;

				}
			}
			if(j=2){
				titlemove[j].x+=7;
				if(titlemove[j].x>=120){
					titlemove[j].x=120;
				}
			}
			if(j=3){
				titlemove[j].x-=10;
				if(titlemove[j].x<=120){
					titlemove[j].x=120;
				}
			}
			if(j=4){
				titlemove[j].x+=7;
				if(titlemove[j].x>=120){
					titlemove[j].x=120;
				}
			}
			titlemove[j].flag=0;
		}
	}


}
void mozi_move(){
	int i;
	for(i=0;i<5;i++){
		if(titlemove.flag==1)
			DrawGraph(titlemove.x,titlemove.y,title_m,TRUE);
	}
}

WinMain内にこの2つの関数を放り込んでいます。

プログラムはhttp://dixq.net/s/8.html
を参考にしています。

titlemove[/url]は
typedef struct{
int flag;
double x,y;
}title_t;
という構造体で宣言しています。

title_mはload()で
LoadDivGraph("img/title0.png",5,5,1,82,90,title_m);で読み込んでいます。

どうかよろしくお願いいたします。

mnkr

Re:東方紅魔郷っぽいタイトル画像の移動について

#2

投稿記事 by mnkr » 16年前

あまり詳しくないですが、
最初のforで画像の初期位置をセット、
次のforで画像を動かす処理だと思いますが、
2つ目のforで移動したあと、処理を一巡させてまたmozi_calcを読み込んで
1つ目のforに戻ってきたときに、
位置が初期化されるから画像が表示しない、のかな。。。

最後のほうにある
titlemove[j].flag=0;
の一文を削除したら動くような気がします。
間違っていたらゴメンナサイ

Mato

Re:東方紅魔郷っぽいタイトル画像の移動について

#3

投稿記事 by Mato » 16年前

とりあえず、
if(j=0)
というのが気になりました。
うどんげさんの意図は
if(j==0)
かと思われましたが、勘違いでしたらごめんなさい。。。

鈴仙優曇華院イナバ

Re:東方紅魔郷っぽいタイトル画像の移動について

#4

投稿記事 by 鈴仙優曇華院イナバ » 16年前

mnkrさん
なるほど!そうでした。初期化が何回も繰り返されていたようです。。
フラグを使って、1回目初期化したら後は、フラグに1代入して
以後初期化処理を行わないようにしました。
あと、titlemove[j].flag=0も消してみると表示されました。
ありがとうございます!

Matoさん
ああ…初歩的なミスをしてしまいました…
お恥ずかしい…
ありがとうございます!

お二人方の意見を参考にコードを修正しました。
画像は表示されましたが、動かないという状況になってしまいました。
東方紅魔郷風に動かす以前の問題になっちゃいました…
void mozi_calc(){
	int j,ix,iy,f=0;
	if(f==0){
		for(j=0;j<5;j++){
			if(titlemove[j].flag==0){
				if(j==0){
					ix=-30;
					iy=50;
				}
				if(j==1){
					ix=680;
					iy=130;
				}
				if(j==2){
					ix=-30;
					iy=320;
				}
				if(j==3){
					ix=680;
					iy=290;
				}
				if(j==4){
					ix=-30;
					iy=370;
				}
				titlemove[j].flag=1;
				titlemove[j].x=ix;
				titlemove[j].y=iy;
				break;
			}
		}
		f=1;
	}

	for(j=0;j<5;j++){
		if(titlemove[j].flag==1){
			if(j==0){
				while(titlemove[j].x<=200)
					titlemove[j].x+=1;
			}
			if(j==1){
				while(titlemove[j].x>=200)
					titlemove[j].x-=1;
			}
			if(j==2){
				while(titlemove[j].x<=120)
					titlemove[j].x+=1;
			}
			if(j==3){
				while(titlemove[j].x>=120)
				titlemove[j].x-=1;
			}
			if(j==4){
				while(titlemove[j].x>=120)
				titlemove[j].x+=1;
			}
		}
	}
}

conio

Re:東方紅魔郷っぽいタイトル画像の移動について

#5

投稿記事 by conio » 16年前

>>タイトルの画像「12345」を分割して読み込んで、その画像をある位置からある位置まで移動させて停滞させる
こんな感じでしょうか?
(画像は使っていませんが)
-----------------------------------------------------------------------------------------
#include "DxLib.h"

int Key[256];
int GetHitKeyStateAll_2(int KeyStateBuf[/url]){
        char GetHitKeyStateAll_Key[256];
        GetHitKeyStateAll( GetHitKeyStateAll_Key );
        for(int i=0;i<256;i++){
                if(GetHitKeyStateAll_Key==1) KeyStateBuf++;
                else                            KeyStateBuf=0;
        }
        return 0;
} 

typedef struct{
	int x;
	int y;
	char* c;
}MY_POINT;

const MY_POINT TitleLogo[5] = { {300,100, "【1】"},
			    {300,120, "【2】"},
			    {300,140, "【3】"},
			    {300,160, "【4】"},
			    {300,180, "【5】"}
			  };

void DrawTitleGraphics(void)
{
	int White = GetColor( 255, 255, 255 );
	static int dif = 50;

	for(int i = 0, count = sizeof(TitleLogo) / sizeof(TitleLogo[0]); i < count; i++){
		if(i % 2 == 0)
			DrawString( TitleLogo.x - dif, TitleLogo.y, TitleLogo.c, White);
		else
			DrawString( TitleLogo.x + dif, TitleLogo.y, TitleLogo.c, White);
	}
	if(dif > 0){
		--dif;
	}
}


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

	if(DxLib_Init() == -1 ) return -1;
	SetDrawScreen( DX_SCREEN_BACK );

	while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0 ){

		DrawTitleGraphics();
		ScreenFlip();
	}
	DxLib_End();
	return 0;
}
-----------------------------------------------------------------------------------------

鈴仙優曇華院イナバ

Re:東方紅魔郷っぽいタイトル画像の移動について

#6

投稿記事 by 鈴仙優曇華院イナバ » 16年前

conioさん
無事思い通りの描画ができました!
本当にありがとうございます!

閉鎖

“C言語何でも質問掲示板” へ戻る