画像スクロールプログラム

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

画像スクロールプログラム

投稿記事 by せんちゃ » 12年前

複数の画像をスクロールさせるとき、画像の数だけオブジェクトを生成するとえらいことになるので
できるかぎり数少ない数でスクロールさせよう。ということで会社の人に教えてもらったスクロールのプログラム

わずか5枚だけで画面内に複数の素材をループさせます。
スクロールさせるときはスクロール値を持ち
各オブジェクトはこのスクロール値に合わせて動きます。


一枚目 y + ( scrollvalue % 32 )
二枚目 y + 32 + ( scrollvalue % 32 )
三枚目 y + 64 + ( scrollvalue % 32 )
四枚目 y + 96 + ( scrollvalue % 32 )
.
.
.
みたいな計算をするとスクロール値に合わせて連動し、
32で割り切れる値になったときに最初の位置にリセットされます。

各オブジェクトが描画するテクスチャは
( scrollvalue / 32 ) + 設定インデックス
といった方法をとることで順番にテクスチャを切り替えられます。



あたかもスクロールしているように見せかけて
実は同じオブジェクトがただ一定の周期で同じ場所を動いているだけという単純なロジック
ベテランの発想には驚かされるばかりですなぁ...



スクロールテスト
とりあえずソースコードをば


~ここからは言語の話~
この頃はCオンリーでどこまでオブジェクト指向っぽいことができるかを追求しています。
趣味で書いてるコードではクラスやテンプレートや名前空間はとりあえず使わない感じで試みていますが。。。
C++で書く以上に隠蔽化に気を配る必要があるので案外いい勉強になります。

Cでクラスっぽいことを実現しようとしたらどういった手間がかかるか、
C++の機能の恩恵をうける前に
まずCの機能だけでオブジェクト指向を実現しようとしてみるとその恩恵をより一層に感じられそうです。


※bool型とか変数宣言の場所とか構造体の宣言時のstructとかは忘れたり癖でやってしまうので
その辺はいいかなぁとか考えてるのでC++寄り

ISLe
記事: 2650
登録日時: 15年前

RE: 画像スクロールプログラム

投稿記事 by ISLe » 12年前

せんちゃ さんが書きました:あたかもスクロールしているように見せかけて
実は同じオブジェクトがただ一定の周期で同じ場所を動いているだけという単純なロジック
ベテランの発想には驚かされるばかりですなぁ...
いわゆるファミコンとかのBG機能ですよね。
タイルとしては画面と同じ大きさの分だけで、タイルに割り当てるイメージを変更することで延々と続くように見せるという。


わたしもその辺のコードはまとめてあります。
【JavaSE】フレームワークのタイルマップ実装: ISLeのビデオゲーム工房
VGTilemap#paintにあります。
Javaですけど、C/C++にもロジック部分はそのまま使えます。

せっかくなのでできるだけ汎用性を高めてあります。
スクロール座標は負もOK。
マップサイズは任意で描画サイズよりマップが狭くてもOK。
もちろん必要最低限しか描画しない。

YuO
記事: 947
登録日時: 14年前

RE: 画像スクロールプログラム

投稿記事 by YuO » 12年前

せんちゃ さんが書きました:この頃はCオンリーでどこまでオブジェクト指向っぽいことができるかを追求しています。
Win32 APIはオブジェクト指向しようとしていますね。
どちらかというと,Message Passingによる古典的なオブジェクト指向の方に近いですが。
# Kernel Object Handleは原則的にCloseHandleで閉じるとか,DuplicateHandleでHandleが複製できるとか。

あと,COMなどはC/C++両方から呼び出せるように作られているので,CでのCOM呼び出しとC++でのCOM呼び出しを比べると,コンパイラが中でやっていることがある程度見えてきたりします。

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

Re: 画像スクロールプログラム

投稿記事 by せんちゃ » 12年前

ISLeさん
ファミコンの背景処理がどのような機能になっていたのかはわからないのですがそうですね、
テクスチャの番号だけずらしてループする、という仕組みです。
僕も今の仕事でこの仕組みを使って実装している部分があったのですが、
やっぱり実装していると結構汎用性を意識してしまいますね。

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

Re: 画像スクロールプログラム

投稿記事 by せんちゃ » 12年前

YuOさん
>>Win32 APIはオブジェクト指向しようとしていますね。
WNDCLASSとかもそうですよね(WinAPI系の構造体は大体そうかもしれませんが。。。)
Windowsの関数はどれくらいの歴史があるのかわからないのですが、結構昔から大して変わってないという話を聞いたので
結構C寄りなのかなぁ~なんて感じます。