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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
1223
アキアキノヒロロ「hgimg4.as」の画面の大きさを変える方法19解決


アキアキノヒロロ

リンク

2019/12/23(Mon) 10:21:38|NO.89093

 おにたまさんのスレッド「HSP3.6β1テストのお願い」の方でも触れさせて頂きましたが、
「hgimg4.as」の画面の大きさを変える方法を考えています。

 「hgimg4.as」のプログラムから「ginfo_dispx / ginfo_dispy」を取得しようとしても、
「960 / 640」になってしまいます。これを普通に取得するために、スクリプト内での
「#include "hgimg4.as"」の位置を下げ、その前で「ginfo_dispx / ginfo_dispy」取得を
試みましたが、結果は同じでした。
 なので、「hsp3dish.ini」の数値を書換え、かつ、そこから「exec」で、「hgimg4.as」の
実行ファイルを実行する「書換え/実行=ソフト」を作ってみましたが、
  「外部ファイル呼び出し中のエラー」   になります。
 そこで、「hgimg4.as」の実行ファイルを作る時、
 #packopt xsize ginfo_dispx
 #packopt ysize ginfo_dispy
とやってみて、これで出来た実行ファイルを「exec」で実行。エラーにはなりませんでしたが、
今度は「640 / 480」になってしまいます。この数値は「書換え/実行=ソフト」の画面サイズ
です。何故、この数値になるのかは置いておくとしても、目的の大きさにたどり着かないことは
確かです。
 「#packopt」で「xsize / ysize」を望む大きさに指定して、実行ファイルを作ればいいだけ
かも知れませんが、ディスプレイの大きさに応じた指定が出来ません。
 何かいい方法はないものでしょうか。



この記事に返信する


通りすがり

リンク

2019/12/23(Mon) 16:24:01|NO.89094

HSP3.6β1テストのお願い 
それに関する記事が出てるのでは?

Dripさんが要望出してるようですね。



アキアキノヒロロ

リンク

2019/12/23(Mon) 18:15:18|NO.89095

 通りすがりさん、ご指摘ありがとうございます。
「NO.88453」で、Dripさんがおっしゃっているんですね。気が付きませんでした。でも、私には
難しすぎて、Dripさんご提示のスクリプト、理解しきれていません。それはそれで、勉強のし直し
です。ただ、このスレを上げた直後、「hsp3info」のツイッターで、K-sさんのリツイートを
見つけました。「[HSP]ウィンドウとフルスクリーンを切り替える」というものです。K-sさんの
これで、自分が望んでいることが出来そうに思えます。

https://qiita.com/skymonsters_Ks/items/00fdb67d6518eb8b2cc5

 ちょっと、お時間を頂いて、これに取り組んでみます。成功したら、解決チェックします。



アキアキノヒロロ

リンク

2019/12/24(Tue) 19:14:49|NO.89101

 経過報告です。

 K-sさんの「[HSP]ウィンドウとフルスクリーンを切り替える」で紹介されているうちの
ウィンドウ拡張版 [fw_test2.hsp] を使わせて頂いた、経過報告をします。

 私の乏しい知識では、ほとんどブラックボックス同然なのですが、用語を調べながら
どうにかプログラムの流れだけはおぼろげながらつかめてきたので、試しに「hgimg4」の
サンプル「tamane2」を組込んでみました。成功と言っていいと思います。フルスクリーン
切り替え、どうにかなっています。画面タッチ操作ではスムーズな動作とはいかないものの、
操作自体はちゃんと稼働しています。もちろん、「珠音ちゃん」モーション再生されています。

 [fw_test2.hsp] の先頭の「#include "hgimg4.as"」を有効にします。230行あたりからが、
「hgimg4」のプログラム組込み箇所になります。248行目の「*mainLoop」が「hgimg4」の
ループです。なので、ループに入る前の設定処理は、この「*mainLoop」の前に記述します。
「*mainLoop」内にある「fw_redraw 0」が「redraw 0」、「fw_redraw 1」が「redraw 1」なので、
この間が、描画処理になります。[fw_test2.hsp]には、「gpdraw」がありませんが、組込みには
必要です。「fw_redraw 0」の下です。「mes」等ももちろんここです。
 以下、235行目の「#ifdef _HGIMG4」から、サンプル「tamane2」を組み込んだスクリプト。

