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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
1224
zezenanaHSP3.6Dishのmes表示でドットが出てしまう20解決


zezenana

リンク

2021/12/24(Fri) 10:43:53|NO.94748

HSP3.6Dishの環境にて
フォントサイズ変更後、mes命令で文字列表示を行うと
特定の文字以降の空白部分に不明なドットが表示されてしまいます。

縁取り文字にするとドットに縁が付くので
何かの文字表示の消し忘れのようなドットゴミです。

以下のサンプルだとBDEFとハイフンの後の空白にドット表示されます。
HSP3.6β1Dishでも同じ状態でした。

デフォルトのフォントサイズやHSP3.51Dishでは問題ありません。
#includeを外してDish以外にすれば問題ありません。


#include "hsp3dish.as" font "",24,0 redraw 0 color 150,150,150 boxf color 255,255,255 pos 5,5 mes "AAAA BBBB CCCC " mes " 000 - 000 000 " mes "DDDD EEEE FFFF " color mes "AAAA BBBB CCCC " mes " 000 - 000 000 " mes "DDDD EEEE FFFF " redraw 1

自分の環境だけの問題なのかも不明なので何ともですが、

空白文字を使わないという選択肢はなさそうなので
同じ症状で改善された方がおりましたら
教えて頂けませんでしょうか?



この記事に返信する


zrs90(5さい)

リンク

2021/12/24(Fri) 14:48:07|NO.94749

ウチのWindows7でも、同様の症状です。

...全角スペースはどうなるかと思い
試しましたがダメでした。
後、フォント、アンチエイリアス等も
設定しましたが、変わりませんでした。

(※この投稿の前に、デマを書いてしまった為
投稿を削除しました。申し訳ないです。)



zrs90(5さい)

リンク

2021/12/24(Fri) 15:32:06|NO.94750

ただ、アンチエイリアスをかけると
フォントや、色のバランス?によるのか
この症状は、緩和される場合があるようです。

この ゴミドット 4kモニタだと、自分の視力のせいも
あって、超見づらい。

(※コレを、完全に消えたと勘違いしました。)



zezenana

リンク

2021/12/24(Fri) 19:43:48|NO.94751

zrs90(5さい) さん

動作確認して頂きありがとうございます。

自分も最初モニター上のゴミかなとか思ったのですが、Windows拡大鏡で見たところ
実際に表示されていたので困っています。

font命令とmes命令のパラメータ変更でのドット表示は一通り確認しています。
フォントサイズを上げる、ボールド、イタリック、MSフォントなどでもドットは表示されます。


デフォルトフォントサイズ22以下だとドットは表示されませんでした。24以上はドット表示されます。
言われている通りアンチエイリアスはドットがぼやける感じですが。。残っていますね。

最もひどいのが、fontのp3パラメータ(フォント装飾の幅)を上げて、
mesで縁取りをすると菱形の装飾付きドットが表示されます。

HSP3.51Dishに戻そうか(縁取りはモジュールなど利用)とも思ったのですが、
既にgmulcolorなどの新規命令も使って制作しているのでダウングレードするべきか
躊躇しています。



アキアキノヒロロ

リンク

2021/12/24(Fri) 22:31:34|NO.94753

"hsp3dish.as"の上位互換の"hgimg4.as"での文字表示方式の変更によるものでしょうか。

#include "hgimg4.as" ; #include "hsp3dish.as" の前に置くか、その代わりとする setreq SYSREQ_USEGPBFONT, 1 ; [0]=[font 設定可] / [1]=[font 設定不可](hsp351までの方式)
として、[font "",24,0] 以下を続けると、ドット表示がなくなります。
#include "hsp3dish.as" のみでドット表示をなくす方法はよくわかりませんが。



youdai

リンク

2021/12/25(Sat) 00:29:02|NO.94754

自分もHGIMG4、DISH両方で文字列表示で意図しないドットを確認しています。
原因、対処方法共に不明です。



zrs90(5さい)

リンク

2021/12/25(Sat) 00:32:01|NO.94755

アキアキノヒロロ さん ありがとうございます。
おかげで、ゴミドットを消すことが出来ました。

私は、poke命令で、半角ブランクを、$20 → $7f 等に置き換えたり
(※ダメでしたが。)、最悪、boxf 命令でゴミドットの上から
重ねて描画する...位しか思いつきませんでした。


後は、zezenana さんのソースに実装出来るか、次第です。


HGIMG4プログラミングガイド 15.フォント表示
を読まないと、動作方法すら、分からなかったです。
(※hgimg4 自体使った事が、なかったので)

まず、この命令のパラメータ自体が、hdlに載ってないのと

フォントデータ『res/font.gpb』ファイルが必要なので
とりあえず、hgimg4のサンプルフォルダに、修正したファイルを入れて
後は、コンパイル+実行で動かせました。



