ページ 11

定義したマップのスクロール

Posted: 2015年10月30日(金) 21:15
by samusu0905
マップをスクロールさせたいんですが、
方法がわかりません。
教えてもらえないでしょうか?
具体的にはプレイヤーが中央を過ぎたらスクロールさせたいと思ってます。
マップデータなどのコードを載せておきます。

コード:

#include "DxLib.h"				//DXLib
#include "Player.h"				//プレイヤー
#include "Stage.h"				//ステージ
#include "Def.h"				//共通定義

//マップデータ//
	int MapData[MAP_HEIGHT * MAP_WIDTH]={

	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, 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, 2, 0, 2, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 2, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 0, 2, 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, 2, 0, 2, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 2, 2, 0, 2, 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, 2, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 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, 2, 0, 0, 2, 0, 0, 2, 0, 0, 0,  0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 2, 0, 0, 2, 0, 0, 2, 0, 0, 2, 0, 0, 0,  0, 2, 0, 0, 2, 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, 1, 1, 0, 0, 2, 0, 0, 2, 0, 0, 2, 1, 1, 1, 0, 0, 0,  0, 2, 0, 0, 2, 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, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0,  0, 0, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 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, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 0, 0, 0,  0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 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, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 2, 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, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0,  0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 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, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,  0, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 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, 2, 0, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0,  0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 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, 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,
	};


//ステージテーブル
StageData_t StageDataSelect[1] ={
	{MapData, MAP_WIDTH, MAP_HEIGHT},	//マップ
};

//マップ配列参照用
StageData_t StageData;


//グローバル変数宣言------------------------
int fx= -1130, fy=-800;						//フラッシュ
int i,j;									//座標用


//グローバル変数参照------------------------
extern int floor;					//ステージ
extern int SceneMode;			//シーンモード
extern int Key_Input[256];		//キーが押されているフレームを格納する
extern int kabe1;				//壁1
extern int kabe2;				//壁2
extern char Key[256];
extern int rousoku1;			//ロウソク1
extern int rousoku2;			//ロウソク2
extern PLAYER Player;			//プレイヤーの構造体
extern int os_BGM;				//ステージBGM
extern int t_BGM;				//タイトルBGM
extern int flash;				//フラッシュ


//初期化-------------------------------------------------------
void gsStart()
{
	//マップ配列参照用のデータと初期化
	StageData = StageDataSelect[0];
	gpStart();
}


//メイン-------------------------------------------------------
void gsMain()
{
	//Enterキーを押下したら
	if( Key_Input[KEY_INPUT_SPACE] >= 1 )
	{
		SceneMode = 1;				//タイトルに移行
		StopSoundMem(os_BGM);		//ステージBGMを停止
		//タイトルに移行したら
		if( SceneMode == 1)
		{
			PlaySoundMem(t_BGM, DX_PLAYTYPE_LOOP);	//再びタイトルBGMをループ再生
		}
	}
	gpMain();		//プレイヤーのメイン処理
	gsMove();
}


//描画----------------------------------------------------------
void gsDraw()
{
	//ステージのマップ表示
	if( StageData.stage == MapData)
	{
		//SetDrawBright(0,0,0);
		//縦
		for( i=0; i < MAP_HEIGHT; i++)
		{
			//横
			for( j = 0; j < MAP_WIDTH; j++)
			{
				if( STAGE_CHIP(i,j) == 0)	//0のとき床を表示
				{
					DrawGraph(CHIP_SIZE*j, CHIP_SIZE*i, floor, TRUE);
				}

				if( STAGE_CHIP(i,j) == 1)	//1のとき壁1を表示
				{
					DrawGraph(CHIP_SIZE*j, CHIP_SIZE*i, kabe1,TRUE);
				}

				if( STAGE_CHIP(i,j) == 2)	//2のとき壁2を表示
				{
					DrawGraph( CHIP_SIZE*j, CHIP_SIZE*i, kabe2,TRUE);
				}
			}
		}
		gpDraw();
		//DrawGraph(fx, fy, flash, TRUE);
	}
}


//移動----------------------------------------------------------
void gsMove()
{
	if( Key[KEY_INPUT_RIGHT] == 1)
	{
		//プレイヤーのX座標が100を超えたら
		if( Player.px > 100)
		{

		}
	}
}

Re: 定義したマップのスクロール

Posted: 2015年10月30日(金) 21:27
by softya(ソフト屋)
何度も書いて申し訳ないですが、過去ログの質問でスクロールを実装されているみたいですが、その仕組みでは問題があるのですか?
http://dixq.net/forum/viewtopic.php?f=3&t=16384

Re: 定義したマップのスクロール

Posted: 2015年10月30日(金) 21:34
by samusu0905
過去のトピックと比べるとプログラムの書き方が違っているので、あの仕組みでは問題があります。
具体的な理由までは言えません。

Re: 定義したマップのスクロール

Posted: 2015年10月30日(金) 21:38
by softya(ソフト屋)
そのまま移植出来ないのは分かりますが、考え方を応用できない理由をお聞きしたいです。

Re: 定義したマップのスクロール

Posted: 2015年10月30日(金) 22:55
by samusu0905
応用するのが苦手だからです。それしか理由がありません。
申し訳ないです。
もちろん、自分でも考えることはしています。

Re: 定義したマップのスクロール

Posted: 2015年10月30日(金) 23:01
by softya(ソフト屋)
プロになるための学習中だったと記憶してますが、それを避けていたら何のための学習か意味が無いのです。
ゲームのお仕事は全て応用や発明だけと言って良いと思います。覚えたパターンやサンプルからのコピペだけでどうにかなるもんじゃありません。
スクロールはかなり簡単な部類の応用ですよ。

Re: 定義したマップのスクロール

Posted: 2015年10月30日(金) 23:15
by samusu0905
そうですか。ではこの質問に答える意味がないと言いたいわけですね。
わかりました。質問してすみませんでした。
softyaさんのいう簡単がどれくらい簡単であることを言っているのかわかりませんが。
このトピックスはこれでおわりにします。

Re: 定義したマップのスクロール

Posted: 2015年10月30日(金) 23:21
by softya(ソフト屋)
間違っていてもスクロールを組み込んであるコードであれば、学習過程も見えますので答える人も出やすいですが、過去質問と同様な質問の上に今回が丸投げだと、今回も過去のように回答が役立ちそうにないと思われても仕方ありませんよ。

あと私はプロ志望の人には厳しいんです。ごめんなさい。