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

アバター
あんちもん ◆8qCJSJ1bKTIQ
2020/12/6 16:07
質問
お絵かきツールのペンの処理のアイデア募集
一筆書き中に一度色を置いた座標には、ペンを離すまで色を置かない(色の重ね塗りを行わない)という処理を作ってみたのですが…
要素数[キャンバスの横幅,キャンバスの縦幅]の配列を用意してピクセルごとに色が置かれたかどうかのフラグを立て、ペンを離したらフラグを折るというようにしています。
この挙動をさせるのに何か他にアイデアはあるでしょうか?皆さんの意見を伺いたいです。
具体的にどんな挙動かはリンク先の動画を参照してください。環境はプチコン4です。
https://twitter.com/antimon_sb/status/1335124881172656129?s=21

コメント

アバター
あんちもん 2020/12/6 16:14 ◆8qCJSJ1bKTIQ
線が単一色でない場合(アンチエイリアスがかかったペンなど)はまた異なる問題があるかと思いますが、今回は線の色は一定であるとします。
アバター
Na 2020/12/6 17:50 ◆QoELVrBXBQCI
1.
ペンを置いた座標ごとに
GPGET→色を合成→GPSET
とやっているんだったら、
ペンを置く前のキャンバスを別配列(または別のグラフィックページ)にコピーしておき、
配列から取得→色を合成→GPSET
とするのはどうでしょう。

2.
キャンバス全体を重ね塗りした後のデータを計算して配列に入れておいて、
ペンを置いたところだけそのデータに置き換え。
色の合成にARYOPが使えるなら速そうですが、1ドットずつ計算しなきゃいけないならこの方法は遅そうです。
アバター
あきと 2020/12/6 19:33 ◆qGd5dQw2g3a2
Naさんと似た処理ですが…

・別のグラフィック面を参照している画面を覆う大きなスプライトを設置する。グラフィック面は0クリアしておく。半透明指定もしておく
・ペンが描画するのはそのスプライトのグラフィック面で、指定のカラー以外では書けないようにする
(0でないピクセルには書き込めない)
・ペンが離れたらスプライトのグラフィックと実画像を合成する

スプライトのピクセルの最小・最大座標を取得してから合成処理をかければ時間も短縮できる。(が、最悪のパターンも発生はする)
アバター
あんちもん 2020/12/7 8:01 ◆8qCJSJ1bKTIQ
回答ありがとうございます、様々なアプローチを知れて大変参考になりました!
手探りで作ってるので、自分の方法が他の方法と比較して大きな問題がなさそうか確かめたいというのも質問した理由の一つでした。
リファレンス見てたらGARRAYやGUPDATEなど使えそうな命令もいくつか見つけたので色々試してプログラムを組んでこうと思います。
アバター
moh6an 2020/12/8 16:44 ◆6Z.AzgCiEzTT
書き込もうと思ったらすでに答えが出てた
(MOHANもこの方式)

コメントを書く

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

- WEB PATIO -