背景画像のスクロール

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Bun

背景画像のスクロール

#1

投稿記事 by Bun » 14年前

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 です。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 14年前

どううまく行かないのか解説していただけますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Bun

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

#3

投稿記事 by Bun » 14年前

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#4

投稿記事 by softya(ソフト屋) » 14年前

このプログラムだと
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の空間を描画してくれると思いますよ。

よく分からなかったら、グラフ用紙にでも絵を書いてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Bun

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

#5

投稿記事 by Bun » 14年前

コード:

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);
こういうことでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#6

投稿記事 by softya(ソフト屋) » 14年前

あっと間違えましたすいません。
spriteBatch.Draw(bg, new Vector2(32, 16), new Rectangle(0, bgpos, 384, 448), Color.White);
だけで描画できるはずです。
ただし、画像が260ドット周期で有ることが前提となります。あと画像は260+448=708ドット必要です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Bun

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

#7

投稿記事 by Bun » 14年前

画像が切り替わるときに、少しかくっとなるのは仕方ないのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#8

投稿記事 by softya(ソフト屋) » 14年前

softya(ソフト屋) さんが書きました:ただし、画像が260ドット周期で有ることが前提となります。あと画像は260+448=708ドット必要です。
が守られているなら問題ないはずですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Bun

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

#9

投稿記事 by Bun » 14年前

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#10

投稿記事 by softya(ソフト屋) » 14年前

片方だけ条件を満たしていてもガクッとなります。画像は260ドット周期なんですよね?

448の周期である必要があるなら448+448=896ドット必要です。
その場合は
bgpos = (int)((gameTime.TotalGameTime.TotalMilliseconds / 20) % 448);
で計算して下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Bun

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

#11

投稿記事 by Bun » 14年前

できました。
ありがとうございました。

Bun

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

#12

投稿記事 by Bun » 14年前

スクロール方向を変更したいと思った場合、

コード:

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#13

投稿記事 by softya(ソフト屋) » 14年前

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);
	}
それとも場合分けは必要ないのかな?

さいごに解決したらコード貼って置いて下さいね。フォーラムルールですので。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Bun

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

#14

投稿記事 by Bun » 14年前

なんどもありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る