ページ 11

背景画像のスクロール

Posted: 2011年12月24日(土) 09:41
by Bun
c#とxnaを使いゲーム作成中に背景画像のスクロールをしようと思ったのですが、うまくいきません。
次のコードでできなかったのですがどうすればいいでしょうか?

コード:

 int bgpos;
                bgpos = (int)((gameTime.TotalGameTime.TotalMilliseconds / 20) % 260);
                spriteBatch.Draw(bg, new Vector2(32, 16), new Rectangle(0, bgpos, 384, 448), Color.White);
                spriteBatch.Draw(bg, new Vector2(32, 16), new Rectangle(0, bgpos - 700, 384, 448), Color.White);
なお、ウィンドウサイズは640,480
フィールドサイズは384,448
   画像ファイルは  384,700 です。

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 10:21
by softya(ソフト屋)
どううまく行かないのか解説していただけますか?

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 11:02
by Bun
softya(ソフト屋) さんが書きました:どううまく行かないのか解説していただけますか?
説明不足で済みません。
うまくスクロールがつながらずに、途切れ途切れになってしまいます。

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 11:15
by softya(ソフト屋)
このプログラムだと
bgposが0~259の間で変化します。
最初の描画がbgposが0の時は、(0,0)-(384,448)の座標に描画されます。
次の描画がbgposが0の時は、(0,-700)-(384,448-700)の座表に描画されます。
問題はbgposが1の時に(0,1)-(384,448+1)の時からは2つめの描画(0,1-700)-(384,448+1-700)なのでy座標が0の空間を誰も描画してません。
2つめの描画がこの時(0,1-448)-(384,448+1-448)でy座標が0の空間を描画してくれると思いますよ。

よく分からなかったら、グラフ用紙にでも絵を書いてみてください。

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 11:36
by Bun

コード:

int bgpos;
                bgpos = (int)((gameTime.TotalGameTime.TotalMilliseconds / 20) % 448);
                //bgpos = bgpos * -1;
                spriteBatch.Draw(bg, new Vector2(32, 16), new Rectangle(0, bgpos, 384, 448), Color.White);
                spriteBatch.Draw(bg, new Vector2(32, 16 - 448), new Rectangle(0, bgpos + 448, 384, 448), Color.White);
こういうことでしょうか?

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 11:45
by softya(ソフト屋)
あっと間違えましたすいません。
spriteBatch.Draw(bg, new Vector2(32, 16), new Rectangle(0, bgpos, 384, 448), Color.White);
だけで描画できるはずです。
ただし、画像が260ドット周期で有ることが前提となります。あと画像は260+448=708ドット必要です。

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 11:58
by Bun
画像が切り替わるときに、少しかくっとなるのは仕方ないのでしょうか?

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 12:00
by softya(ソフト屋)
softya(ソフト屋) さんが書きました:ただし、画像が260ドット周期で有ることが前提となります。あと画像は260+448=708ドット必要です。
が守られているなら問題ないはずですが。

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 12:05
by Bun
softya(ソフト屋) さんが書きました:
softya(ソフト屋) さんが書きました:ただし、画像が260ドット周期で有ることが前提となります。あと画像は260+448=708ドット必要です。
が守られているなら問題ないはずですが。
708ドットになっていればいいんですよね?
一応そうなっています・・・

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 12:09
by softya(ソフト屋)
片方だけ条件を満たしていてもガクッとなります。画像は260ドット周期なんですよね?

448の周期である必要があるなら448+448=896ドット必要です。
その場合は
bgpos = (int)((gameTime.TotalGameTime.TotalMilliseconds / 20) % 448);
で計算して下さい。

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 12:21
by Bun
できました。
ありがとうございました。

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 12:28
by Bun
スクロール方向を変更したいと思った場合、

コード:

 bgpos = bgpos * -1;
 spriteBatch.Draw(bg, new Vector2(32, 16), new Rectangle(0, bgpos, 384, 448), Color.White);
これでは画像がうまくいかないのですが、どのように修正すればいいのでしょうか。
後からすみません。。。

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 12:31
by softya(ソフト屋)
Bun さんが書きました:スクロール方向を変更したいと思った場合、

コード:

 bgpos = bgpos * -1;
 spriteBatch.Draw(bg, new Vector2(32, 16), new Rectangle(0, bgpos, 384, 448), Color.White);
これでは画像がうまくいかないのですが、どのように修正すればいいのでしょうか。
後からすみません。。。
こう場合分けすれば良いだけなのでは?

コード:

	bgpos = bgpos * -1;
	if( bgpos > 0 ) {
		spriteBatch.Draw(bg, new Vector2(32, 16), new Rectangle(0, bgpos, 384, 448), Color.White);
	} else {
		spriteBatch.Draw(bg, new Vector2(32, 16), new Rectangle(0, 448+bgpos, 384, 448), Color.White);
	}
それとも場合分けは必要ないのかな?

さいごに解決したらコード貼って置いて下さいね。フォーラムルールですので。

Re: 背景画像のスクロール

Posted: 2011年12月24日(土) 12:35
by Bun
なんどもありがとうございます。