アキアキノヒロロ

リンク

2021/12/25(Sat) 05:22:46|NO.94756

この問題は、過去ログ「HSP3.6β2テストのお願い」スレッドの中の「NO.89378」で報告したのと同じ問題のように思えます。
[mes ""] と [mes " "] との違いについてです。

>mes ""
>の実行結果が「β1」までと違います。これまでは、これで1行分空いて、行送りが出来たのですが、
>「β2」では、
>mes " "
>としないと、行送りになりません。



zezenana

リンク

2021/12/25(Sat) 15:04:46|NO.94760

アキアキノヒロロ さん

改善策についてありがとうございます。

#include "hsp3dish.as"の前に

>#include "hgimg4.as"
>setreq SYSREQ_USEGPBFONT, 1

を追加する方法を試してみたところ、ドットは消えました。

しかし、MSゴシックなどfont命令でフォントを指定しても反映されないらしく
すべて固定のプロポーショナルフォントになってしまいます。

それと、日本語(2バイト文字?)は文字化けするようですので、
これはこれで色々と問題がありそうな気がします。。


あと「HGIMG4プログラミングガイド」に記載の通り、
res/font.gpbを指定しましたが、私の環境ではフォントが表示されず、
なぜか zrs90(5さい)さんの行ったhgimg4のサンプルフォルダ利用でしか
確認できませんでした。


mes "" の実行で改行しない問題について投稿されていたのは気づきませんでした。
これ、前々から気になっていましたが、未だに解決していませんよね?

不具合の性質はだいぶ異なりますが、HSP3.6β以降のmes命令機能追加不具合が
関連しているということでしょうか?


なんか小手先だけの回避策では難しい気がしてきました。

HSP3.6のバグ修正を待つしかないかもしれません。。



アキアキノヒロロ

リンク

2021/12/25(Sat) 20:37:03|NO.94765

"hgimg4.as"での非明示的初期設定で、[font 設定可] となっているところのもの、すなわち、明示すれば、
>setreq SYSREQ_USEGPBFONT, 0
となっているものを
>setreq SYSREQ_USEGPBFONT, 1
で、[font 設定不可](hsp351までの方式)にすることで、[hsp351] までの方式に戻す、ということです。
なので、
>すべて固定のプロポーショナルフォント
になり、日本語には対応しなくなります。

書き加えたテストサンプルファイルを保存したフォルダ内に、[res] フォルダを作り、その中に、[font.gpb] ファイルおよび、[shaders] フォルダをフォルダごとそのままコピーして、実行して下さい。
( [font.gpb] ファイル & [shaders] フォルダは、[sample/hgimg4/res] にあるものです。)
こうすれば、hgimg4のサンプルフォルダ以外でも、想定通りになると思います。
>setreq SYSREQ_USEGPBFONT, 0
とすれば、あるいは、
>#include "hgimg4.as"
だけ書き加えたものなら、[font 設定可] なので、
>font "フォント名",大きさ,スタイル,修飾の幅
の指定が出来るはずです。日本語も可。ただし、空白にドット表示されることになります。

[setreq] については、過去ログ「HSP3.6β1テストのお願い」スレッドの中の
「NO.89216 / NO.89250 / NO.89252 / NO.89274 / NO.89284 / NO.89351 / NO.92217 /
NO.92219 / NO.92220 / NO.92230 / NO.92253 / NO.92273」
および、過去ログ、アキアキノヒロロ「バッファに表示した文字の透過表示方法」スレッド
を見て頂けると幸いです。



zezenana

リンク

2021/12/26(Sun) 14:45:40|NO.94771

アキアキノヒロロ さん

詳細な説明ありがとうございます。

>>すべて固定のプロポーショナルフォント
>になり、日本語には対応しなくなります。

これだと日本語を画像化するなど修正量が大きくなってしまいそうですね。。

-----

ドットゴミ表示ですが、とりあえず暫定対応のモジュール作ってみました。

謎なモジュールとなっていますが、画面外(0,-1000)に仮表示したmesの出力情報を使って
空白分のpos移動を行うことで空白を出力しないようにしました。


