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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1016
ありpaletteとfontの動作検証のお願い (特にME・Vistaユーザーの方)11解決


あり

リンク

2008/10/16(Thu) 17:13:35|NO.20241

本来は募集扱いの内容だと思うのですが
解決マークの指定が出来ない様なので、質問スレで投稿させて頂きます。
まず一つ目のスクリプトです。

;パレットアニメテスト screen 0,640,480,1 :cls 4 c1=1 c2=250 p= c1,c1,c1 ; p(3)=c1,c1,c2 ;同じ組み合わせがあると p(6)=c1,c2,c1 ;動作がおかしくなる? p(9)=c2,c1,c1 ; repeat 4 palette cnt+1,p(cnt*3),p(cnt*3+1),p(cnt*3+2),1 loop repeat 10 pc=cnt\4+1 palcolor pc :boxf 0,cnt*48,640,cnt*48+48 loop pno=0,3,6,9 *main redraw 0 pb=pno(0) ;パレット内容を一つずつずらす pno(0)=pno(1) pno(1)=pno(2) pno(2)=pno(3) pno(3)=pb repeat 4 palette cnt+1,p(pno(cnt)),p(pno(cnt)+1),p(pno(cnt)+2),1 loop redraw 1 wait 50 goto *main
これを起動すると、4色の色が一つずつ上にずれていく、という動作になっていると思いますが
c1を0にしたり、パレットの色指定の数値が重複しているとパレットの変更が正常に行われてないように
見えます(錯覚なのかもしれませんが)

私の環境(MEx2台)では同じ症状になるので、他の方の環境でも
同じような動作になるのか、検証して頂きたいです。


二つ目はfont命令を使ったスクリプトです。

;互換フォント表示テスト font "FixedSys",30,31 ;標準フォント mes "1 あいうえお" font msgothic,30,31 ;正解(マクロmsgothic) mes "2 あいうえお" font msmincho,30,31 ;正解(マクロmsmincho) mes "3 あいうえお" font "msgothic",30,31 ;間違い(マクロを””で囲っている) mes "4 あいうえお" font "msmincho",30,31 ;マクロ使用法間違い(同上) mes "5 あいうえお" font "MSゴシック",30,31 ;フォント名違い mes "6 あいうえお" font "MS明朝",30,31 ;フォント名違い mes "7 あいうえお" font "a000000",30,31 ;フォント名間違い(半角英数) mes "8 あいうえお" font "あ000000",30,31 ;フォント名間違い(全角かな) mes "9 あいうえお"
多分XPで起動した人には、一見すると何が問題なのか解らないかもしれませんが
これを私の環境(MEx2)で起動すると、4と5と8で文字化けになります。

おそらくはMEとXPではfont命令で使われる互換フォントに違いがある為に起こる
現象だと思われますが、他のOS環境が手元に無いので
皆様のお力をお借りして検証したいと思った次第です。

二つとも、間違いが無いか見直しを徹底したつもりですが
記述及び認識に誤りがありましたらご指摘下さいませ。

以上、一度に二つのスクリプトを投稿する事となってしまいましたが
ご協力いただければ幸いです。



この記事に返信する


エレキ掃除機

リンク

2008/10/16(Thu) 17:19:39|NO.20247

Vistaですが、自分も4と5と8で文字化けします。

a=8700 mes "内容はaです"
こういうスクリプトで、内容は8700ですと出るようなときに何らかのことが生じるのかと。



エレキ掃除機

リンク

2008/10/16(Thu) 17:21:28|NO.20248

1つ目のスクリプト分かりません。すみません・



inovia

リンク

2008/10/16(Thu) 18:12:46|NO.20249

本当ですね。XPだけフォント名が違っていても化けませんね。

Win95
http://tkooler.moe.hm/hsp/img/win95.png
WinXP Home SP1
http://tkooler.moe.hm/hsp/img/winxphomesp1.png
WinVista HomePre SP1
http://tkooler.moe.hm/hsp/img/winvistahomepresp1.png
(2000と98は別の場所にあるので未検証)

1番目のスクリプトは値を変えるとおかしくなりますね。(^_^;)



SYAM

リンク

2008/10/16(Thu) 18:42:17|NO.20252