#ifdef _HGIMG4 gpreset #endif fw_init sx = ginfo_sx sy = ginfo_sy px = sx / 2 py = sy / 2 vx = 3 vy = 3 sz = 200 szh = sz / 2 ;================================================================ setcls CLSMODE_SOLID, $404040 setcolor GPOBJ_LIGHT, 1,1,1 ; ライトカラーを設定 setdir GPOBJ_LIGHT, 0.5,0.5,0.5 ; アンビエントカラーを設定 gpload id_model,"res/tamane2/tamane_2" ; モデル読み込み setscale id_model, 0.1,0.1,0.1 setpos GPOBJ_CAMERA, 0,20,30 ; カメラ位置を設定 gpact id_model ;================================================================ *mainLoop stick key if key & 128 : end ; [Esc] if key & 32 : fw_change fw_stat() ^ 1 ; [Enter] ; タッチでカメラ位置を動かす if dragmd { ; ドラッグ中 getkey a,1 if a=1 { dx=0.05*(mousex-dragx)+cx dy=0.05*(mousey-dragy)+cy setpos GPOBJ_CAMERA, dx,dy,cz } else { dragmd=0 } } else { ; ドラッグなし getkey a,1 if a { dragx=mousex:dragy=mousey getpos GPOBJ_CAMERA, cx,cy,cz dragmd=1 } } gplookat GPOBJ_CAMERA, 0,14,0 ; カメラから指定した座標を見る ;================================================================ fw_redraw 0 gpdraw ; シーンの描画 color 255,255,255 pos 8, 8 : mes "HGIMG4 sample" fw_redraw 1 ;================================================================ await 1000/60 ; 待ち時間 goto *mainLoop
 これで、どうにかなっていると思います。K-sさんに、すっかり乗っかってしまいました。
ありがとうございます。

 ただ、私が「hgimg4.as」の画面の大きさを変える方法を考えようとしたのは、「主画面」を
左右2画面に分けて、2つのカメラからの画像をそれぞれに表示するプログラムを作ったのは
いいものの、「960/640」ではキツイと感じたからです。この「2画面プログラム」を、この
サンプル「tamane2」同様に組み込んだところ、元の「960/640」での2画面の表示位置が
おかしくなったうえに、フルスクリーンに切替えると描画が落ち着かなくなります。もう少し
取り組ませて下さい。



アキアキノヒロロ

リンク

2019/12/25(Wed) 07:19:53|NO.89108

 前掲のスクリプトで不要なところをカットし忘れていました。
次の部分は、K-sさんが「hgimg4.as」の取り込み例として、その「hgimg4.as」の中で
使っている変数の指定でした。「#endif」の下の箇所です。すいません。

sx = ginfo_sx ...... ...... szh = sz / 2



アキアキノヒロロ

リンク

2019/12/25(Wed) 13:11:41|NO.89109

 「ウィンドウ拡張版」に「2画面プログラム」を組み込んだ場合にうまくいかないのは、
「ウィンドウ拡張版」自体、オフスクリーンを使ってサイズ変更しているので、バッファの
割振りなり、設定が、かぶっていたりずれているなどしているため、と思われます。
 それを解決すれば行けるだろうと思いますが、その前に、念のため、オフスクリーンを
使っていない「ディスプレイ解像度変更版」の方に組み込んでみました。さて、うまく行くと
思いきや、元の画面表示は、もちろん正常に再現されますが、まったくサイズ が変わりません
でした。どうもディスプレイやビデオデバイスの環境依存が原因らしく、サンプル「tamane2」
の組込みでも、当然ダメでした。試しに、元々の「ディスプレイ解像度変更版」に手を加えず、
先頭の「#include "hgimg4.as"」だけ有効にしてやってみると、もうこの時点で変更不可でした。
完全に環境依存です。
 やはり、オフスクリーンの設定を考え直さないといけないようです。



アキアキノヒロロ

リンク

