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

アバター
たらこ ◆PWy.X.JqENU2
2018/12/24 20:37
質問
タッチ
GPAINT で色をぬって、touchで色を判断して、その色だったら、音を鳴らす
というやつを作っています
間違ってたら、訂正お願いします

コメント

アバター
たらこ 2019/1/2 9:21 ◆PWy.X.JqENU2
ツララさん
そうですね
8bitとか6bitの話はよくわかっていませんでした。
アバター
たらこ 2019/1/2 10:59 ◆PWy.X.JqENU2
8bit分でとても鮮明に表すことができるけど、(少数とか使って細かく)
5bitにして(四捨五入)
大体の形で表す(概数)という感じでしょうか?
何となくつかめた気がします
アバター
はる 2019/1/2 11:17 ◆75Vh4SY8TdKS
そんな感じです。

ですが、
プチコンでは5bit(プチコンでは物理コードという)でしか表示できません。
アバター
たらこ 2019/1/2 11:31 ◆PWy.X.JqENU2
32bitのときの色って
透明8bit,赤8bit,緑8bit,青8bitですよね
明るい赤か暗い赤かを31(255-255 mod 8)で示して、各色を混ぜて複雑な色を作るって感じですかね
透明に明るい暗いってあるんですか?
だいぶ前の話になってしまってすみません…
アバター
たらこ 2019/1/2 11:36 ◆PWy.X.JqENU2
はるさん
ありがとうございます
前に32bit,16bitの話がありましたが、プチコンでは描写に5bitまでしか使えないということでしょうか?
アバター
はる 2019/1/2 12:30 ◆75Vh4SY8TdKS
>透明に明るい暗いってあるんですか?

透明は明るい暗いではなく、
透明度です。
透明が0なら完全に見えなくなり、
透明が127なら半透明になり、
透明が255なら不透明になります。


>前に32bit,16bitの話がありましたが、プチコンでは描写に5bitまでしか使えないということでしょうか?

プチコンは32bit,16bitあるうちの16bitしか使えません。
ですが、指定するときは32bitで指定することが多いです。
アバター
たんじぇ 2019/1/2 13:02 ◆WDmFkVwZ4yMl
透明8bitについては、色として表すのに赤緑青の8bitだと24bitになってしまって3bytesになってしまうけど、データを表すのには4bytes(32bit)幅のほうがいろいろと都合がいいので、1byte(8bit)分に透明度を付け加えておいて32bitで色を定義しておこうという流れがあります。
(時代背景的にはPNG画像フォーマットが出てきた20世紀末あたり)

色の管理の定義だけなので、実際はその色で出るかどうかは表示するモノ(ゲーム機だったりTVだったり映像配信だったり)に依存しています。

実際は透明度が設定されていても無視される場合があって、プチコンの場合もGRPに書く場合は透明度が0〜255で指定されていても、透明か不透明かの2パターン(1bit)で扱われます。

GRPに書くときは透明度は無視されますが、SPCOLORで指定する色にはちゃんと透明度が反映されるので、スプライトだからってキャラ移動だけに使うのでは無くて、透明度や乗算をうまい具合に使えばBGのように使えたりします。
アバター
たらこ 2019/1/2 14:47 ◆PWy.X.JqENU2
はるさん
ありがとうございます
勘違いしてました
たんじぇさん
なるほど
Bgのように使う場合って何かメリットってありますか?
アバター
あまさとしおん 2019/1/2 17:54 ◆mzDKTVUAtwqE