1つめのについて
同じ組み合わせにしても異常はありません。
が、
パレット番号0と同じ色を指定してそのパレットを使うと、パレット番号0で描画してしまうようです。
試しに、c1を0にしたスクリプトで、アニメーション中にパレット番号0の色だけを変えてみてください。画面内にはパレット番号0の領域はなくなっているはずなのに色が変わります。



mm

リンク

2008/10/16(Thu) 18:43:11|NO.20253

VISTA/Meとも458番目が文字化けしました。
アンチエイリアスがどうたらと書いてあるのでパラメータを16と15で試しました(VISTA)。
16はきちんと表示され、15は文字化けです。アンチエイリアスは関係ないのかも。
全部試すのは面倒なのでやってません。



あり

リンク

2008/10/16(Thu) 23:27:26|NO.20272

検証に協力して下さった方々、どうも有り難う御座います。
文字化けの件は、どうやらXP以外(?)のOSで共通の症状みたいですので
詳しい発生条件を調べてみました。
ちなみに互換フォントはフォント名に全角の日本語が入っているかどうかで
切り替わるみたいです。

;文字化け調査(XPでは文字化けせず) ;半角用(?)互換フォント font "a",30 ;装飾なし mes "あいうえお" font "a",30,1 ;太字 mes "あいうえお" font "a",30,2 ;イタリック mes "あいうえお" font "a",30,4 ;下線 mes "あいうえお" font "a",30,8 ;打ち消し mes "あいうえお" font "a",30,16 ;アンチエイリアス mes "あいうえお\n" ;全角用互換フォント font "あ",30 ;装飾なし mes "あいうえお" font "あ",30,1 ;太字 mes "あいうえお" font "あ",30,2 ;イタリック mes "あいうえお" font "あ",30,4 ;下線 mes "あいうえお" font "あ",30,8 ;打ち消し mes "あいうえお" font "あ",30,16 ;アンチエイリアス mes "あいうえお"
上のスクリプトを文字化けするOS上で起動すると
半角用互換フォントの太字とイタリック体が入る場合のみ文字化けするようです(MEの場合)

太字とイタリック体といえば、コンテスト作品の中にMEだと文字化けを起こす作品が
いくつかあるのですが、もしかしたらこの事が原因だったりするのかも?
もしフォント指定で間違って"msgothic"などと入力してしまっても
font命令は構造上、明確なエラー表示が無いので気付けない人も
意外といるのかもしれませんね・・・。

ともあれ、Vistaでも文字化けするようなので
XPを使っている方は、一応気に留めておいたほうが良さそうです。



あり

リンク

2008/10/16(Thu) 23:58:04|NO.20276

一方のpalette命令の方は
SYAMさんの指摘にあった0番のパレットと同じ色だと、0番の色で表示されるという
現象を調査した所、0番だけでなくpaletteで色を変更しようとする番号より
若い番号と同じ色を使っていた場合にパレット変更が正確に反映されない状況が
発生しているようでした。
なので、その現象を確認する為の比較スクリプトを作ってみたのですが・・・
screen 0,640,480,1
selc=1 ;使用するパレットNO p = 0, 0, 0 ;パレットパターン1 p(3)=255,100,100 ;パレットパターン2 p(6)=100,255,200 ;パレットパターン3 p(9)=100,100,255 ;パレットパターン4 palette 0,p(0),p(1),p(2) palette 1,p(3),p(4),p(5) palette 2,p(6),p(7),p(8) palette 3,p(9),p(10),p(11),1 repeat 4 palcolor cnt :boxf 0,cnt*120,640,cnt*120+120 loop *main stick key if key&128 :end ;ESCで終了 if key&32 :c++ :c=c\4 :palette selc, p(c*3),p(c*3+1),p(c*3+2),1 ;エンターキーでパレット内容を変更 if key&16 :selc++ :selc=selc\4 ;スペースで使用色変更 title " [使用色 "+selc+"][パターン "+c+"] ["+p(c*3)+","+p(c*3+1)+","+p(c*3+2)+"]" redraw :wait 10 goto *main
このスクリプトではどうも正常にパレットが変更・表示されている様なんですね。
となると、先のスクリプトに問題があったのか、それともまだ気付いていない要因があるのかが
判らないので引き続き検証を続けていきたいと思います。



SYAM

リンク

2008/10/17(Fri) 00:44:28|NO.20278