#include "hsp3dish.as" #module #deffunc mes_fix str _mes, int _sw ms=_mes:cxy=ginfo_cx,ginfo_cy pos 0,-1000:mes _mes,_sw mxy=cxy.0+ginfo_cx,cxy.1+ginfo_cy+1000 pos 0,-1000:mes " ",_sw&$1E sxy=ginfo_mesx,ginfo_mesy n=strlen(ms) if n=0{ if(_sw&1)=0:pos cxy.0,cxy.1+sxy.1 }else{ i=0:x=cxy.0:y=cxy.1 repeat if i=n:break c=peek(ms,i):i++ if c=' '{ j=1 repeat if i=n:break c=peek(ms,i):if c!' ':break i++:j++ loop x+=sxy.0*j }else{ j=1:m="":poke m,0,c repeat if i=n:break c=peek(ms,i):if c='\n':break if c!' ':poke m,j,c:else:break i++:j++ loop poke m,j,0:pos x,y:mes m,_sw|1 x=ginfo_cx:y=ginfo_cy if c='\n':x=cxy.0:y+=sxy.1 } loop pos mxy.0,mxy.1 } return #global font "",40,0,3 redraw 0 color 150,150,150 boxf color 255,255,255 pos 10,5 mes "HSP 3.6 ドット ゴミ表示",4 mes "AAAA BBBB CCCC ",4 mes " 000 - 000 000 ",4 mes "DDDD EEEE FFFF ",4 color objcolor 255,255,255 mes "AAAA BBBB CCCC ",2 mes " 000 - 000 000 ",2 mes "DDDD EEEE FFFF ",2 color 255,255,255 objcolor 0,0,0 mes_fix "" mes_fix "HSP 3.6 ドット ゴミ修正",4 mes_fix "AAAA BBBB CCCC ",4 mes_fix " 000 - 000 000 ",4 mes_fix "DDDD EEEE FFFF ",4 color objcolor 255,255,255 mes_fix "AAAA BBBB CCCC ",2 mes_fix " 000 - 000 000 ",2 mes_fix "DDDD EEEE FFFF ",2 redraw 1

HSP3.6のmes命令不具合を修正して頂くまでは
これで対応できるか、負荷など問題ないか組み込んでテストしています。



zrs90(5さい)

リンク

2021/12/26(Sun) 15:40:22|NO.94772

応急処置で、次のような方法を思いつきました。
ちょっと面倒ですが...

zezenana さんのサンプルの一部を
下記のように書いてみて下さい。

mes "AAAA BBBB CCCC "



mes "AAAA",1 : mes " ",1 : mes "BBBB",1 : mes " ",1 : mes "cccc",1 : mes " "

簡単に説明すると、mes 命令で、改行しないように設定して文字だけ表示
マルチステートメントで、そのままつないで、
半角、全角スペースだけを再度、mes 命令で、改行しないようにして表示...
の処理を繋げていく

...という方法です。これで一応、ゴミドットが出なくなりました。
用途が限定されるかも、しれませんが、どうでしょうか?



zezenana

リンク

2021/12/26(Sun) 16:18:19|NO.94773

zrs90(5さい) さん

対応方法考えて頂きありがとうございます。

ゴミドットの出る条件が「何かの文字の後」だとすると
ワード区切り改行なしにすることで空白文字列を正常表示できるということですね。

試したところ確かにゴミドットは出なくなりました。

しかし、そのままだとposの改行ポジションが最後のmesの開始位置になるらしく
改行入り文字列だと次のmes表示位置が変化します。

改行なしオプションや文字列内の改行の仕様がイマイチわかりにくいのですが、
それについては処理追加して毎回posで指定すればいけそうです。

私の方も少し簡潔なスクリプトを考えてみます。



よしびと

リンク

2021/12/26(Sun) 18:03:43|NO.94774

ありがとー!



zrs90(5さい)

リンク

2021/12/26(Sun) 18:10:28|NO.94775

ただ、この方法、ポジション指定も面倒なんですが
オブジェクト(button と input)には、使えないので
その場合は、zezenana さんが、作られたモジュール
(※1日足らずで出来るんですね。すごいです。)
...と、同様の物が、必要になると思います。


ー追記ー

zezenana さんのソースを書き換えて、テストしてました。
button に、ascii文字($20〜$7f)にブランクを書いた物
くっつけたら、見事にゴミドットが出ました。
(※ input 命令で、ダメだったので予想はしてましたが。)

私、意地が悪いので、フォントをwebdingsとかに
変えたら、逆にドットが抜ける(?)場合もあるようです。

推測ですが、このゴミドット、ブランクの前の文字の一部
と思います。...と言うのは、アンチエイリアスをかけると
文字によって、ゴミドットの濃淡が違うので
その事から、一定の文字ではないと、思われます。

また、ゴミドットが出ない文字は、たまたまかも?
(※フォントを変えたり、アンチエイリアスをかけると
ゴミドットが出る場合がある)

以前、8月末位に、掲示板でBMSCR構造体
の話をされていたと思いますが、あの話も
フォント絡みなんですが、まさか、今回の話も
関係あるんでしょうか?

...いずれにしても、厄介なバグですね。



おにたま(管理人)

リンク

2021/12/26(Sun) 21:53:55|NO.94779

