コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
しんいち ◆lHy.hAWXbthn
2018/3/13 0:31
情報交換
BGレイヤーの移動+反転+回転
さて、BGレイヤー1枚を、1つのスプライトの様に移動+反転+回転させたくて、BGROTで90度回転させたものを、BGANIMで左右反転してみたら、BGレイヤーがどこにも見当たらなくなってしまいました(画面はBGANIMの直前)。どこに行ってしまったんだろう?
BGROTとBGANIMで反転+回転させるのに無理があったのだろうか?
元のBGデータの配列自体を反転+回転させなきゃ実現できないかなぁ(面倒)。

コメント

アバター
say 2018/3/13 0:51 ◆1nbKtD/tFu04
bghome n,200,120
これでいかが?

的外れだったらごめんなすって
アバター
しんいち 2018/3/13 1:37 ◆lHy.hAWXbthn
的外れではないです。私の情報が不足していました。
反転、回転させるなら、BGHOMEで移動させた方が座標計算とか楽だと思って、最初BGHOMEで移動させてたんですけど、それだと画面左上の方に移動させるとレイヤーの右下の方が欠けちゃうんですよね。画面右下の方に移動させれば全部表示される。多分BGCLIPの範囲外(マイナス座標?)にはみ出してしまってるのかと思うのですが。
それで、座標計算面倒だけど、BGOFSだけで移動させようとしたら、今度は全く表示されない(どこに行ったか分からない)ことになってしまいました。
欠けないようにしつつ、BGHOMEとBGOFS両方を組み合わせて工夫すれば何とかできるものなのだろうか?う〜ん、困った(>_<)
アバター
キルル2 2018/3/13 16:32 ◆rGE712Ruejv7
BGHOMEで移動させるのが比較的楽だと思います
というのも、回転・反転の原点がBGOFSだと(0,0)のままなので、反転した瞬間に見えなくなったり、90度回転で見えなくなったりするからです
その点BGHOMEで移動しとけば、回転・反転の原点も移動してくれるので、見えなくなったりはしなくなります
反転をする前後で、止めてみたりして、ちゃんとできているか確認しながらやるのが良いですよ
あとレイヤーの右下が欠けるのは、BGOFS・BGHOMEどちらで移動させても同じではないですか?
レイヤーの大きさは限られているので、移動させてると欠けてしまいます
最初から大きいレイヤーに設定(BGSCREEN)しておくと良いでしょう
sayさんと同じく、保険になりますが、的外れでしたらすみません
アバター
しんいち 2018/3/13 20:15 ◆lHy.hAWXbthn
文章だけではなかなか伝えられないと思いまして、サンプル公開しておきます。
公開キー:RZEVN3H4
ファイル:BGROT_TEST
左スティックで移動、L/Rボタンで回転、十字ボタン左右で左右反転、十字ボタン上下で上下反転します。不完全ですがチェックして頂けたら幸いです。

BGANIMは、BGレイヤー1枚丸ごとを反転させるために使っています。
スプライトでは#SPREVH、BGキャラ1つなら#BGREVHで左右反転できますが、BGレイヤー1枚丸ごとは、BGANIMの"S"(5)で倍率Xを-1にすると左右反転させることができます。

で、その後色々試してたら、左右反転+90度回転したものに
BGHOME 0,160,112:BGOFS 0,16,0
したら、取り合えず画面左上にレイヤー全体を欠けることなく表示できました。
(レイヤーのサイズは128×160)
これが、BGHOME 0,160,128:BGOFS 0,0,0 だと上が欠けるのは相変わらず謎。

BGHOMEとBGOFSを組み合わせれば何とかなりそうなことは分かったけど、座標計算をどうすれば良いのかは今のところチンプンカンプン^^;
どなたか優しい方、サンプル直してくれないかなぁ(ボソッ)
アバター
キルル2 2018/3/13 22:57 ◆rGE712Ruejv7
直しました【4RY5JEMD】
アバター
しんいち 2018/3/14 1:58 ◆lHy.hAWXbthn
>キルル2さん
ありがとうございます。
キルル2さんのは、BGHOMEだけで移動させる方法ですね。折角作って頂きましたが、それだとやはりレイヤーが欠けてしまいます。欠けるのは、上下か左右どちらか反転し、更に90度か270度回転した場合のみ発生します。
何か、BGANIMで反転させるのに無理がある(裏技的な方法でちゃんと動かない)ような気がしてきた(;_;)

何となく欠ける条件(上下か左右反転+90度か270度回転で、座標がレイヤーサイズ以上になった時かな)分かってきたので、それを踏まえてBGHOMEとBGOFS組み合わせて欠けないようにできないか考えてみますが、引き続きアドバイスもお待ちしています。
アバター
でんぺん 2018/3/14 1:58 ◆HfSy5ayxtyTa
BGHOMEは原点を変えるものですし、BGOFSはBG上の位置のイメージでスプライトの位置とは感覚が違うところがわかりにくく混乱しやすいのかなと思います。

