HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0123
MSX68000"pget"で色がうまく読み込めない8解決


MSX68000

リンク

2020/1/23(Thu) 19:06:03|NO.89325

 今作っているゲームで、画面上のドットを読み取る(マイクロソフトBASICで言うPOINT関数、プチコンで言うGSPOIT関数)と処理に便利なので、"pget"命令を見つけて、読み取れるかテストプログラムを動かしています。

 ところが"pget"実行後、システム変数ginfo_r,ginfo_g,ginfo_bを見ても、読み取れずゼロになる事が多く(一方で読み取れている場合もあるが)、困っています。

 "pget x,y"のアドレス指定自体は間違っていません。color命令など色がからむ命令を実行するとginfo系が変化するそうなので、"pget"実行直後にginfo_r,ginfo_g,ginfo_bを個別の変数に入れて、mesでその変数を出してみても、全部"0"だったりします。

 実際のプログラム例をここに引用していないので、答えにくい部分もあると思いますが、原因があるとしたら、どこを疑えばいいでしょう?



この記事に返信する


ZAP

リンク

2020/1/23(Thu) 19:24:54|NO.89326

考えられる原因

gselで調べたいscreen or バッファを正しく指定できていない



あらや

リンク

2020/1/23(Thu) 19:46:41|NO.89327

HSPのウィンドウ(クライアント領域)の外を読み込もうとしているとか…



kanamaru

リンク

2020/1/24(Fri) 17:33:15|NO.89333

既に挙げられている可能性もなくはないのでしょうが、
一番最初に疑うのは、そもそも正しく取得できてることです。
例えばもし調べている座標の色が黒の場合、ginfo_r、ginfo_g、ginfo_bは
確かにすべて0になると思います。
他にも赤の場合はginfo_rは255、ginfo_gとginfo_bが0になります。
そんなわけで0だったとしても正しく取得できてる可能性があります。
といっても質問者さんもその可能性は調べているとは思いますが、
正しく取得できてない前提になっているので一応可能性を提示しておきます。



あらや

リンク

2020/1/24(Fri) 18:34:06|NO.89334

>HSPのウィンドウ(クライアント領域)の外を読み込もうとしているとか…
自分で試してみましたが、この場合は白(RGB全てが255)となるようです。

黒になるという事は確実にウィンドウ内の色が取得出来ているようです。

あと考えられるのは

・ZAPさんの仰る通りgselが間違っている。

・gselも座標も合っているが、
pgetをした後に何らかの描画をして
描画の前後で色が変わっているため違う色に見える。

・buttonなどのオブジェクトの色を取得しようとした。

・kanamaruさんの仰る通り、どこかで勘違いしている。

このくらいでしょうか。



MSX68000

リンク

2020/1/26(Sun) 18:42:09|NO.89343

 回答ありがとうございます。

 あの後もいろいろ試してみたのですが、全く要領を得ず…作りたい仕様が、
ドット読み取りでなく二次元配列事前定義でも作れるので(こっちだと初期定義がやや
面倒だが、一度完成すれば描くのも読むのも楽で早い)、配列で作り直す事にしました。

 既にとりかかっていて、別の論理バグで悩んでおりますw



ソラ

リンク

2020/1/26(Sun) 20:29:42|NO.89344

・コメントを書く
・変数名をわかりやすくする
・値は直入力ではなく定数を使う
・if命令で変数の値が想定外の値になってないかこまめに確認する
コーディングの際はこの3つを意識しながら書いてます。
これで大分バグは防げるかと。


・発生条件を正確に絞り込む
・1行ずつ順番にDialogで変数を確認する
・1日寝かせてからもう1度確認する
バグ修正の際はこの3つを意識しながら書いてます。
どうしてもわからないときは「同じプログラムを書き直す」のも手かと思います。
今回はすでに別の方法で解決してるみたいですが、今後の参考になれば幸いです。



ZAP

リンク

2020/1/26(Sun) 22:48:04|NO.89345

老婆心ながら、当初の不具合の検証と解決ができてないのであれば
この先また同じような不具合に遭遇する確率は高いと思われるので
別の方法を取るにしても当初のデバッグはやっといたほうがよくないですか。

皆さんの提示されたヒントをもとに検証されたのでしょうか?



MSX68000

リンク

2020/3/31(Tue) 17:29:33|NO.89873

 いきなり後日談でコメントになってしまうのですが、やっと正確に読める様になりました。
原因は

・Windowsのペイントブラシで作った画像のRGBが、必ずしも三原色255でなく、薄めだった。
・ginfoが保持している期間が短く、colorなどを使うとすぐ変化してしまうのを見落とした。
・ginfoをg_infoと書いていた。

 などでした。これを受けて昨日、画面上の座標をセル単位次いでドット単位ずらしで取得し
RGBの組み合わせで、0(黒)〜7(白)の8色単位で返す関数を作成。順調に動いております。



ONION software Copyright 1997-2023(c) All rights reserved.