パレットの変更のときではなく、描画のときにおかしくなってます。
NO.20276のスクリプトでは描画する時に0〜4のパレットが全部違う色なので問題がおきません。

最初にたとえばパレット1と2を同じ色にしておくと、
パレット2の色を変更しても何もおきず、
パレット1の色を変更したときに、2段目といっしょに3段目も一緒に色が変わってしまいます。


screen 0,640,480,1 palette 0, 0,0,0 ,1 palette 1, 0,0,0 ,1 palette 2, 0,0,0 ,1 palcolor 0 boxf palcolor 2 palette 2, 0,0,255 ,1 mes "2を選択して青にして書いた" boxf 0,24,640,32 palcolor 1 mes "1を選択して書いた" palette 1, 255,0,0, 1 palette 0, 0,255,0, 1 redraw 1 stop

スクリプトを見たところでは「1を選択して書いた」が赤字で見えそうなものですが、そうなりません。
パレット1で描画しているつもりが、どうやらパレット0での描画になっているようです。

つまり、
「同じ色のパレットがあると、描画のときに若い番号のパレットで描かれてしまう」のですね。
当然、その後パレットの色を変更しても意図どおりにならなくなります。



HSPユーザー

リンク

2008/10/17(Fri) 03:04:04|NO.20279

> ありさん ならびに検証書き込みして下さった皆さんへ

とても参考になります、ありがとうございます。

私も開発中ソフトでこの件が懸案事項だったのですが、
Vistaがないので検証作業があとまわしになっていました。

あてずっぽうで
「font指定を””空っぽにしておけば適当に機種ごとデフォルトが適用されるかな」
というふうにしておいたのがまったく裏目に出ました。
(検証用に一番安いノートPCを買うことも考えましたが格安ノートのOSはいまだXPなんですね。)

inovia さんの検証画像アップの親切さには心をうたれました。



SYAM

リンク

2008/10/17(Fri) 10:05:50|NO.20281

パレットについては、
palcolor命令が、内部では
「与えたパレット番号のRGB値を使って color命令を呼び出している」
んじゃないかな…。
なので、与えたパレット番号のRGB値に一番近い色のパレットが選択されます。若い番号優先で。



あり

リンク

2008/10/17(Fri) 11:55:27|NO.20282

NO.20278のスクリプトを勝手にいじって、わかり易く(?)してみました。
左クリックで1行程ずつ表示していきます。

goto *@f #deffunc tmes str word ;スクリプト省略用命令 title ""+word repeat :stick key if key&256 :break ;左クリックで進行 redraw 1 :wait 10 :loop return *@ screen 0,640,480,1 palette 0, 100,200,200 ,1 palette 1, 200,200,200 ,1 palette 2, 100,200,200 ,1 palette 3, 100,200,200 ,1 tmes "初期設定" palcolor 0 :boxf 0,200,640,480 :pos 0,0 :tmes "パレット0で背景描画" palette 3,200,200,200,1: :tmes "パレット3をパレット1と同じにする" ;上の行をコメントアウトするとパレット0で描画される palcolor 3 :boxf 0,0,640,32 :tmes "パレット3で帯描画(赤になる予定だがパレット1で描画される)" palcolor 2 mes "■ パレット2で文字表示 ■" :tmes "パレット2でメッセージ描画(実際はパレット0)" palcolor 2 :palette 2, 0,0,255 ,1 :tmes "パレット2を青に変更" boxf 0,16,640,32 :tmes "パレット2で帯描画" palette 1,255,255,0,1 :tmes "パレット1の内容を変更" palcolor 3 ;palette後に無いとmesに反映されない mes "■ パレット3で文字表示 ■" :tmes "パレット3でメッセージ描画" palcolor 3 :palette 3, 255,0,0, 1 :tmes "パレット3を赤に変更" palette 0, 0,255,0, 1 :tmes "パレット0を緑に変更" tmes "クリックで終了" end
これを見るとSYAMさんの言う通り、同じ色があると若い番号の方の色で
描画される事がわかります。

とりあえず原理がわかったので、一安心と言う所ですが
この事を知っていないと、いざパレットアニメを使おうとした時に
私のように混乱する事は、間違いないですね(汗)
応急措置として、可能な限り同じ色を使わないように気をつける事にします。

検証にご協力下さった皆様(特にSYAMさん)に感謝いたします。
有難う御座いました。



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