スクロール

2055 ワード


現在のゲームでは、プレイヤーが移動すると、背景のガンジーが見えるまでスクロールが増加し続けます.
ここでは、タイルが敷かれていないマップの外でスクロールが移動しないように、スクロールマネージャにスクロール関数を追加します.
スクロール
void CScroll_Manager::Scroll_Lock()
{
	if (0 < m_iScrollX)
		m_iScrollX = 0; 
	if (0 < m_iScrollY)
		m_iScrollY = 0; 

	if (WINCX - TILECX * TILEX > m_iScrollX)
		m_iScrollX = WINCX - TILECX * TILEX;
	if (WINCY - TILECY * TILEY > m_iScrollY)
		m_iScrollY = WINCY - TILECY * TILEY; 
	// x축 조건은 0과 -480 ; 
	// y축은 0보다 크면서 - 1320 

}
スクロールマネージャでスクロール関数を宣言します.まず、現在のゲームでは、左上隅座標が(0,0)のため、スクロール値が0より大きい場合は0に設定します.
次はX軸の右Y軸で下に隠します.ここでは現在の値を整数値とすることができますが、そうであればゲーム中のマップサイズが変更された場合、その値を変更することもできます.
したがって、スクロール値の最大値を求めると、X軸上でタイルのXサイズ*にタイルのX個数を乗じて最小値を減算することができ、スクロール値がこの値より小さい場合は初期化すればよい.Y軸もそうです.
	CKey_Manager::Get_Instance()->Key_Update();
	CScene_Manager::Get_Instance()->Update_Scene_Manager();

	CScroll_Manager::Scroll_Lock();
次の値は、MainAppがすべての更新を返した後にスクロールをブロックするために必要な値です.
プレイヤースクロールの同期
ただし、プレイヤーが移動中に移動できなくても、スクロールは移動します.これを防ぐためには、移動キーを押したときに無条件に移動するのではなく、値を同期させる必要があります.
まず,プレーヤの更新部では,移動キーの入力時に設定したすべての部分を削除する.
スクロールマウス機能の追加
void CPlayer::ScrollMove()
{
	int iScrollX = CScroll_Manager::Get_ScrollX(); 
	int iScrollY = CScroll_Manager::Get_ScrollY(); 
	if ((WINCX >> 1) < m_tInfo.fX + iScrollX + 100)
		CScroll_Manager::Set_ScrollX(-m_fSpeed); 
	if ((WINCX >> 1)  > m_tInfo.fX + iScrollX - 100)
		CScroll_Manager::Set_ScrollX(m_fSpeed);

	if ((WINCY >> 1)  < m_tInfo.fY + iScrollY + 100)
		CScroll_Manager::Set_ScrollY(-m_fSpeed);
	if ((WINCY >> 1) > m_tInfo.fY + iScrollY - 100)
		CScroll_Manager::Set_ScrollY(m_fSpeed);
}
スクロールマウスサスペンション関数は、現在のマップの中点値を調整し、プレイヤー座標にスクロール値を追加することによってスクロール値を調整します.これにより、ゲームとスクロールを無条件に移動するのではなく、プレイヤーが中点から一定範囲(ここでは100)を超えてからスクロール値を変更します.