2019/12/25(Wed) 13:40:18|NO.89110

 度々の書き込み、訂正で、ご迷惑お掛けします。「NO.89108」で、

 次の部分は、K-sさんが「hgimg4.as」の取り込み例として、その「hgimg4.as」の中で
 使っている変数の指定でした。

と書きましたが、「hgimg4.as」を「プログラム」に書換え、読み換えて下さい。
K-sさん、失礼致しました。
 元々の取り込み例が、「hgimg4.as」ではなかったので、「hgimg4.as」のものを取り込む
のであれば、そこに「gpdraw」が必要なのは、当然でした。



アキアキノヒロロ

リンク

2019/12/25(Wed) 20:53:10|NO.89112

 「HSP3.6β1テストのお願い」の「NO.88554」で、おにたまさんが、

  (MIZUSHIKI さん、drip さん、報告の) モジュールとランタイムの不具合......
  ..........β2版で対応できる部分については修正したいと思います。

とおっしゃっています。修正されれば、drip さんが「NO.88453」でやっておられた
「ウィンドウサイズ変更」の方法で、変更が可能になる訳で、これを待った方がいい
のかも知れません。ただ、K-sさんの方法は、現状でも可能なのは確かなことなので、
私としては、バッファ問題を解決したいと思います。



K-s

リンク

2019/12/26(Thu) 11:02:21|NO.89115

モジュール試していただきありがとうございます。しかもすごいタイムリー…
自分のPCでしか試せていないので他の方の動作状況はとても助かります。

まだ色々試されている最中でコメントするのもお節介かもしれませんが少し説明を。

HGIMG4でウィンドウ拡張版のモジュールを使うときは fw_init にパラメータを使用できます。ここに指定するパラメータは他で使用するオフスクリーンバッファのウィンドウIDと重複しない0より大きい値を指定してください。例えば、

gpreset fw_init 4 ; ID 0 はメイン画面用、1,2,3 は↓で使用しているためそれ以外の値 buffer 1, 256, 256, screen_offscreen buffer 2, 512, 512, screen_offscreen buffer 3, 512, 512, screen_offscreen
もしくは

gpreset buffer 1, 256, 256, screen_offscreen buffer 2, 512, 512, screen_offscreen buffer 3, 512, 512, screen_offscreen gsel 0 ; fw_init を実行する直前でメイン画面を選択する fw_init ; パラメータを省略するとこの時点での未使用の ID (ここでは 4 ) が自動的に指定される
といった感じです。

また fw_redraw はメイン画面のみに使用してください。

gsel 1 ; サブ画面1 redraw 0 ; 何か描画 redraw 1 gsel 2 ; サブ画面2 redraw 0 ; 何か描画 redraw 1 gsel 3 ; サブ画面3 redraw 0 ; 何か描画 redraw 1 gsel 0 ; メイン画面 fw_redraw 0 ; 何か描画 fw_redraw 1

ディスプレイ解像度変更版ですが、HGIMG4だと hsp3dish.ini に書かれたサイズの解像度にディスプレイが対応していないとフルスクリーンになりません。私の環境でも 960x640 は変更できませんでした。640x480だと変更できました。800x600 なんかも一般的にいけそうな気がします。

ちなみにディスプレイの大きさは…
http://hsp.tv/play/pforum.php?mode=all&num=88616
先のURLは hsp3dish ですが HGIMG4 でもいけます。現状では WindowsAPI 使うしかないと思います。



アキアキノヒロロ

リンク

2019/12/26(Thu) 22:13:46|NO.89116

 K-sさん、ご返答頂き、本当にありがたく思います。

 「HGIMG4」のこととなると、いつもいつも、一人相撲状態になってしまい、今回もまたかな、と
思い始めていたところでした。せめて、K-sさんの目にとまってくれないものかと、おにたまさんの
「HSP3.6β1テストのお願い」の方でも、K-sさんのお名前、載せさせて頂きました。本当にうれしく
思いました。ありがとうございます。

 ただ、相変わらず、私は万年初心者の域を出られずにいる者です。K-sさんのこのプログラムも
大げさでなく、本当にブラックボックスでして、一行々々、用語を調べながら、悪戦苦闘して理解
に努めている状態です。「お節介」などとおっしゃらずに、よろしくお願いいたします。

 私の「2画面プログラム」ですが、「HGIMG4」の物理挙動を利用したサッカーゲームでして、
