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


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0830
ストローム3dish時のpget命令20未解決


ストローム

リンク

2024/8/30(Fri) 15:03:04|NO.102102

hsp3dish時にはpget命令はサポートされていないのでしょうか?

サポートされていないとしたら・・・
色情報の取得は不可能?ですか?



この記事に返信する


GENKI

リンク

2024/8/30(Fri) 21:11:15|NO.102103

見たところ、サポートされていないという記述は見当たりませんね。HDLにも特に記述無し。
https://www.onionsoft.net/hsp/v37/doclib/hsp3dish_prog.htm#DISHUSE

念のため確認。

#include "hsp3dish.as" pget 1,1
#Error 21 in line 2 (???)
-->サポートされない機能を選択しました

過去にも同様の質問が出ていますが解決していません。
https://hsp.tv/play/pforum.php?mode=pastwch&num=79459

お役に立てず、すみません。
Dishで使用できない命令って他にもあるんだろうか…。



buhio

リンク

2024/8/30(Fri) 21:18:58|NO.102104

おっとGenkiさんに先を越されましたが、

https://www.onionsoft.net/hsp/v37/doclib/hsp3dish_prog.htm#CMDLIST

Dishのサポート命令リストのようです。
残念ながらpgetはサポート外のようですね。
(ただし、WEBGLとAndroidではサポート範囲が違うようです)
例えばWEBGLでモジュール変数は使用できますが、Androidはサポート外です

pget使えないのは、ビデオメモリにアクセスするのは難しくてコスト高いってやつなんでしょうかね〜???



ストローム

リンク

2024/8/30(Fri) 21:24:43|NO.102105

ありゃりゃ、サポート外ですか。。
他に方法はないのでしょうか?
正直かなり困りますね・・・。



buhio

リンク

2024/8/30(Fri) 23:20:15|NO.102106

https://hsp.tv/play/pforum.php?mode=all&num=101434

windowsなら、usagi師匠の回答が役立つかもしれません。



窓月らら

リンク

2024/8/30(Fri) 23:53:26|NO.102107

Windows限定かつ画面全体の座標からならWinAPIを使うことで取得はできます。
(HSP3Dish の場合変数にVRAMをコピーできる実験的な機能があった気がするような?)

#include "hsp3dish.as" #uselib "gdi32.dll" // 画面のカラーコード取得 #func CreateDC "CreateDCA" sptr,sptr,sptr,sptr #func DeleteDC "DeleteDC" sptr #func GetPixel "GetPixel" sptr,sptr,sptr repeat redraw 0 color 0,0,255: boxf 0,0,ginfo_winx,90: color 255,255,255 x=ginfo_mx: y=ginfo_my col=get_pixelcolor(x,y) r=col & $FF: g=col>>8 & $FF: b=col>>16 & $FF pos 10,10 mes "x="+x+" y="+y mes strf("col=%06X",col)+" R="+r+" G="+g+" B="+b color: boxf 10,100,60,150 color r,g,b: boxf 11,101,59,149 redraw 1 await 16 loop // 画面ピクセルのBGRを取得 #defcfunc get_pixelcolor int _p1, int _p2 CreateDC "DISPLAY",0,0,0: h=stat // 画面のハンドル取得 GetPixel h,_p1,_p2: p=stat // BGRを取得 DeleteDC h // 破棄 return p



ストローム

リンク

2024/9/1(Sun) 10:10:24|NO.102111

>buhioさん、窓月ららさん

ありがとうございます。
ちょっと難易度高そうですね・・・

実験するのが来週か再来週くらいに
なってしまいそうですがやってみます。



ストローム

リンク

2024/9/2(Mon) 20:52:47|NO.102136

>buhioさん
usagi師匠のプログラムの先頭に
#include "hsp3dish.as"
を追加するとエラーになってしまいました。。

>窓月ららさん
取得できたような気がするのですが、
このプログラムの右上の青い部分に
カーソルを合わせると
中途半端な値を取得しました。
何故でしょう・・・



buhio

リンク

2024/9/2(Mon) 20:58:01|NO.102137

>ストロームさん

こんばんわ。

hgimg4.asをインクルードする場合、自動的にhsp3dishもインクルードされるので、インクルードする必要はありません。
(二重になります)



ストローム

リンク

2024/9/16(Mon) 23:06:45|NO.102224

返信遅くなりました。
#include "hsp3dish.as"
を入れずに自分のプログラムに入れてみたら・・・

判定のところで一定時間経って強制終了になってしまいました。。
pgetがキモのゲームを作る予定なのですが、
ちと厳しそうですね・・・



窓月らら

リンク

2024/9/16(Mon) 23:53:01|NO.102225

なにをしようとしているのかよくわかりませんが、
画面の色をアタリ判定などに利用しようとしているのであれば、
できてもあまり実用的な速度は臨めないと思われます。

もしその処理がどうしても必要なのであれば、画面と同サイズのバッファ(変数)を用意して
画面の状態を書き換えると同時にバッファの状態も書き換えておけば
バッファを peek などで参照することで判定することはできると思われます。
ようするに、VRAMから参照するのではなくて、通常のRAMを参照するようにすればいいのです。
ただし、処理コストはまあまあ増える内容ではあります。



きせん

リンク

2024/9/18(Wed) 16:59:57|NO.102233

pgetでの当たり判定のようなものをつくったことがありますが、
そのときは、bufferで小さいサイズのスクリーンをつくり、
そこをRepeatで色を確認する当たり判定にしました。