「SPCOLORで指定する色にはちゃんと透明度が反映される」がポイントなので「BGを半透明にしたいとき」じゃないかなぁ・・・?
アバター
あまさとしおん 2019/1/2 17:55 ◆mzDKTVUAtwqE
(ちなみに、BGの色合いを変えるBGCOLORという命令があるのですが、こちらも残念ながら半透明を使うことはできないです…
アバター
たんじぇ 2019/1/2 18:34 ◆WDmFkVwZ4yMl
たとえばスーパーマリオみたいなアクションゲームで、画面手前に画面幅いっぱいのスプライトの雲があって地面が見えないけど、時間経つと雲がすこし透明になって地面が見えるようにしてみるとか。

ダンジョンの中で画面いっぱいの半透明のスプライトの霧があって、半透明と透明を繰り返しているとか。

プチコンの半透明はスプライトしか使えないので、半透明で使いたい雲や霧のBGの代わりにスプライトを使うという感じです。

ファミコン版のスーパーマリオで?ブロックはBGだけど、?ブロックを叩いたときはBGの?ブロックを消してスプライトで?ブロックが叩かれた移動の処理をして、元の位置に戻ったらスプライトが消えてBGの?ブロックが表示されるような処理になっています。


プチコンのスプライトは半透明以外にもスプライトの裏に表示している色と加算が出来るので、色の計算のロジックさえちゃんとしていれば簡単なコードでいろんな色を表現出来ます。

たとえばお絵かきツールのHSVカラーを表示したりとかもできます。
[DRB3N8QV]
アバター
おちゃめ 2019/1/3 13:42 ◆jH1opV6FnGyx
GRAY関数の仕組みを解説して欲しいとのことなので簡単に書いておきます。

GRAY関数は、プログラムを見ての通り
GR MOD 8の値が

2、3、6、7の時 Rを8プラス
4、5、6、7の時 Gを8プラス
1、3、5、7の時 Bを8プラス
という処理を行っています。(GRは0〜255の値を想定)

これは書き換えると

0の時 そのまま
1の時 Bを8プラス
2の時 Rを8プラス
3の時 RとBを8プラス
4の時 Gを8プラス
5の時 G、Bを8プラス
6の時 G、Rを8プラス
7の時 G、R、Bを8プラス

という処理になっています。

一見すると分かりにくいですがGRBを3桁の2進数として考えると0〜7は000〜111となりこの処理は単純明快であることが分かります。
輝度はG>R>Bで輝度は2倍もしくはそれ以上なのでこの単純な処理で概ね輝度単位での並べ替えができているというわけです。
Rは概ねBの2倍の輝度なのでこの2進数的な考え方で問題ないように見えますが、GはRの3倍弱の輝度であるためこれでは誤差が大きくなりそうに思うかもしれません。
しかし、この並べ替えは8で割った余りの部分にだけ処理を行っているため目立つ誤差にはならないのです。

ちなみに本来であれば8単位で丸めた値に8プラスする必要があるのですが、GRAY関数は表示のことしか考えてないためGRAY関数を使って疑似256諧調のゲームを作るならばRGB16関数のようにRGBの各値を8の倍数値に丸めておかないとGSPOITで誤判定が起きてしまうため注意が必要です。

これで、GRAY関数の仕組みは完全に理解できたでしょうか?(分からない部分があったら遠慮なく言ってください)
それと、GRAY関数がこのトピックスのテーマとつながっているといことが分かると思います。
アバター
たらこ 2019/1/6 21:12 ◆PWy.X.JqENU2
あまさとしおんさん たんじぇさん
ありがとうございます。
Bgじゃ半透明にできないから、spriteを使うんですね。
よくわかりました
アバター
たらこ 2019/1/6 21:29 ◆PWy.X.JqENU2
おちゃめさん
つまり、B<R<BR<G<GB<GR<GBR の順で明るくなるということですよね!
001,011,111,010,100,101,000で0~7まであるということですよね!
そこは分かったのですが、GRAY 関数の書き方がどういう仕組みになっているのかがわかりません!
DEF GRAY(GR)
 RETURN RGB(GR+(GR MOD 4>1)*8,GR+(GR MOD 8>3)*8,GR+(GR MOD 2)*8)
END
の(<)の意味ってなになんでしょうか?
あと4とか1とかの数字の意味が分かりません!
アバター
たらこ 2019/1/6 21:30 ◆PWy.X.JqENU2
遅れてすみません!
よろしくお願いします!
アバター
おちゃめ 2019/1/6 22:57 ◆jH1opV6FnGyx
GR MOD 4というのはGRを4で割った余り(剰余)を示しています。
したがって、GR MOD 4>1はその余りが1より大きいという意味です。
4で割った余りが1より大きいというと
01234567で考えると2367が当てはまります。
条件式というのは成立した時は値が1になり、不成立の時は値が0になります。(PRINT 3>2とか適当な条件式で実際に確かめてみると良い)
その条件式の値を8倍したものをプラスしているため「2、3、6、7の時 Rを8プラス」というのが戻り値計算のGR+(GR MOD 4>1)*8の部分で行っているわけです。
アバター
たらこ 2019/1/7 8:33 ◆PWy.X.JqENU2
なるほど!
よくわかりました!

コメントを書く

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

- WEB PATIO -