敵味方双方のプレーヤーを注視先にした2台のカメラからの映像を2つのサブ画面に描画後、
それらをメイン画面の上部左右に配置し、そのメイン画面の下部にプレーヤーの位置データや
フィールド縮小図上の位置を表示しています。なので、「960 / 640」では、キツイのです。
 さらに、ややこしくしているのは、パソコン相手の試合で、自分のチーム1台のカメラ、1画面
というゲームモード、その上、敵味方双方のプレーヤー2画面を左右外側に向けて、パソコンを
挟んで、二人が対戦できるゲームモード、など、4つのゲームモードを選べるようにしているため、
バッファーによるオフスクリーンの使い回しが入り組んでいて、やっと整理がついている状態です。
 なので、これらのバッファーと、K-sさんの「ウィンドウ拡張版」のバッファーとを、うまく
折り合いのつくものにするには、ちょっと時間がかかりそうです。

 という訳で、「モジュール」という用語すら、まともに理解できていない者が、身の程知らずに
作っているので、色々と足手まといかも知れませんが、お力添え頂けるのは、感謝にたえません。

 「HGIMG4」のスレがもっと活発になってくれることを願う一人です。



アキアキノヒロロ

リンク

2019/12/26(Thu) 22:39:09|NO.89117

 追伸).
 私の環境、

 Windows 10 Home 64ビット

 ティスプレイの解像度
 1366 x 768(推奨)/ 1360 x 768
 1280 x 768 / 1280 x 720 / 1280 x 600
 1024 x 768 / 800 x 600



アキアキノヒロロ

リンク

2019/12/26(Thu) 23:33:24|NO.89118

 ディスプレイの大きさを取得する方法やってみましたが、「HSP3.6β1」では、
うんともすんとも反応なしです。「HSP3.5」でなら、 hsp3dish でも HGIMG4 でも
取得できました。「HSP3.6β1」でも可能にならないでしょうか。そうすれば、
バッファーの割り当てで悩まなくとも、この「HSP3.6β1」で作ったゲームの画面を
思う大きさにして、表示できると思うのですが。ただし、元の本来の大きさと
フルスクリーンとの切替えということは、諦める訳で、その点は、K-sさんの主旨に
そぐわないようで、申し訳ないのですが。



アキアキノヒロロ

リンク

2019/12/27(Fri) 07:37:19|NO.89119

 ディスプレイの大きさを取得する方法、「HSP3.6β1」でも、出来ました。
「hsp3dish.ini」を置かずにやっていたのが、失敗の原因でした。単純な基本的ミス。
すいません。これを使って、取り組んでみます。



アキアキノヒロロ

リンク

2019/12/28(Sat) 07:01:34|NO.89122

 K-sさんの方法で、ディスプレイの大きさを取得すればどうにかなると思ったのですが、
ダメでした。

 自分が考えたのは、"hgimg4.as"からでも取得できるこの方法で得たディスプレイサイズの
数値で「hsp3dish.ini」を書換え、その後、その同じスクリプト内で、本来のプログラムへと
移っていき、終了時に書き戻す、「書換え→本来のプログラム→書戻し」という流れの、
一つのスクリプトを組めば、全画面サイズで実行させられるのではないか、ということです。
 しかし、実行が始まる時点で、「hsp3dish.ini」が参照され、画面サイズはその時点で
「hsp3dish.ini」に書かれている規定の「960/640」になり、その後にディスプレイサイズの
取得となるのであって、その逆には、決してならないわけで、このやり方は無理でした。
 「hsp3dish.ini」の書換えだけを実行し、本来のプログラムは、スクリプトをエディタで
実行するかたちを取れば、書換えたサイズ実行が可能なのですが、一つのスクリプトに
まとめた時点で不可能なことになってしまう。

 なので、やはり、規定の「960/640」で実行される"hgimg4.as"の画面を、全画面サイズに
リサイズするという、K-sさんの「ウィンドウ拡張版」の方法に戻ることになります。

 私の「2画面プログラム」は、現状のままでは、とても手に負えそうにないので、各ゲーム