キルル2さんも直してくれてますが僕もオリジナルのイメージがなるべく変わらないように直してみました。(コード自体はかなり修正してますが)
ただオリジナルと違ってBGの中心を基準に処理しているので元が正方形じゃない分回転時の動作が変わっています。もしオリジナルと同じように回転しようと思ったら回転後に調整する必要があると思いますが、その辺は自分でやってみると理解が深まるのではないかと思います。

あ、あと反転はアニメーションをしないのであればBGSCALEでも同様の動作が出来るのでそのように変えてます。

変更点としてはそんなイメージですね。最後に公開キーは、
YK3343NY
です。
アバター
でんぺん 2018/3/14 2:03 ◆HfSy5ayxtyTa
今最新の投稿を見て欠けるというのの意味がわかりましたが確かに僕のサンプルでもケースによって表示されなくなりますね!

ちょっと今すぐ調査・修正する時間がないので直せませんが、僕のサンプルもBG回転の一例ぐらいな感じで見てもらえたらって感じで、表示欠けについては解決出来てませんので、それはすいませんでした。

また時間があるときでアドバイス出来るような事が出てきたら書き込みますが、その前にうまく解決出来てればいいですね。
アバター
しんいち 2018/3/14 2:37 ◆lHy.hAWXbthn
>でんぺんさん
ありがとうございます。
そうなんですよ。やっぱりBGHOMEだけだと欠けちゃうんですよ。
しかしサンプルはとっても参考になりました。BGSCALEでも反転できたんですね。気付かなかった^^;(ちょっと試せば気付くだろうに。だって公式リファレンスブックのBGSCALEのところ見たらOut of rangeになりそうな雰囲気だったんだもん←言い訳)

今のところ、上下か左右反転+90度か270度回転の時だけ特別な処理を行うという、スマートじゃない方法で検討中。
#しかし私の書いたソースは見辛いなぁ。お二人から頂いたソースを見て痛感(^^ゞ
アバター
キルル2 2018/3/14 9:28 ◆rGE712Ruejv7
私のサンプルで以下のケースを試しましたが、欠けを確認できませんでした
左右反転+90度回転
上下反転+90度回転
左右反転+270度回転
上下反転+270度回転
左右上下反転+90度回転
左右上下反転+270度回転
何か他の操作をしていませんか?
アバター
でんぺん 2018/3/14 10:14 ◆HfSy5ayxtyTa
キルル2さんのサンプルでも確認してみましたが、僕で発生した欠けは発生していましたね…。簡単に確認するのは反転して90度回転したものを右下など画面外に向かって動かすと発生しやすいです。

というか症状的にバグっぽいと言うか内部処理的に画面外になるBGキャラ部分は描画しないような処理が入っているのが反転と回転を組み合わせた事で誤動作して間違えて消してしまっているような動作にも見えます。
まだちゃんと検証したわけではないのでわかりませんが、もし推測が正しくて表示されてないんだとしたらちょっと厄介そうだなぁ…って印象を受けています。推測が外れているか当たっていても回避方法が見つかれば良いのですが…
アバター
でんぺん 2018/3/14 10:20 ◆HfSy5ayxtyTa
>しんいちさん
ということで僕の方では、ちょっと厄介そうな状態になってるような気がしています。なので回避方法がわかったら逆に知りたい感じです! もうちょっと時間があるときに僕の方でも色々試してみたいと思っていますが…。

BGSCALEでも出来ますしBGANIMは何らかの状態操作アニメーションですしね〜。僕は初めてやあまり使ったこと無い機能はDIRECTモードで試してみたりします。すぐに動作(エラーも)が確認出来るので便利ですよ。

とくに可変引数や引数によって複数の動作があるタイプの命令はDIRECTモードで各動作を試してみるのは便利なのでオススメですねー。
アバター
でんぺん 2018/3/14 19:25 ◆HfSy5ayxtyTa
まだ軽くしか調べてませんが、どうも90度(or270度)回転と反転を組み合わせると思うように表示出来ないですね…。BGHOMEは使わずにBGOFSだけで色々やってみても思うような結果が出せませんでした…。

今回、どういう用途でこのBGの反転と回転を利用しようとしているのかにもよりますが、回転が90度区切りなら場合によっては始めに言われていた「元のBGデータの配列自体を反転+回転」を利用した方が意外と楽になる、なんて事もあるかも…。どんな感じに使いたかったんですか?

