トピック
nobu divine-creator

上画面よりも大きなBGを上手に利用する方法がよく分からなくて困っています…(´・ω・`)。いくつかの疑問点を書きますので、回答をよろしくお願いします。

まず、BGSCREEN 0,32,32とすることで、描いた範囲全てを1枚のBGとして使えるはずですが、これの一部分だけを指定して表示するには、BGCLIP 0,X始点,Y始点,X終点,Y終点で合っていますよね? そして、BGOFS 0,-X,-YでBGを移動させることで、表示する範囲を変えられると思ったのですけど、何故か全く表示されないため困ってしまいました…OTL。 何か不足している命令があるのか?どこかに間違っている命令があるのか?何が理由で表示されないのか?が分かっていません…。 大きなBGを範囲指定して表示させたり、表示する範囲を変えたりする方法を分かりやすく教えてください。
1そうだね
プレイ済み
返信[1]
親投稿
ねこはち neko80001
全く表示されないってのが謎ですね。 DISPLAY番号が一致していないとか凡ミスのような気がしますが、リストがない事にはなんとも。
0そうだね
プレイ済み
返信[2]
親投稿
考え方には、問題がないと思います。 試したところ、それなりに表示されました。
0そうだね
プレイ済み
返信[3]
親投稿
nobu divine-creator
回答ありがとうございます♪ そういえば、BGを表示するための命令が抜けていました…|д゚)。 一枚絵のように並べてあるBGをそのままの位置で表示するには、どのようにするのが一番良いでしょうか? それが分かれば、この問題は解決できそうです。
0そうだね
プレイ済み
返信[4]
親投稿
「一枚絵のように並べてあるBGをそのままの位置で表示する」が、何を意味するのかがわかりません。 クリッピングや移動をしなければそのままの位置で表示されているのでは?
0そうだね
プレイ済み
返信[5]
親投稿
マギー M191246
普通にコードを+1しながら配置で いいかと思います。
0そうだね
プレイ済み
返信[6]
親投稿
マギー M191246
追加。 もしも左上隅16×16ドットの範囲内にも 絵がある場合は、始まりのコードを 1024などにすると表示されます。 知ってたら、すみません。
0そうだね
プレイ済み
返信[7]
親投稿
nobu divine-creator
済みません!説明が下手でした…orz。一枚絵のように並べてある…というのは、GRP5にLOADしたBG用画像の話です。 それをそのままの並びで表示したいので、BGPUT 0,X,Y,キャラ番号を使えば良いのは分かるのですけど、横30×縦20で並んでいるBGをそのまま表示するには、どのようにしたら良いのでしょうか? ちなみに、キャラ番号0は表示されないんですよね?それもどうしたら解決できますか?
1そうだね
プレイ済み
返信[8]
親投稿
nobu divine-creator
あっ!マギーさんの2つめのコメントが、キャラ番号0についてのことですね♪ 「始まりのコードを1024にする」というのは、0の代わりに1024にすれば本来0の位置にあるBGが表示されるということですか? FOR I=1024 TO 1623 BGPUT 0,X,Y,I VSYNC NEXT 上のXとYの部分をどうしたら良いのか?分からないのですけど、どうすればまとめて配置できるのでしょうか?
0そうだね
プレイ済み
返信[9]
親投稿
マギーさんの方法が、まっとうな方法だと思いますが、こんな方法もあります。
0そうだね
プレイ済み
返信[10]
親投稿
Iをループ変数とする場合は、X,Yを計算で求め、X,Yをループ変数とする(入れ子)場合は、Iを+1ずつ増やせばいいです。
0そうだね
プレイ済み
返信[11]
親投稿
マギー M191246
X,Yの方をループ変数の二重ループにして、 Iの方は、そのまま+1していきます。 もし、横幅が30しかないなら、 二つのNEXTの間で Iをさらに+2するようにすると いいかと思います。
0そうだね
プレイ済み
返信[12]
親投稿
すみません。32×32と思い込んでいました。30×20用に修正しました。
0そうだね
プレイ済み
返信[13]
親投稿
BGを表示するユーザ定義命令を作って見ました。用途に合いそうでしたら、改造するなどして使って見てください。ネーミングセンスに問題があると思うので、命令名を適当な名前に変更してください。不明な点があれば、質問してください。
0そうだね
プレイ済み
返信[14]
親投稿
nobu divine-creator
済みません!どうやら最初に考えていた表示方法よりも、別の方法にしたほうが良いみたいです…。 最初に考えていたのは、自分で描いた一枚のBG画像をそのままの大きさで表示して、状況に応じて移動させれば良いという感じでしたが、本当はBGPUTで必要な部分を選んで表示できれば、動かす必要も表示する部分を制限する必要も無かった…ということが分かりました♪ なので、LOADしたBG画像から表示したい部分を選んで表示できれば、目的通りの表現ができることになります! それで、基になる画像のサイズを確認してみたら、2枚のBG画像のうち1枚目が30×20で、2枚目が27×30でした。この2枚を途中で切り替えて、それぞれの画像から半分くらいの部分をBGPUTで表示したいのです! コータさんのサンプルプログラムを試してみましたが、何故か範囲外のエラーになってしまいました…。ちなみに、動かす命令は使っていません。
0そうだね
プレイ済み
返信[15]
親投稿
nobu divine-creator
今回作っているプログラムは、RPGのように大きなマップを表示してスクロールするというようなものではなく、各パーツを選択する際に使う一覧表のようなBGであるため、下画面に入りきる大きさにしてあります♪ なので、一画面以内のサイズのBG画像を切り替えて表示するのが目的となります! しかし、各画像のサイズが異なるため、BGを並べる縦横の長さが異なります。横(X軸)と縦(Y軸)とBG番号をそれぞれ変数にして、組み合わせれば良いということまでは分かっているのですけど、その式の作り方が理解できていません…(´・ω・`)。
0そうだね
プレイ済み
返信[16]
親投稿
範囲外のエラーになるのは、10行目と13行目だと思います。 3つの場合が考えられます。 BGPUTの前に、DISPLAY 1でBGSCREENの指定しているでしょうか。 あるいは、レイヤー番号をXSCREENで指定したレイヤー数の範囲内になっているでしょうか。 サンプルのU,V,W,H,X,Yは、BGの個数を想定しています。U,V,W,Hにグラフィック座標としての値を指定したい場合は、ループに入る前にそれぞれ1/16すればうまくいくと思います。
0そうだね
プレイ済み
返信[17]
親投稿
マギー M191246
誤解しているかも知れませんけど 一つのグラフィックページに 収まらないデータを 切り替えて使うということなら 必要なときに BGPAGEの切り替えを指示するなど だと思いますけど、だとしたら BGスクリーンの方は、 最初に最大サイズを書き込んでおけば あとから触らなくていいということは、 ないですか?
0そうだね
プレイ済み
返信[18]
親投稿
マギー M191246
ちなみに BGキャラ番号とX座標、Y座標の関係は、 グラフィックページ自体のサイズが 変わらないので、常に Xが、1増えればキャラ番号は、1 Yが、1増えればキャラ番号は、32 増えることになると思います。
0そうだね
プレイ済み
返信[19]
親投稿
nobu divine-creator
エラーの原因は座標の数値でした…(苦笑)。 BGの数を数えなければならないことは分かっていたのに、何故か間違えてしまっていました…orz。
0そうだね
プレイ済み
返信[20]
親投稿
U,V,W,Hと言う名前は、グラフィック座標を指定するときに使うことが多いので、名前をそれらしい名前に出来れば間違えずに済んだかもしれませんね。名前の付け方が下手ですみません。
0そうだね
プレイ済み
返信[21]
親投稿
nobu divine-creator
いいえ、ただ単にBGPUTを使うのが初めてで、SPの座標とBGの座標が異なっていることに戸惑ってしまっていただけです…。 変数に惑わされた…というわけではありません♪ しかし、SPと違って座標で調べられないため、数えるのが少し面倒な気がします…。 そこで、数字のフォントをコピーして、BG番号を視覚的に調べやすくしてみようと考えました! その見本を使えば、BG番号の確認がしやすくなりそうです♪
1そうだね
プレイ済み
返信[22]
親投稿
nobu divine-creator
いろいろと試してみた結果、コータさんのユーザー定義命令を利用させていただき、何とかBGを思った通りに表示できるようになりました♪ しかし、まだBG関連の操作が全て完了したわけではないので、場合によってはまた質問させていただくことがあるかもしれません。 問題がなければ、このまま終了となりますので、その時は上手くいったのだとお思いください♪
1そうだね
プレイ済み