ページ 11

ループスクロール?

Posted: 2011年3月12日(土) 17:26
by YYSS
640x480の描画領域に、640x480の背景画像を右から左に途切れないようにスクロールさせたい。

何がしたいかというと、

↓画像とします
12345

右から左にスクロール
2345

右側に何も表示されないスペースが出来てしまうので、
23451

のように、描画領域から外れた部分を右に持っていきたいのですが
何故か左側に表示されない空間が出来てしまいます。

コード:

		static int SetX;
		SetDrawBright( Alpha -50, Alpha -50, Alpha -50 );

		SetDrawBlendMode( DX_BLENDMODE_ALPHA, Alpha -Alpha2 );
		DrawRectGraph( 0, 0, SetX, 0, 640- SetX, 480, Back[0], false, false );
		DrawRectGraph( 640 - SetX, 0, 0, 0, SetX, 480, Back[0], false, false );

		SetX	+= (int)ScrollXSpeed;

		if( SetX >= 640 ){		SetX	-= 640;	}
		else if( SetX >= 0 ){	SetX	-= 640;	}

画像も貼っておきます。
左右が繋がっても違和感が無いようにしてあります。

これを元に多重スクロールなどを作っていきたいので、
アドバイスをお願いします。

Re: ループスクロール?

Posted: 2011年3月12日(土) 17:56
by ISLe
SetXが640以上なら640引くのは分かるのですが、次に回ってきたとき0以上でまた640引いてしまいます。

Re: ループスクロール?

Posted: 2011年3月13日(日) 15:29
by 海Sea
こんにちは。
コードを見る限り、こちらの勘違いでしたら申し訳ありませんが
画像の大きさを考慮されていないのでは?と思いました。

ゲーム画面の大きさがXで640、Yで480で
画像もそれに合わせていると思います。
画像は移動するさい、X方向の0の位置にきた時に右の位置に戻すということですが、
基本的に画像は、中心でその位置を認識しています。
なので、大きさが640の場合だと中心は320の位置です。
そのため、左から右に移動させるときは、X軸の-320の位置で右に画像を配置しなおすようにします。
そして、右に移動させた画像を、640+320=960の位置に配置しなおせば、
ちゃんときれいにスクロールされると思います。

Re: ループスクロール?

Posted: 2011年3月14日(月) 23:46
by YYSS
すみません、こちらの表記ミスが原因でした

コード:

        if( SetX >= 640 ){      SetX    -= 640; }
        else if( SetX >= 0 ){   SetX    -= 640; }
ではなく

コード:

        if( SetX >= 640 ){      SetX    -= 640; }
        else if( SetX < 0 ){   SetX    += 640; }
のようにしたら解決しました。