今日は部活で学校の文化祭に向けプログラムを組んでいたのですが、一つ疑問が出てきました。
それは、どうやって画面をスクロールさせるかです。
今、私たちはゲームを作ろうということでプログラムを組んでいるのですが、私たちの班は1年生だけの班なので何分わからないことがたくさんあります。
いろいろ調べながらやっているのですが、結局解決できずに終わってしまいました。
誰か、ソースを教えてもらえないでしょうか?
言語はC++かTonyuで教えてもらえれば最高です。
よろしくおねがいします。
ここですべきことではない気もしますが。
うーん
Re: うーん
こんばんわ
コードは提供しにくいので、考え方を述べさせてもらいますね。
私たちは、画像などを描画するときには、
画面の左上を基準とした座標に基づいた座標に、
たとえば、(200,100)ならば、
左上からx軸上に200ピクセル、y軸上に100ピクセル、
移動した点に描画しますよね。
たとえば、ウィンドウのサイズが640×480ならば、
ある画像の位置が(700,300)ならば、それを描画してもウィンドウには表示されません。
だから、スクロールをして、それを表示できるようにするわけです。
スクロールはどのように行われているのかを思い出してみてください。
あれは、別に描画できる領域が増えるわけではありませんよね?
あれは、描画の基準となる点(つまり左上)が動いていると考えることが出来ます。
つまり、スクロールのアクションゲームで、主人公が200ピクセル横に動いたら、描画の基準となる点も200ピクセル動くということです。
この基準点を求めて、そこを基準とする座標をも求めて、それを描画する位置に指定すれば、自然とスクロールするように見えるはずです。
文章にすると、それはもう分かりにくいですね;
もう少し、具体例を述べてみます。
例えば、点A(200,100)、点B(700,200)があるとします。
そして、ウィンドウのサイズは640×480です。
これを普通に描画した場合、点Aは左上から(200,100)の位置、点Bは(700,200)の位置で、点Aは描画されますが、点Bは描画されません。
では、基準点を変えてみましょう。さっきの基準点はいうまでもなく(0,0)です。
これを、(300,0)に変えてみます。すると、
A(200-300,100-0) = A(-100,100)
B(700-300,100-0) = B(400,100)
新たな位置が決まりましたね。
この位置に描画してみるとどうでしょう、今度は点Aは描画できずに点Bは描画できます。
このように、基準点を増減させるのがスクロールの原理です。
加えて説明しますと、上の例で、
A(200,100) B(700,200)のような座標を絶対座標、
A(-100,100) B(400,100)のような座標を相対座標といいます。
ですから、スクロールする全ての画像について、定めた基準点に基づく相対座標に描画すれば、
スクロールは実現できます。
擬似コードで書くとすれば、
基準点を(dx,dy)、絶対座標を(x,y)とすると
Draw(x - dx, y - dy);
といった感じでしょうか。
長ったらしく、分かりにくい説明で申し訳ないですが、解らないようであれば、「絶対座標」「相対座標」のキーワードで検索してみると、良いかもしれません。
コードは提供しにくいので、考え方を述べさせてもらいますね。
私たちは、画像などを描画するときには、
画面の左上を基準とした座標に基づいた座標に、
たとえば、(200,100)ならば、
左上からx軸上に200ピクセル、y軸上に100ピクセル、
移動した点に描画しますよね。
たとえば、ウィンドウのサイズが640×480ならば、
ある画像の位置が(700,300)ならば、それを描画してもウィンドウには表示されません。
だから、スクロールをして、それを表示できるようにするわけです。
スクロールはどのように行われているのかを思い出してみてください。
あれは、別に描画できる領域が増えるわけではありませんよね?
あれは、描画の基準となる点(つまり左上)が動いていると考えることが出来ます。
つまり、スクロールのアクションゲームで、主人公が200ピクセル横に動いたら、描画の基準となる点も200ピクセル動くということです。
この基準点を求めて、そこを基準とする座標をも求めて、それを描画する位置に指定すれば、自然とスクロールするように見えるはずです。
文章にすると、それはもう分かりにくいですね;
もう少し、具体例を述べてみます。
例えば、点A(200,100)、点B(700,200)があるとします。
そして、ウィンドウのサイズは640×480です。
これを普通に描画した場合、点Aは左上から(200,100)の位置、点Bは(700,200)の位置で、点Aは描画されますが、点Bは描画されません。
では、基準点を変えてみましょう。さっきの基準点はいうまでもなく(0,0)です。
これを、(300,0)に変えてみます。すると、
A(200-300,100-0) = A(-100,100)
B(700-300,100-0) = B(400,100)
新たな位置が決まりましたね。
この位置に描画してみるとどうでしょう、今度は点Aは描画できずに点Bは描画できます。
このように、基準点を増減させるのがスクロールの原理です。
加えて説明しますと、上の例で、
A(200,100) B(700,200)のような座標を絶対座標、
A(-100,100) B(400,100)のような座標を相対座標といいます。
ですから、スクロールする全ての画像について、定めた基準点に基づく相対座標に描画すれば、
スクロールは実現できます。
擬似コードで書くとすれば、
基準点を(dx,dy)、絶対座標を(x,y)とすると
Draw(x - dx, y - dy);
といった感じでしょうか。
長ったらしく、分かりにくい説明で申し訳ないですが、解らないようであれば、「絶対座標」「相対座標」のキーワードで検索してみると、良いかもしれません。