おおきく当たり判定をしたあとで、詳細の当たり判定処理、みないなことをすれば、
当たり判定の意味でのpgetなら可能かもしれませんね。

ちなみに昔、
色によるボタンの位置や、地図の国判定をpgetでつくったことがあります。

dishでもその方法ができるといいのですが、難しいです。

ひとつ、試していませんが、
表示外で、もう一つ画面を書いてやる方法があるかもしれません。



ストローム

リンク

2024/9/19(Thu) 18:45:44|NO.102246

やりたいのは当たり判定ですが、常に判定しているわけではなく
最後の画面のみ判定する為、処理速度はあまり早くなくてもよいです。

VRAMの基礎知識がないのでpeekで取る・・・というのが分からず。。
基本が分かるサイトなどあればご教授ください。。



usagi

リンク

2024/9/21(Sat) 17:15:49|NO.102258

>usagi師匠のプログラムの先頭に#include "hsp3dish.as"
こんにちわ
申し訳ないですが、私の例はhgimg4のOpenGl版限定でございます。
"最後の画面=Windowsのウインドウ"でHsp3dish条件下ならこんな感じでどうでしょうか?

; 追加モジュール --------------- #undef pget #module #uselib "user32.dll" #cfunc GetDC "GetDC" sptr #uselib "gdi32.dll" #cfunc GetPixel "GetPixel" sptr,sptr,sptr //#define pget(%1=ginfo_cx,%2=ginfo_cy) _pget(%1,%2) #deffunc pget int x, int y c=GetPixel(GetDC(hwnd),x,y):color c&$FF,c>>8&$FF,c>>16&$FF:return #global ;------------------------------- ; サンプル #include "hsp3dish.as" screen 0, 512, 512 *MAIN redraw 1:await 16:redraw 0 gmode 1:gradf ,,,,1,$ff0000,$0000ff:gmode 5,,,255:gradf ,,,,0,0,$00ff00 pget mousex, mousey : r = ginfo_r : g = ginfo_g : b = ginfo_b pos 30, 30:p=ginfo_cx-20, ginfo_cy-20, ginfo_cx+20, ginfo_cy+20 circle p.0,p.1,p.2,p.3,1:color:circle p.0,p.1,p.2,p.3,0 pos 60,15:color 255,255,255 mes strf("Pos:%3d, %3d\nRGB:%3d, %3d, %3d", mousex, mousey, r, g, b),4 goto *MAIN



ストローム

リンク

2024/9/25(Wed) 20:31:28|NO.102268

usagiさん

おお、ありがとうございます・・・!
すぐには試せないですが今度試します!

Windowsのウィンドウという言葉が出ていますが
アプリ化したら使えないのでしょうか・・・?



ストローム

リンク

2024/9/25(Wed) 21:47:30|NO.102269

usagiさん

連投失礼します。
自分のプログラムに組み込んだら判定がうまく行ってないようなのですが
(どこの場所でも同じ値になる。)
判定するタイミングなどあるのでしょうか。



usagi

リンク

2024/9/25(Wed) 23:05:22|NO.102270

>アプリ化したら使えないのでしょうか?
アプリと言うのはandoroidやiosの事でしょうか?そうであれば使えません。
理由はWindowsのライブラリを使っている為です。拡張子が"exe"のアプリケーションであれば動くと思います。

>判定するタイミングなどあるのでしょうか。
画面を更新した後に取得する必要があります。redraw 1の後です。

サンプルは動きましたでしょうか?もし動いたならストロームさん固有の問題かと思いますので、
もう少し詳細が分かれば、お伝えできることもあるかもしれません。

※例えば、同じ値になるというのはどの変数がどの値か、画面の色は何色など



窓月らら

リンク

2024/9/26(Thu) 22:18:28|NO.102271

Androidでは使えないから意味ないんですが、
celbitmap という実験的な機能はございます。
試す場合はヘルプを参照してください。

とりあえず現状では HSP3Dish環境で pgetは現実的ではないんで
別の方法を模索したほうがいいと思われます。
判定が画像である必要は全くありません。



ストローム

リンク

2024/9/30(Mon) 18:19:44|NO.102283

usagiさん
最終的にはiosアプリ化を目指しているので使えないと意味がないかもですね・・・

サンプルは動きましたが自分のプログラムでは同じようにどの点を取っても
何故かB値が120になります。尚、R値G値は0でした。
画面の色は青、空、緑、黒と様々です。

窓月ららさん
そうなんですね。
説明が難しいのですが、最終図でキャラクターの右上、右下、左上、左下を
pgetでB値が全て255ならクリア・・・というゲームを作っています。
要はマップの青いところに辿り着いたらです。
pget以外の方法となると・・・
マップを1ドット単位で記憶させるぐらいしか自分は思いつきませんが
それなりに広いので現実的ではなさそうです。



usagi

リンク

2024/10/1(Tue) 02:06:11|NO.102298

返信ありがとうございます。
>サンプルは動きました
そうであれば環境の問題ではなく、取得のタイミングか画面の状態が違うのかもですね。

>iosアプリ化を目指している
なるほです、残念ながらそれではお力になれないですね。。。すみません。
iosアプリを作る際にHSPからソースの変換が必要ですし、Windowsのライブラリは使えないからです。

スレッドの解決としては、公式でサポートを待つ必要があると思いますので、
要望を出してみる感じでしょうか。。。



ストローム

リンク

2024/10/6(Sun) 10:13:42|NO.102332

usagiさん
いえ、丁寧にありがとうございます。
勉強になりました!

サポート待ちします・・・



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.102102への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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