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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0830
匿名希望$記号4解決


匿名希望

リンク

2009/8/30(Sun) 09:21:40|NO.27430

初めまして。
HSPの門を叩いて、三日ほどたった駆け出しプログラマです。

RGB値と、gradf命令で扱うカラーコードに変換するスクリプトを組みました。
望み通りに動くものが出来たのですが、その記述について疑問に思うところがあったので、
皆様の知恵をお借りしようと思った次第です。

hexcode1 = "$" + strf("%02x",r1) + strf("%02x",g1) + strf("%02x",b1)
norhexcode2 = "$" + strf("%02x",r2) + strf("%02x",g2) + strf("%02x",b2) gradf 120,180,400,100, 1, $ + hexcode1, $ + hexcode2

上記のスクリプトで、$という記号、これが気になるのです。
gradf命令で必要なカラーコードは$ffffffという形式。

RGB値それぞれをstrf命令で16進数に変換して足す所までは良かったのですが、
gradf命令にて『$ + hexcode1』と記述し実行すると、黒い四角が出来上がります。

今度は、gradfの$を外し、直接代入してみると、エラーが出てしまいます。
HSPでは『特殊記号は二つ重ねる』というのを思い出して、
$を二つ重ねて変数に代入してみたりもしました。

試しにどちらにも1つ$を入れると動いた……なんで? という訳です。

動く以上特に問題は無いのですが、やはり気になりますので……。
答えてくださる方がいましたら、よろしくお願いします。



この記事に返信する


GENKI

リンク

2009/8/30(Sun) 09:54:58|NO.27431

HSPスクリプトエディタのヘルプメニューからHSPマニュアル目次を実行してマニュアルを開いてください。(F1マニュアルじゃなりませんよ?)
このマニュアルの、
「プログラミングマニュアル・基本仕様ガイド(hspprog.htm)」
「3.6 式」
を参照ください。ここにあるとおり、$ffffffはスクリプトエディタ上で数値を16進数表記する場合の書き方です。
$ffffffはつまり数値を意味します。
mes $ffffff
mes ($ffffff+1)
つまりgradfの引数p6,p7は数値なんです。ただ、普通書くように10進数ではカラーコードを記述しにくいので、マニュアルでは16進数で書くことを推奨しています。ですのでこういう書き方をしても問題ありません。
gradf 120,180,400,100, 1, int(hexcode1), int(hexcode2)
とか
gradf 120,180,400,100, 1, 0 + hexcode1, 0 + hexcode2
「$+」も「0+」同様に数値型に変換していることを意味しています。


> HSPでは『特殊記号は二つ重ねる』というのを思い出して、

これは考えを改める必要があります。
先ほどのマニュアルの「3.7文字列」を参照してください。



あと、最初に文字列で値を作る必要もないんですが…あ、今ちょっと時間内のでここまで。あとは他の人任せた。出かけてきます。(^ ^;



ANTARES

リンク

2009/8/30(Sun) 10:00:16|NO.27432

>gradf命令にて『$ + hexcode1』と記述し実行すると、黒い四角が出来上がります。
 これは、本来文法エラーとなるべきところですが、
hspは「$」を0と解釈しているようです。
したがって「0+hexcode1」と同じになり、
「異なる型の値を演算する場合、後の値が前の値の型に変換されてから演算される」
というルールのため、「int(hexcode1)」と同じことになります。

>今度は、gradfの$を外し、直接代入してみると、エラーが出てしまいます。
 数値を指定すべきところに文字列を指定したのでエラーになります。

>HSPでは『特殊記号は二つ重ねる』というのを思い出して、
 これは、「\r」「\n」「\"」等で特殊文字を指定するのに「\」記号が
使われるため、「\」自体は「\\」と記述しなければならないということで、
「\」に限った話です。

 gradfのヘルプに
>スクリプトで記述する場合は、最初に「$」を付けた16進表現を行なうと便利です。
とあるのは、「gradf ……,$FF00FF,$FFFF00」のように書くと
2桁ごとの区切りがRGBの各値の区切りと一致するので便利だということで、
RGBの各値を変数に入れている場合は「r1<<16 | g1<<8 | b1」あるいは
「r1*65536+g1*256+b1」のように書きます。

 GENKIさんも書いているように、doclib\hspprog.htm(3.1ならdocs\hspprog.htm)を
読んでください。



ANTARES

リンク

2009/8/30(Sun) 10:08:58|NO.27433

> これは、本来文法エラーとなるべきところですが、
>hspは「$」を0と解釈しているようです。
「$」の後の16進数を省略していると解釈して
「$0」と見なしているのかもしれません。



匿名希望

リンク

2009/8/30(Sun) 10:40:49|NO.27435

GENKI様、ANTARES様、初級の質問にも丁寧に答えてくださってありがとうございました。
INT関数を使用することで、無事心の靄が晴れました。

サイトを巡ってばかりいるので、マニュアルの存在に気づかなかったのが一番の原因でしょうか。

何はともあれ、本当にありがとうございました。



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