と言いつつ気になる現象だし見落としがあるかもなので引き続き時間があるときに調べてみるかもしれませんが,僕の方の中間報告としてはそんな感じですね。
アバター
しんいち 2018/3/14 20:24 ◆lHy.hAWXbthn
用途は、MAPエディタを作っていまして、コピペのキャプチャーしたMAPを、ペースト前に反転したり回転したりできるようにするためでした(実はこれで行き詰まって暫く放っぽってました)。
それで、ペースト前の段階では見た目だけ反転、回転して、ペースト時にのみ元配列データ自体を反転、回転させようと考えていました(その方が軽いかなぁと思って)。でも見た目の反転、回転があまりにも面倒なら、初めから元配列データ自体を反転、回転させても良いかもしれませんね。
取り合えず見た目の反転、回転を実現してみてから、どっちにするか判断しようと思っています(実現方法気になるし)。

しかし色々試していると、やっぱりバグに思えてきますね。スプライトでも90度、270度回転にバグがあるようだし、プチコンにとって90度、270度回転は鬼門なのか。
アバター
でんぺん 2018/3/14 21:17 ◆HfSy5ayxtyTa
なるほどー。どういうマップエディタかにもよりますが、コピペのためにBG1面を使うのってもったいない感じはないですかね? まあでも大きな範囲でやろうとしたらしょうがない部分もあるのかなぁ…。
最終的に元データの反転…回転済みのデータが必要なら始めに作ってもいいかもしれないですね。

僕もマップエディタを作りましたがBGレイヤーとスプライト数の制限では苦労した感じもありました。マップエディタの場合は用意したい機能として実装する場合はその機能はなしにするって選択が難しいですしね。

僕も反転+回転のパターンはバグの可能性が高い気がしています。反転や回転の単体なら問題なさそうなんですけどねー…。
アバター
しんいち 2018/3/14 23:32 ◆lHy.hAWXbthn
前にお絵描きツールを作った時は、コピペのキャプチャー画像をスプライトで表示したのですが、表示範囲以上の画像をキャプチャーした際の反転、回転が面倒くさ過ぎてコードがとっても油っこくなってしまったのを反省して、今回のMAPエディタでは素直にBGレイヤーをキャプチャーしたらBGレイヤーで表示することにしてみました。
今のところBGレイヤーは通常表示1枚、コピペ表示1枚、それらを上画面、下画面それぞれで、計4枚になっています。これを複数レイヤー重ねて表示したいとか考えたら見直さなきゃならないかもしれないけど、今はまだ大丈夫(私の加減次第ですけど)。
アバター
でんぺん 2018/3/15 9:35 ◆HfSy5ayxtyTa
なるほど、そのレイヤーの使いかたなら大丈夫ですね。複数レイヤー対応だと足りなくなりますからねー…。

僕の時は、公式マップエディタ準拠というか公式マップエディタがあまりにも使いにくかったので+α的な機能で作ったこともあり4面の重ね合わせが必要でしたが、正直4面重ね合わせをマップエディタで作っている人は居ないと思うので3面なり2面なりに減らしてその分のレイヤーをプログラム用に使いたかったですねー。
アバター
しんいち 2018/3/16 6:28 ◆lHy.hAWXbthn
あ〜、やっとできた。取り合えずレイヤー欠けないようにできたけど、欠ける場合の規則性がはっきりしないまま作ったので、謎のアルゴリズムになりました^^;
一応公開しておきます。
公開キー:QK38NE8X
もっとスッキリできる気がするけど(BUTTON(2)を使わないのは私の好み)、今は頭が働かん。
アバター
でんぺん 2018/3/16 18:04 ◆HfSy5ayxtyTa
うまく出来てそうですね! 良かったです。
BGHOMEとBGOFSのやりくりで見た目が同じまま不具合が出ない値をみつけたような感じですね。

BUTTON(2)は便利ですよ。ただVSYNCが1(省略含む)で使ってないとうまく動作しないみたいなのが注意点ですが…。
まあただプチコンのようにBUTTON(2)のような命令がどの言語でも用意されているわけではないので、今みたいに自分で1回だけ押した時の判定にするとかしてみた方が勉強にはなるのかなとも思いますね。

とにかく完成して良かったです。おめでとうございます。
アバター
しんいち 2018/3/16 20:26 ◆lHy.hAWXbthn
>でんぺんさん
ありがとうごさいます。
座標をBGHOMEとBGOFSにどう割り振れば良いのかを決めるために、DIRECTモードで座標をちょっとずつズラしながらレイヤーが欠け始めるポイントを調べるのがとても面倒でした。欠けるかどうかの境界は、割り振った時の差分または合計がレイヤーのサイズ以上かどうか、という感じでしたが、ぴったりレイヤーのサイズと言う訳でもなくて、そこがちょっと気持ち悪いところ(そしてBIGの高解像度のXSCREENではまた少し違ってたりして)。
MAPエディタは取り合えずこれでやってみようかな。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -