★プレイヤーキャラクター 移動制限3★


古い2Dゲームの中には、プレイヤーキャラクターが画面端からはみ出した場合、反対側から出てくる仕様のゲームも多くありました。

「パックマン」のワープトンネルなどは代表的なものでしょう。

左右の移動制限を変更して、上記のプログラムを作ってみましょう。


右端の処理


今のところは画面の右端まで移動すると、そこで止まるようになっています。

if (pEngine->GetKeyState(DIK_RIGHT)) {

    m_direction = RIGHT;

    m_x += m_speed;

    if (m_x >= WindowSetting::WINDOW_WIDTH - WIDTH) {
        m_x = WindowSetting::WINDOW_WIDTH - WIDTH;
    }
}

やりたい事は「画面の右端からキャラクターが完全に出たら、画面の左端から出てくるようにしたい」です。

「画面の右端からキャラクターが完全に出る」と言う事は、「転送先X座標が640を超える」と言う事です。

「転送先X座標が640を超えたら」画面の左端へキャラクターを移動させれば良いですから、「転送先X座標を0」にしてみます。

if (pEngine->GetKeyState(DIK_RIGHT)) {

    m_direction = RIGHT;

    m_x += m_speed;

    if (m_x >= WindowSetting::WINDOW_WIDTH) {
        m_x = 0;
    }
}

実行してみましょう。

右へ移動していくと・・・

スピードが2なので、ここまでは何も起きません。

転送先X座標が640以上になった瞬間に、

画面の左端に「ワープ」しました。


右端からは徐々に画面外に出ているのに、左端から「ぱっ」と出てくるのは違和感があります。

左端から出てくる時も、画面外から出てくるように調整しましょう。

if (pEngine->GetKeyState(DIK_RIGHT)) {

    m_direction = RIGHT;

    m_x += m_speed;

    if (m_x >= WindowSetting::WINDOW_WIDTH) {
        m_x = -WIDTH;
    }
}

実行して確かめてみます。

いきなり画面に「ぱっ」と現れる事が無くなりました。。


左端の処理


同じように左端の処理も作ってみてください。









































解答です。

if (pEngine->GetKeyState(DIK_LEFT)) {

    m_direction = LEFT;

    m_x -= m_speed;

    if (m_x < -WIDTH) {
        m_x = WindowSetting::WINDOW_WIDTH;
    }
}

実行して確かめてみましょう。


1つの画面でキャラクターを移動させる事を前提にして、移動制限について説明してきました。

しかし、背景がスクロールするなどの要素が入ってくると、移動制限も別の方法を考えなければなりません。

※昔の2DRPGなど、プレイヤーキャラクターは画面の真ん中から動いておらずマップが動いていました。

色々なゲームを参考にして、皆さん自身で試してみてください。


次へ

戻る

目次へ