ページ 1 / 1
背景画像のスクロール
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
なんどもありがとうございます。