mes命令の表示不具合についてご報告ありがとうございます。
お手数おかけします。以前に描画されたフォントのゴミが残ってしまっているようです。
原因など調査して今後のバージョンで修正させて頂きます。



zezenana

リンク

2021/12/27(Mon) 08:31:43|NO.94786

>zrs90(5さい) さん

わざわざ深いとこまで調べてもらってすみません。。

確認しましたが、button命令と input命令も同じ文字出力処理を使っているようです。

こちらについては回避策ありませんので、言われている通り
画像描画やキー入力を駆使してモジュールを作るしかありません。

私の制作ではbutton命令とinput命令は使っていないのでまずはmesのみ優先でしょうか。

前のHSP3.6のBMSCR構造体不具合の質問よく覚えていましたね。。
あれも、mes命令を使った丸み縁取りモジュール絡みだった記憶があります。

BMSCR構造体にてフォント情報が取れないと文字装飾や位置情報の処理が出来ないので
文字描画として関連があると言えばあるのかもしれません。


>おにたま(管理人)さん

本件勝手にバグ認定していましたが、不具合の見解が一致していたのでよかったです。
フォントサイズを大きくした文字表示はレアケースかも知れませんが、
mes命令のユーザ利用頻度からすると、この不具合の影響度は大きいと思っています。

>原因など調査して今後のバージョンで修正させて頂きます。

すみませんがよろしくおねがいします。


-----

NO.94771の暫定対応モジュールですが、全角空白に対応するの忘れていました。。
(そもそも空白と改行以外、2バイト文字をチェックしていない)
自分は制作で全角空白を使わないので良いのですが、需要あれば追加修正します。



zrs90(5さい)

リンク

2021/12/27(Mon) 11:18:39|NO.94787

おにたまさんへ
hsp3.x 関連の製作/修正等お疲れ様です。
難しい案件ですが、修正して頂けるとの事なので
ゆっくり待ちます。ありがとうございます。


zezenana さんへ
たまたま、元ソースが短かかったので、動作確認のつもりでした。
私は、この掲示板で、珍種扱い(※スマホ投稿のみ、所持pcも、Windows7のみ)
という環境なので...

BMSCR構造体の件ですが、実は、hsp3.6から mod_fontdlg.as で
一部機能が使えなくなっていて、色々、調べている過程で
覚えていた、だけです。こちらこそ、原因が分かって
助かりました。ありがとうございました。


アキアキノヒロロ さんへ
動作方法等、丁寧に説明していただき、ありがとうございました。
hgimg4 でのソフト製作、期待しています。

Twitterでのムービー見させていただきました。
昔学校の体育館とかに置いてあった
3色スポットライト?みたいな処理も出来そうですね。
こういった 美味しそうな サンプル(※)があると
hgimg4 で製作する方が、必ず出てくると思います。

(※大昔、sfcで、F-ZEROというゲームが発表された時
参入ソフト業界の方々が、こうやって使えば良いのかー
と驚いていた話を、見たことがあります。
以降、モード7の使い方(※記憶違いかも)のお手本になってました。

...しまった。実年齢がバレるな。5さい で通してるのに。笑)


youdai さん へ
別環境下の情報、ありがとうございました。
こういった情報も助かります。

ー追記ー

高度なスキル持ちの方々の中で、私みたいな半端者が
投稿するのは、大変ですね。



zrs90(5さい)

リンク

2021/12/27(Mon) 13:06:14|NO.94788

忘れてました。私の投稿の 94772 の
改行の件ですが

文末に

+ "\n" を使って、改行処理。
次の行は、pos 命令で、x座標だけを指定すれば
ok です。



zezenana

リンク

2021/12/28(Tue) 00:11:05|NO.94797

とりあえず修正バージョンまでの回避策もわかりましたので解決とします。

ご協力ありがとうございました。


>zrs90(5さい) さん

この掲示板、小中学生?のような方も来るようなので
色々なレベルの投稿があって良いと思いますよ。

>+ "\n" を使って、改行処理。
>次の行は、pos 命令で、x座標だけを指定すれば

これだとmesの分解だけで完結しますので簡単で使えると思います。
私のモジュールもいりませんし。

欠点としてはstrf("[%-20s]",a)などの可変文字列の空白を扱うことが出来ない点でしょうか。



zezenana

リンク

2021/12/28(Tue) 22:12:53|NO.94814

追記です。

現制作のついでに NDKビルドでも確認をしましたが、
Androidエミュレータ上ではドットゴミは確認されませんでした。
こちらは普通にmes命令が動作しています。

ですので今の所 Windowsで発生している問題となります。

※Android環境では高ppiとなりますので、確認に以下の違いがあります。

・フォントサイズ100(そのままでは小さすぎて分からなかったので)
・Android標準のプロポーショナルフォント(英字がRoboto?で日本語がモトヤ?)



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