モードに分解して、その1つだけを組込み、バッファーの調整を進めることにしました。
これがうまくいったなら、4モードの状態での組込みに挑戦するメドも立つんではないかと
目論んでいるのですが、そのためにも、K-sさんの方法を使いこなせるように、勉強し直しです。

 今回も、舌っ足らずの回りくどい言い方になってしまいました。お許し下さい。



K-s

リンク

2019/12/30(Mon) 02:38:58|NO.89127

もしかしたら誤解されているかもしれないので…
あのモジュールでやっているのは見た目の拡大表示であって、スクリーン(バッファ)の拡大ではないので注意してください。hsp3dish.ini や #packopt xsize/ysize で設定する値はバッファの大きさになります。

screen 命令の第2,3パラメータ指定するのもバッファの大きさです。現在 HGIMG4(hsp3dish) では screen 命令は未対応なので途中でバッファのサイズを変えることはできません。OpenHSP見たところ次のバージョンで対応されるかも…

それと前のコメントで説明し忘れたのですが、fw_init に指定するパラメータは celload でのウィンドウIDと重複してもいけません。ご注意ください…



アキアキノヒロロ

リンク

2019/12/30(Mon) 11:47:52|NO.89128

 私には、まだまだ、ブラックボックスです。「見た目の拡大表示」と言う意味も、よく理解できません。
スクリーン(バッファ)の拡大を使わずに、「見た目の拡大表示」がどうやって出来てしまうのか、それを
可能にしているのが、K-sさんの「ウィンドウ拡張版」の方法という訳ですが......。
 本当に、一行々々、用語を調べながら、流れを追って勉強していますが、私の頭が追いついて行きません。
それは努力するしかありませんが、ある程度の結果も欲しいので、平行して、「hgimg4.as」のプログラムの
取り込みを色々やってみていました。その時の疑問の一つをお尋ねしたいと思います。

 「ウィンドウ拡張版」の

#global #ifdef _HGIMG4 gpreset #endif fw_init
の後ろに、「hgimg4」の サンプル「tamane2」を組込んだもの(サンプルフォルダに保存)が、うまく機能して
くれていることは、以前に申しましたが、「ウィンドウ拡張版」との間に、

buffer 1,ginfo_sx/2,ginfo_sy/2,screen_offscreen ; オフスクリーンバッファを初期化 buffer 2,ginfo_sx/2,ginfo_sy/2,screen_offscreen ; オフスクリーンバッファを初期化
を入れてみます。組込んだ サンプル「tamane2」のなかでは、バッファは「1」も「2」も使っていませんが、
[Enter]キー実行すると、1/2サイズが左上に表示される形になってしまいます。[buffer 2] だけを有効にした
場合、拡大表示の時、正常に拡大表示され、[buffer 1] を有効にすると、拡大表示の時、1/2サイズが左上に
表示される形になる。また、バッファ設定の「/2」を外すと、[buffer 1] 有効でも、正常に機能します。
ということは、[buffer 1] は、どんな使い方か、今の私には特定できませんが、「ウィンドウ拡張版」の方で
何らかの形で使われているのでしょうか。
「#ifdef _HGIMG4」のところの「buffer bufid, destw, desth, screen_offscreen」しかありません。
「bufid」が [buffer 1] なのかと、見当がつくぐらいです。

 私の「2画面プログラム」でも、[Enter]キー実行時に、同じことが起こります。
 1/2サイズにした[buffer 1]に描画した画像だけが 拡大され(1/2サイズを拡大した大きさ)、それが左上に
表示される形になり、その右に同様に表示されるようにしているはずの[buffer 2] に描画した画像は、表示
されません。バッファ設定の「/2」を外すと、[buffer 1]に描画した画像のみ、拡大表示されます。
 どうしても、 [Enter]キー実行で、[buffer 1]と[buffer 2]に描画した両方の画像を並べた形では、拡大表示
されません。

 で、です。[buffer 1]は使わず、[buffer 1]と[buffer 2]を[buffer 2]と[buffer 3]にしないと、ダメなのか。
これをやってみました。
 すると、見事、成功 !! 「あっ」と叫んで、飛び上がってしまいました。

 ありがとうございました。「2画面プログラム」の「4モードサッカーゲーム」、これ全てのモードを
組み込んだ一つのスクリプトで、拡大表示に成功です。ただ、モード切替えがうまくいっていませんが、
これは、元の「4モードサッカーゲーム」での問題でして、「ウィンドウ拡張版」との間の問題ではありません。
それはそれで解決すればいいこと。本当に、ありがとうございました。

 ただ、本来の、K-sさんの「ウィンドウ拡張版」、もっともっとしっかり勉強していかなければと、思いを
新たにしています。

 一応、解決と致しますが、K-sさんの更なるご助言が頂けると、うれしいです。

  追伸)
 スクリプトも上げたいと思いましたが、2000行ほどになるうえ、データ量もあるので、「Google ドライブ」
にアップします。
 厚かましいようですが、アップ出来ましたら、またここで、報告させていただきます。



アキアキノヒロロ

リンク

2019/12/30(Mon) 14:10:18|NO.89130

アップしました。

 4modeSoccerGame.zip
 https://drive.google.com/open?id=1kXzvIlYU6vUPwLo36zMEYYkWu7G6zFBB

 スクリプトも同梱しました。
 簡単な解説、「ReadMe.txt」をお読み下さい。

 今回は、物理挙動利用のための「箱ノード」は、あえて完全には透明にしませんでした。
半透明で表示されています。



K-s

リンク

2019/12/30(Mon) 16:11:37|NO.89132

おつかれさまです。
ダウンロードして確認してみたところ、こちらの環境でもウィンドウとフルスクリーンの切替がちゃんと動作していました。

前のコメントでも書きましたが fw_init には他と重複しないウィンドウIDを指定する必要があるので例えば

gpreset fw_init ; パラメータを省略した場合はこの時点で未使用のウィンドウIDが指定される
この場合だと fw_init にはウィンドウID 1 が指定されたことになり、以降 buffer や celload にウィンドウID 1 を指定するとアキアキノヒロロさんが試されたようにうまく動作しません。その点はご注意ください。



アキアキノヒロロ

リンク

2019/12/30(Mon) 20:12:38|NO.89137

 基本的な知識も持ち合わせていない私のような者の相手をしてくださって、ありがとうございます。
他のスレでも、K-sさんのご返答を頂いたこと、ありましたね。重ね重ねで、感謝いたします。

 今回は、私にとっても、本当に「すごいタイムリー…」でした。これで一区切りつけて、新しい年が
迎えられそうです。

 「HGIMG4」のスレがもっと活発になってくれることを願う一人....、より。



アキアキノヒロロ

リンク

2020/1/9(Thu) 15:12:37|NO.89211

 解決としましたが、一つ付け加えておきたいことが出てきました。

 サッカーゲーム作りを進めていますが、このサッカーボールは、球状「gpbモデル」なので、
初期の設定位置は「x=0.0, z=0.0」とします。このボールの扱いには、相変わらず悩まされて
いて、特にゴール決定後の再設定です。物理挙動の命令群でどうにか、ゴール後のボールを
「x=0.0, z=0.0」に戻そうと試みましたが、スッキリとはいきませんでした。
 で、引き継ぎに必要な変数のみを残して、初期化してゲームを再開する方法を探りました。
ここでもまた、以前同様、オフスクリーンバッファのやり繰りで手こずりました。「fw_init」の
パラメータを省略し、未使用のウィンドウID指定というかたちで、それまではやっていましたが、
するとまた、2画面表示がおかしなことになります。
 そこで、未使用指定ではなく、その初期時点で使用していない、ウィンドウID「1」を明示指定
して、ゴール後の再開時に、そのID「1」バッファを他のバッファ同様、初期化してやってみた
ところ、変数の引き継ぎも保たれ、2画面表示も正常になりました。再開後も、画面「拡張/戻し」
の切替え操作も正常です。バッファID未使用指定だと、初期化も出来ない上、そのまま再開すると、
今度はその時点での未使用IDのバッファを使うことになるのだと考えられるのが原因でしょうか。
 このプログラムも出来れば、アップしようかと思います。



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