2010年01月09日

【講座】HSP3ワンポイントテクニック 第40回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。

またまたHSP3.2の新機能について、紹介していきたいと思います。
標準で色々な追加されている命令から、今回取り上げるのは
split命令とstrtrim関数です。
strtrim命令は、文字列を整形するための機能を持っています。
たとえば、「"こんにちは"」という文字列の両端にある「"」の
記号だけを取り除いたり、特定の文字コードだけを削除すると
いった使い方ができます。

val = strtrim(p1,p2,p3)

p1=変数 : 元の文字列が代入された変数
p2=0~3(0) : 除去する位置の指定
p3=0~65535(32) : 文字コード

p2のパラメーターで、文字列の特定部分だけを対象にすることが
できます。0の場合は、両端(デフォルト)。1は左端、2は右端。
そして、3の場合は文字列内すべてが対象になります。
文字コードには、全角のコードも含めることができます。

s=" こんにちは 全角文字です "
mes strtrim(s,3,$4081)

上は、文字列に含まれた全角スペース(空白)だけを削除する
というサンプルです。
もう1つ、文字列関連の新しい機能split命令を紹介します。

split p1,"string",p2...

p1=変数 : 元の文字列が代入された変数
"string" : 区切り用文字列
p2=変数 : 分割された要素が代入される変数

これは、たとえば「1,2,3,4」のように特定の文字で区切られた
文字列からそれぞれの要素を取り出すものです。

buf="1,2,3,4"
split buf, ",", a1,a2,a3,a4

上の例では、a1,a2,a3,a4という変数それぞれに「,」で
区切られた文字列「1」「2」「3」「4」を代入します。
getstr命令と似ていますが、一度に複数の項目を処理できる
ことと、区切り文字は1文字より多いものが使用できる点で
使い勝手が向上しています。

新しく追加された機能の中では、地味なものですが色々な場面で
意外に使う機会があるかもしれません。
こんなこともできると頭の隅に置いておくといいですよ。
それでは、また。

(おにたま)

投稿者 usuaji : 01:30

2009年10月16日

【講座】HSP3ワンポイントテクニック 第39回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。

今回もHSP3.2の新機能について、紹介していきたいと思います。
標準で色々な命令が追加されているのは前回もお伝えしましたが、
その中でobjimage命令は、ボタンの外観を変えることのできる
命令で、思った以上にアプリケーションのイメージを変える
ことができるのでお奨めです。
button命令で配置されるボタンオブジェクトは、Windowsが持つ
標準的なデザインになっています。いままでは、これを変更
するためには、APIを使ってオーナードローの設定を行なう
必要があるなどかなり面倒でした。
HSP3.2では、ボタンの下地として使う画像を用意しておくだけで
ボタンの外観を任意に設定することができるようになりました。
objimage命令のパラメーターは、以下のようになっています。

objimage id,x1,y1,x2,y2,x3,y3

id : カスタムボタンの参照バッファID
x1,y1 : カスタムボタンの参照座標1(通常時)
x2,y2 : カスタムボタンの参照座標2(押し下げ時)
x3,y3 : カスタムボタンの参照座標3(マウスオーバー時)

あらかじめ「通常時」「ボタン押し下げ時」そして必要ならば、
「マウスオーバー時」(ボタンの上にマウスカーソルが乗った
時)の画像を1枚にまとめて用意しておきます。
sample/newフォルダ内にある「btn_normal.bmp」がサンプル用の
データーなので参考になるはずです。
あとは、icload命令や、celload命令で下地となる画像を
読み込んでおいて、それぞれの場合に参照される座標を
objimage命令で設定します。
以降は、button命令で配置したボタンが設定された画像のものに
置き換わります。
「btn_normal.bmp」の画像を使った例を紹介しましょう。

celload "btn_normal.bmp",1
objsize 128,32
objimage 1, 0,0, 0,64, 0,32 ; ボタン画像の指定
button "PUSH",*owari
stop
*owari
end

ボタンの下地を変えるだけで、印象がまた違うのでオリジナルの
ボタンを作って試してみてください。
それでは、また。

(おにたま)

投稿者 usuaji : 16:55

2009年09月01日

【講座】HSP3ワンポイントテクニック 第38回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。

今回から、リリースされたばかりのHSP3.2の新機能について
触れていきたいと思います。
まだ、HSP3.1を使っているという方も多いかと思いますが、
色々な点で機能がパワーアップしているので是非アップデート
してもらえると嬉しいです。ちなみに、HSP3.1で作成されている
スクリプトのほとんどは、そのままHSP3.2でも使用可能です。
(詳しくは、HSP3.2のアップデートガイドをご覧下さい。)

さて、HSP3.2で変わった部分。色々ありますが、まずは標準命令の
追加が大きな変更になります。
いままでプラグイン等で機能を追加してきたことはありますが、
これだけ一度に新規のキーワードを追加したアップデートは
ありませんでした。
以下が、標準で新規に追加された命令・関数・マクロです。

split 文字列を特定の区切り文字で分割する
strtrim 不要な空白や文字コードを削除する
gradf グラデーションを描画する
objimage ボタンに画像を使用する
objskip 配置オブジェクトのフォーカス移動を設定する
objenable 配置オブジェクトの有効・無効を設定する
celload 画像素材を読み込む
celdiv 画像素材の分割を設定する
celput 画像素材を描画する
m_pi π(マクロ)
rad2deg ラジアンを角度に変換する(マクロ)
deg2rad 角度をラジアンに変換する(マクロ)
powf べき乗を求める(マクロ)
ldim ラベル型の配列変数を初期化する
newlab ラベル型の変数に値を設定する

文字列の操作を行なうものや、配置オブジェクトに関するもの、
さらに画面描画など様々な用途をサポートする機能が追加
されています。標準機能にすることで、より手軽にスクリプトで
使用することができ、活用の幅が広がります。
機能の追加に合わせて、サンプルスクリプトも大幅に増量されて
います。紹介した新しい命令を使ったサンプルも、もちろん
含まれていますので、是非実際に動かしてみてください。
それでは、また。

(おにたま)

投稿者 usuaji : 03:52

2009年04月17日

【講座】HSP3ワンポイントテクニック 第37回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。

今回は、HSPのサウンド機能について解説してみたいと思います。
HSPで音を鳴らす際には、標準でmmload、mmplayという命令を
使用するのが一般的です。
たとえば、「a.wav」というファイルを再生する場合は、

mmload "a.wav",0

と書いて、ファイルを読み込んでおき、再生したい場所で

mmplay 0

を記述するだけでOKです。
拡張子が「.wav」となっているファイルは、音声(波形)を記録
したファイルで、Windowsのサウンドレコーダーを始めとする
各種ツールで扱うことができるようになっています。
この形式は、どんな音でも記録しておけますが、長い時間に
なるとファイルサイズが大きくなってしまうため、音楽などを
記録する用途には向きません。
音楽の再生については、「.mid」(スタンダードMIDI形式)や、
「.mp3」(MP3形式)を別途使用するといいでしょう。これらの
形式も、mmloadやmmplay命令で扱うことが可能です。

ただし、標準で用意されている機能ではいくつかの制限が
あります。だいたい以下のような点です。

■複数の音声(波形)を同時に再生できない
■音量(ボリューム)の調節ができない
■繰り返し再生がスムーズにつながらない

これらの制約は、標準で用意されているWindowsシステムの
制限によるものなのですが、不便なことに変わりはありません。
これを解消するには、Direct SoundというAPIを使用した再生を
行なう必要があります。
HSPでも拡張プラグインという形で、Direct Soundを使用した
サウンド再生をサポートしています。
標準で用意されているhspogg.dll(HGIMG3使用時も同じ命令
セットを利用できます)であれば、豊富なサウンド機能を
持っています。他にも、HSP MULTIMEDIA( hmm.dll )を始めと
するサウンド関連のプラグインがありますので、探してみると
いいでしょう。
http://hsp.tv/make/tool3.html

hspoggプラグインでは、標準命令に近いdmmload、dmmplay
という命令によりコントロールできるので、すぐに使う
ことができるはずです。また、mp3の代わりにライセンスの
発生しない圧縮形式である「.ogg」(Ogg Vorbis)の再生にも
対応しています。
音を鳴らす色々な場面で応用してみてくださいね。ではでは。

(おにたま)

投稿者 usuaji : 02:30

2009年01月19日

【講座】HSP3ワンポイントテクニック 第36回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。
今回は、2点間の距離を求める方法を考えてみましょう。
たとえば、画面上のある点から別の点まで、直線でどの程度
離れているかを知りたい場合など。
横軸(X軸)や縦軸(Y軸)がどれくらい離れているかは、単純に
座標の値を引き算すれば出てきます。しかし、平面(画面)上の
点(X,Y)がどれくらいかは1回の計算では求まりません。
実際に、距離を求めるスクリプトは以下のようになります。

x1=50:y1=50
x2=580:y2=320

color 255,0,0
line x1,y1,x2,y2

px=x2-x1:py=y2-y1
dist=sqrt(px*px+py*py)

pos 0,0
color 0,0,0
mes "("+x1+","+y1+")-("+x2+","+y2+")"
mes "距離="+dist

stop

このスクリプトでは、(x1,y1)の座標から(x2,y2)までの距離を
求めて画面上に表示します。距離を求めるための公式は、
中学校くらいで習うもので、「三平方の定理」とか
「ピタゴラスの定理」と呼ばれています。
sqrtという関数が使われていますが、これはルート(平方根)を
求めるためのもので、これにより実数値で距離を求めることが
できるようになっています。

距離を求める処理は、ゲームなどでも敵とぶつかったかどうかを
調べるのに使われています。距離が近ければ、ぶつかっていると
判断できるわけです。
ゲームでおおざっぱに使う場合は、正確な距離でなくても
構わないので、単純にX,Y軸がどれだけ離れているかを合計する
方法もあります。式にすると、「abs((x2-x1)+(y2-y1))」の
ようになります。

まだ公式を習っていない人も、手順を覚えてしまえば難しくは
ないので色々な場面で応用してみてください。ではでは、また。

(おにたま)

投稿者 usuaji : 02:18

2008年10月26日

【講座】HSP3ワンポイントテクニック 第35回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。
今回も、前回に引き続きHSP3.1のサンプルフォルダから、ゲーム
に関するひな型のスクリプトを見ていくことにしましょう。
HSPがインストールされているフォルダ以下の、sample/gameに
ある、スクリプトの中で以下の3つは、2Dスクロールマップに
冠するサンプルです。

mapedit.hsp
mapmove1.hsp
mapmove2.hsp

これらは、2DのRPGなどで古くから使われている地形のパーツを
組み合わせて大きな広いマップを表現しています。
まずは、「mapedit.hsp」をスクリプトエディタから開いてから
[F5]を押して実行してみてください。
これは、広いマップに自分で選んだパーツを配置するための
エディタになっています。すでに作成してあるデータが同じ
フォルダに「test.map」として保存されています。最初に、
「ロード」ボタンを押して、「test.map」を読み込んでみると
どのような感じかわかると思います。
このエディタでは、マウスカーソル位置にあるパーツを、
右クリックで参照することができ、左クリックで配置されます。
余計な機能は何も付いていないものなので、自分である程度
拡張してみるのもいいでしょう。

マップの広さや、パーツ1つ1つの大きさは、スクリプトの
最初に変数として代入されています。

cx=64:cy=64 ; チップXYサイズ
mapsx=32 ; マップ全体Xサイズ
mapsy=32 ; マップ全体Yサイズ

チップ(パーツのこと)の大きさや、マップ全体の大きさは
マップデータには保存されないので注意してください。
mapmove1.hsp、mapmove2.hspのスクリプトは、マップをキー
操作で動かすためのサンプルです。mapmove1.hspでは、パーツ
単位で動かしていますが、mapmove2.hspでは1ドット単位で
動かすことでよりスムーズに見えるようになっています。

このようなマップの上に、キャラクターを重ねて歩かせれば
RPGとして最初の一歩になるはずです。
ゲーム作りなどに応用してみてください。ではでは、また。

(おにたま)

投稿者 usuaji : 01:11

2008年10月14日

【講座】HSP3ワンポイントテクニック 第34回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。
今回は、ゲームなどで使われる動きのある処理(アニメーション)
について取り上げてみましょう。
実は、HSP3.1のサンプルフォルダには、ゲームで使われる際の
ひな型となるスクリプトが用意されています。
HSPがインストールされているフォルダ以下の、sample/gameに
ある、いくつかのスクリプトが参考になるはずです。
以下のスクリプトは、絵を動かす場合の処理を単純にしたもの
です。このスクリプトは、face.bmpという画像ファイルを使って
いますので、スクリプトを保存したフォルダに必ずファイルを
用意しておいてください。face.bmpは、sample/gameフォルダに
収録されています。

buffer 3 ; バッファを用意
picload "face.bmp" ; 画像ファイル読み込み
screen 0,640,480 ; 画面サイズ指定
mx=0 ; X座標初期値
my=240 ; Y座標初期値
*main
redraw 0 ; 描画始め
color 0,0,64:boxf ; 背景を消す
gmode 2,64,64 ; 画像サイズ
pos mx,my:gcopy 3 ; 画像コピー
redraw 1 ; 描画終わり
await 20 ; 時間待ち
mx=mx+1 ; 座標を動かす
goto *main ; 繰り返す

上のサンプルでは、「顔」の絵が左から右に動きます。
1コマ1コマを、少しずつ絵をずらして描くようにするのが
基本です。表示する座標は、「mx=mx+1」の部分で変化させて
います。もっとスピードを変えてみたり、上下にも動くように
する方法を考えてみてもいいでしょう。
他にも、キー操作で動かすものや、複数の絵を同時に動かす
方法について、サンプルフォルダのスクリプトが用意されている
ので、勉強になると思いますよ。
ゲーム作りなどに応用してみてください。ではでは、また。

(おにたま)

投稿者 usuaji : 23:26

2008年08月29日

【講座】HSP3ワンポイントテクニック 第33回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。
今回は、キー入力についての小さなテクニックです。
ゲームなどで使われるカーソルキーや、スペースキーなどの
代表的なキー情報はstick命令によって一度に取得することが
できます。しかし、それ以外のキーはgetkey命令によって
1つ1つ状態を取得する必要があります。
ただし、getkey命令にはstick命令で用意されていたトリガー
情報を取得することができません。
トリガー情報は、キーを押した瞬間だけを検知して、それ以降は
キーを離すまで検知されません。キーを押した回数などを知る
場合にも役立つ情報です。
以下のサンプルスクリプトは、getkey命令でトリガー情報を
得ることができます。

key_a=0
repeat
getkey a,'A'
trg_a=(key_a^a)&a
key_a=a
if trg_a=1 : mes "[A] PUSH"
title "[A]KEY="+key_a
await 20
loop

このスクリプトでは、変数「key_a」は、[A]のキーを押している
間だけ1になり、それ以外は0になります。
そして、変数「trg_a」は[A]のキーを押した瞬間だけ1になり、
それ以外は0になります。
stick命令で使えないキーを扱う場合の参考にしてみてください。
ではでは、また。

(おにたま)

投稿者 usuaji : 11:54

2008年06月30日

【講座】HSP3ワンポイントテクニック 第32回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。

今回は、HSP3.1について知っている人は知っている、プチ情報を
いくつか紹介していきたいと思います。

■HSP3のアイコン書き換え

HSP3で作成した実行ファイルのアイコン書き換えについて。
HSP3.0では、Resource Hackerというツールを推奨していましたが、
HSP3.1からは一般的なアイコン書き換えツールが使用可能です。

■HGIMG3画面のキャプチャ

HGIMG3を使用中は、描画方法が通常と異なるためbmpsave等の
命令が意味を持たなくなってしまいます。
HGIMG3で作成した画面を、HSP3の通常描画命令で操作したい時は
hgcapture命令を使用してHSP3が管理する画面にイメージを転送
してから行ないます。

■mkpack.hspツール

sampleフォルダに暗号化付きDPMファイルを生成することができる
mkpack.hspツールが含まれています。
これを実行すると、ツールが起動して指定フォルダ内のファイルを
まとめてDPMファイルに変換できます。
DPMファイルを暗号化することで、より高いファイル保護が可能に
なります。
(DPMファイルの使い方は、マニュアルを参照してください。)

■文字コードの変換

HSP3では、日本語(全角)の文字列をSJIS(シフトJIS)という形式で
管理していますが、他にも様々な形式があり相互変換が必要な
時があります。Unicode(UTF16)との変換は、標準でcnvstow、
cnvwtosという命令が用意されていますが、それ以外の変換に
利用できるサンプルとして、nkfcnv.hspが同梱されています。
これによりNKF.DLLを使用して、EUC、7bit-JIS、MIME、SJISの
相互変換を行なうことが可能です。

■16進数文字列を10進数に変換

これは以前のHSPからサポートしている方法ですが、
「a=int("$1234")」のように先頭に「$」が付いている場合は、
16進数として扱われます。

まだまだ探せば色々なTIPSがありますので、機会があればまた
紹介していきたいと思います。
ではでは、また。

(おにたま)

投稿者 usuaji : 11:39

2008年05月13日

【講座】HSP3ワンポイントテクニック 第31回

HSP3の変わった使用例や、気付きにくい機能などをいつも紹介
しているこのコーナーですが、今回はなんということのない
サンプルスクリプトを紹介してみたいと思います。
HSP3で実行すると、とてもおめでたい画面が表示されます。
なにか使い道があれば、活用してみてください。

wx=800:wy=600 ; 画面サイズ
screen 0,wx,wy
cx=wx/2:cy=wy/2:dist=int(sqrt( cx*cx + cy*cy ))+8
dim x,4:dim y,4
kai=16 ; 角数
r1=255:g1=0:b1=0 ; 1つ目の色
r2=255:g2=255:b2=255 ; 2つ目の色
tt=0:plus=3.141592/kai*2
x(0)=cx:y(0)=cy
x(3)=cx:y(3)=cy
repeat:redraw 0
rot=0.01 * tt
repeat kai
x(1)=int(sin(rot)*dist)+cx
y(1)=int(cos(rot)*dist)+cy
rot+=plus
x(2)=int(sin(rot)*dist)+cx
y(2)=int(cos(rot)*dist)+cy
if cnt&1 : color r1,g1,b1 : else : color r2,g2,b2
gsquare -1,x,y
loop
tt++
redraw 1
await 30
loop

皆さんも、何となく作ってしまったスクリプトがあれば
メルマガ編集部の方まで投稿してもらえると嬉しいです。
なんということのないスクリプトを紹介させて頂きます。
ではでは、また。

(おにたま)

投稿者 usuaji : 22:09

2008年02月27日

【講座】HSP3ワンポイントテクニック 第30回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。

今回は、HSP3がサポートする3D機能について紹介してみたいと
思います。最新版となるHSP3.1フルセットが標準でサポートしている
3D機能は、主に3種類あります。

・d3module(標準機能による簡易3D描画モジュール)
・HGIMG3(DirectXによる3Dサポートプラグイン)
・Easy3D(DirectXによる3Dサポートプラグイン)

d3moduleについては、「sample/d3m」フォルダにあるサンプルで
使用例を色々と見ることができます。補助的な役割で3D表現を
利用したい場合に便利なモジュールで、DirectXなどの追加DLLが
必要ないことも魅力の1つです。

本格的な3D表示を行なう場合には、HGIMG3とEasy3Dプラグインを
利用することができます。どちらを選ぶかは、好みにもよるかと
思いますが、どちらを使用した場合でも3Dモデル表示やボーンを
含むアニメーションの再生(ファイル形式は.x)が可能で、ゲーム
向けのサポート機能が多数盛り込まれています。
中でもEasy3Dは、HSPと組み合わせて使う入門書も発売されて
いるので、初心者にはわかりやすいと思います。

3D表示を行なう上で、3Dモデルの作成は重要な要素となります。
x形式のモデルは、どちらのプラグインでも読み込み可能で、
Windows上では標準的な3Dモデルのファイルフォーマットです。
多くの3Dツールで作成可能ですが、無料で使用可能なツールで
お勧めのものをいくつか紹介したいと思います。

・メタセコイア+RokDeBone2

メタセコイアは、国産の定評ある3Dモデリングツールです。
これでモデルを作成して、RokDeBone2でアニメーションを付加
することができます。RokDeBone2は、Easy3Dの製作者でもある
おちゃっこ氏が作っているツールです。RokDeBone2で出力した
アニメーションデータは、Easy3DだけでなくHGIMG3であっても
読み込み可能です。

メタセコイア
http://www.metaseq.net/metaseq/index.html

RokDeBone2
http://www5d.biglobe.ne.jp/~ochikko/

・3DACE

3DACEは、アニメーションの作成などはできませんが、直感的に
3Dモデルを作成することができます。x形式のファイルを
出力することも可能な初心者向けのツールとしてお勧めします。

3DACE
http://hp.vector.co.jp/authors/VA017881/

・XSI Mod Tool

これは、かなり本格的なツールです。
もともとプロ用3Dソフトである、SOFTIMAGE|XSIの機能を制限
して無料版として配布しているものですが、ほとんどの機能は
そのまま利用することができます。
モデルやアニメーション作成も非常に高機能ですが、そのぶん
使い方を覚えるのに時間がかかるのが難点かもしれません。

SOFTIMAGE|XSI Mod Tool
http://www.softimage.jp/mod/index.html


3Dは、最初戸惑うかもしれませんが、プラグイン機能や資料も
充実しており、挑戦しがいのあるジャンルですよ。
ではでは、また。

(おにたま)

投稿者 usuaji : 12:29

2008年01月10日

【講座】HSP3ワンポイントテクニック 第29回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。
またまた、HSP3.1から追加されたhspcvプラグインの機能から、
強力で面白い命令を紹介していきたいと思います。
今回は、hspcvサンプルにある、facedetect.hspを取り上げます。
これは、人の顔がある領域を判定するというもので、最近の
デジカメなどで採用されている高度な技術です。
下のサンプルでは、test.jpgという写真の中に、人間の顔がある
領域を赤い線で囲みます。複数の人がいれば、すべての領域を
示します。色々な写真(絵やぬいぐるみは検出されません)で
試してみると面白いと思います。
この機能は、画像の中にある特徴を抽出して、人の顔であるか
どうかを検出しています。cvloadxml命令により、あらかじめ
特徴を抽出してデータ化されているxmlファイルを読み込むことで、
様々なパターンに対応しています。
このxmlファイルも、OpenCVライブラリにより作成することが
できますが、まだhspcvではサポートされていません。

#include "hspcv.as"
cvload "test.jpg",0
cvgetimg 0,1
cvloadxml "haarcascade_frontalface_alt2.xml"
cvfacedetect 0
num=stat
color 255,0,0
title "Face Detect ("+num+")"
repeat num
cvgetface x,y,sx,sy
if stat : break
boxf x,y,x+sx,y+1
boxf x,y+sy,x+sx,y+sy+1
boxf x,y,x+1,y+sy
boxf x+sx,y,x+sx+1,y+sy
loop
stop

というわけで、hspcvは応用次第で色々な可能性を秘めています。
どのように活用するかは、皆さんのアイデア次第です。
ではでは、また。

(おにたま)

投稿者 usuaji : 21:55

2007年12月14日

【講座】HSP3ワンポイントテクニック 第28回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。
今回もまた、HSP3.1から追加されたhspcvプラグインの、
強力で面白い命令を紹介していきたいと思います。
今回は、hspcvサンプルにある、cvmatch.hspを取り上げます。
これは、bgparts.jpgという画像データと同じ領域を、
bgsamp.jpg画像データの中から探し出すというものです。
スクリプトはとても単純で、cvload命令によってバッファ0と1に
画像を読み込んだ後に、cvmatch命令によって画像を検索します。
画像の検索というのは、1ドットごとに2つの画像を見比べて
いるだけかと思ってしまいますが、cvmatch命令はまったく同一の
画像だけでなく、ある程度の誤差範囲内で似ているイメージの
場所を探し出します。もっと端的に言うと、元画像の中から検索
したい画像に一番近い領域を無理やり見つけ出します。
これを応用することで、何枚かに分けて撮影された風景写真を
すべてつないでパノラマにしたり、大量にある画像ファイルの中
から重複がないかを調べるといった処理が可能になります。

#include "hspcv.as"
cvload "bgsamp.jpg",0
cvload "bgparts.jpg",1
cvgetimg 0,1
cvmatch x,y,CV_TM_SQDIFF,1,0
color 255,0,0
cvgetinfo sx, 1, CVOBJ_INFO_SIZEX
cvgetinfo sy, 1, CVOBJ_INFO_SIZEY
boxf x,y,x+sx,y+1
boxf x,y+sy,x+sx,y+sy+1
boxf x,y,x+1,y+sy
boxf x+sx,y,x+sx+1,y+sy
stop


まだまだhspcvには、色々な機能がありますので、皆さんも是非、
新機能を試してみてください。ではでは、また。

(おにたま)

投稿者 usuaji : 00:25

2007年11月16日

【講座】HSP3ワンポイントテクニック 第27回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。
今回もまた、HSP3.1から追加されたhspcvプラグインの、
強力で面白い命令を紹介していきたいと思います。

今回は、ビデオキャプチャ機能について触れてみましょう。
これは、マシンに接続されたWEBカメラや、ビデオキャプチャ機器
から画像を取得するというものです。
以下のスクリプトで、簡単に動作させることができます。

#include "hspcv.as"

onexit *bye ; 終了時の飛び先
cvcapture ; キャプチャ開始準備

repeat ; loopまでを無限ループ
cvgetcapture ; 1フレームキャプチャする
cvgetimg 0 ; 画面に表示する
await 20 ; 一定時間待つ
loop ; ループ終了

*bye

cvendcapture ; キャプチャ終了
end

このサンプルでは、cvバッファ0をキャプチャ用のバッファとして
指定し、後は1フレームごとに取り込みを繰り返しています。
注意する点として、必ずcvcapture命令でキャプチャの準備を
行なっておくこと。そして、キャプチャを終了する時には忘れずに
cvendcapture命令を実行してください。
hspcvプラグインが持っているキャプチャ機能は、あくまでも
簡易的なもので、キャプチャ時の細かい設定や機器に関する情報の
取得はサポートしていません。そのかわり、設定などせず手軽に
使えるので、個人用のツールや簡単なテストプログラム作成には
威力を発揮すると思います。

まだまだhspcvには、色々な機能がありますので、皆さんも是非、
新機能を試してみてください。ではでは、また。

(おにたま)

投稿者 usuaji : 00:23

2007年10月16日

【講座】HSP3ワンポイントテクニック 第26回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。
前回に引き続き、HSP3.1から追加されたhspcvプラグインの、
強力で面白い命令を紹介していきたいと思います。

画像ファイルの読み書きを、色々な形式で行なうことができると
いう紹介をしましたが、今回は一歩進んで動画(ムービー)ファイル
を扱ってみたいと思います。
ムービー関係は、Windowsの中でも扱いが複雑で手のかかる分野
の1つですが、hspcvでは、ごく簡単な方法でムービーファイルの
作成を行なうことができます。

#include "hspcv.as"

cvload "bgsamp.jpg",0

cvbuffer 1,640,480
cvmakeavi "test.avi",,,1

repeat 360
cvcopy 0,0,0,1
cvrotate cnt,1,0,0,,1
cvputavi
cvgetimg 1
redraw
await 0
loop

cvendavi
dialog "動画を保存しました。"
end

上の例では、「bgsamp.jpg」というファイル(sample以下の
hspcvフォルダに入っている画像ファイルです)を読み込んで
回転させたものを360フレーム分の動画として保存して
います。
このスクリプトを実行すると、ムービー(aviファイル)の
形式を選択するダイアログが表示されます。ここで、動画の
形式(コーデック)を選択すれば、それをもとに画像を圧縮する
ことになります。
生成された「test.avi」というファイルは、メディアプレイヤー
を始めとするツールで再生することができます。
つまり、HSPで作成した画面をそのまま動画データに変換する
ことができるわけです。使い道は、人それぞれですが、色々な
分野に応用できるのではないでしょうか。

コーデックを最初から固定して使用する場合には、cvmakeavi
命令のパラメーター2にfourccコードを指定します。
たとえば、ポビュラーなDivxコーデックを使用する場合は、

cvmakeavi "test.avi",$58564944,,1

のように指定すれば、Divxの標準的なプロファイルが使用
され、ムービーが作成されます。
fourccコードというのは、少し難しい話になりますが、
コーデックごとに用意されている4つの文字コードを
整数値に直したものです。
Divxのfourcc、'D','I','V','X'という文字列であれば、
それぞれの文字コードである$44,$49,$56,$58を逆順にして、
つなげれば整数値として使用できます。
(ちなみに、wmvのaviコーデックは、'W','M','V','3'。
Xvidは、'X','V','I','D'になります。)

まだまだhspcvには、色々な機能がありますので、皆さんも是非、
新機能を試してみてください。ではでは、また。

(おにたま)

投稿者 usuaji : 09:32

2007年09月07日

【講座】HSP3ワンポイントテクニック 第24回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。
今回は、新しくリリースされたHSP3.1の新機能について触れて
みましょう。HSP3.1で追加されている機能は多数ありますが、
その多くが拡張プラグインとして利用できる形で提供されています。
中でも、データアクセスを担当するHSPDAプラグインは、
地味に大きく改良されています。いままで文字列と整数の
ソートしかできなかったものが、実数のソートにも対応して
いるほか、変数データをそのままファイルに保存する仕組みとして
「変数データアクセス命令」を新たに提供しています。
これは、自分が作成したプログラムの中で、前に起動した時の
変数を覚えさせておきたい時などに使います。
一番簡単な使い方は、以下のようになります。

vsave "ファイル名"

これで、すべての変数の内容を指定したファイル名に書き出します。
(HSPDAプラグインの命令を使用するために、スクリプトの先頭に
「#include "hspda.as"」を追加しておく必要があります。)
変数の保存データは、独自形式のバイナリファイルとして生成され、
拡張子も含めてファイル名は任意につけることができます。
(プラグインが推奨する拡張子は、「.VAR」または「.HVF」です。)
書き出したデータを読み込む場合には、以下のように記述します。

vload "ファイル名"

これ以外にも、変数の名前を指定して個別にロード・セーブを
行なうことも可能です。
ほぼすべての変数型を保存することができ、保存する側と、
読み込み側のスクリプトが同一でなくとも入出力が可能な汎用性
の高いものとなっています。

いままでできなかった機能を活用することで、新しいアイデアが
生まれるかもしれません。皆さんも是非、新機能を試してみて
ください。

(おにたま)

投稿者 usuaji : 13:48

2007年06月26日

【講座】HSP3ワンポイントテクニック 第23回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。

今回は、HSPのスクリプトをコンパイルして実行するための
スクリプトを紹介します。なんだか、ややこしいですが、要するに
HSPのスクリプトファイルを指定すると、それを実行してくれる
という機能を持ったソフトを作れるということです。
HSPの基本的な機能は、hspcmp.dllという外部ファイルに収められて
いて、これはHSPからプラグインとして呼び出すことが可能です。
つまり、スクリプトエディタで用意されているHSPメニュー関連の
機能はすべてプラグイン命令として呼び出せるわけです。
使い方は、アイデア次第だと思いますが、知っておくと役立つ日が
くるかもしれませんよ。
以下のスクリプトは、「test.hsp」というスクリプトを実行する
(スクリプトエディタで[F5]キーを押すのと同じ)サンプルです。

#include "hspcmp.as"

sdim mesbuf,$10000
sdim rtname,256

fname="test.hsp" ; スクリプトファイル名
objname="obj" ; オブジェクトファイル名

hsc_ini fname
hsc_objname objname
hsc_comp 0 ; コンパイル
res=stat:if res!=0 : dialog "ERROR" : goto *goerror

hsc3_getruntime rtname, objname ; ランタイム名を取得
if rtname="" : rtname="hsp3.exe"
debug_mode=0 ; デバッグウィンドウ表示フラグ

cmdexe = dir_exe+"\\"+rtname+" "+objname
hsc3_run cmdexe, debug_mode ; ランタイムを実行する
*goerror
hsc_getmes mesbuf
objmode 1
mesbox mesbuf,636,446,5
stop

いままでは、この機能を持ったhspcmp.dllは、自由に配布できない
規定でしたが、7月のリリースが予定されているHSP3.1からは、
配布の制限が緩和されているので、自分のソフトなどで自由に使ったり
配布したりできるようになります。
今から、何ができるか考えてみるのも、いいかもしれません。

(おにたま)

投稿者 usuaji : 01:30

2007年06月12日

【講座】HSP3ワンポイントテクニック 第22回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。

以前にも、Unicodeについての話題を出したことがありますが、
今回はさらに深く文字コードについて取り上げてみましょう。
と、言ってもあれこれ難しい呼び名や、歴史の話をしても眠く
なってしまうので、いきなり役立つスクリプトの実例をもとに
説明をしてみたいと思います。

文字コードの問題で一番困るのは、読めない文字を持った
データがやってくることです。言ってみれば、自分が読みたい
本が読めない国の言葉で書いてある…というような状態です。
これは、インターネット上のテキストデータを取得した時によく
起こります。以下のスクリプトは、YAHOO!のトップページに
表示されている内容(html)をファイルに保存するものです。

#include "hspinet.as"
netinit
if stat : dialog "ネット接続できません。" : end
neturl "http://www.yahoo.co.jp/"
netload "index.html"

ここで取得されたデータ(index.html)を、メモ帳などで開くと
日本語がよくわからない文字になっています。
各種文字コードに対応したエディタ(秀丸など)であれば、
正しく表示されますが、HSPも含めて通常は1つの文字コード
(シフトJIS)しか正しく表示されません。
外国語に色々な種類があるように、文字コードにも色々な
種類があり、インターネット上ではそれらが混在して使われて
いるのが現状です。
HSP3では、シフトJISがメインで、補助的にUnicode(UTF-16)
というコードを扱うことができますが、他にもEUCやJIS、
UTF-8など様々な種類が存在しています。先にサンプルを作成
したYAHOO!のページには、EUCが使われています。
それぞれの文字コードについて、細かい部分は省略しますが、
とにかく読める文字にしたくなる場面は少なくないと思います。
そこで、今回は文字コードの変換を行なうスクリプトも紹介
したいと思います。これを使えば、YAHOO!のページに含まれて
いる日本語も、HSPで正しく認識させることができるように
なります。
今回は、この変換のために「nkf32.dll」というDLLを使用する
ことにします。これは、文字コード変換を行なうライブラリ
として古くから多く使われているもので、使い方や、運用の
方法も手軽です。色々なバージョンが存在しますが、以下の
サイトにあるものを使用して作成しました。
http://www.vector.co.jp/authors/VA002133/

通常のプラグインと同様に、ランタイム(hsp3.exe)がある
フォルダに「nkf32.dll」をコピーして使用してください。

#uselib "nkf32.dll"
#func global SetNkfOption "SetNkfOption" sptr
#func global NkfConvert "NkfConvert" var,sptr

fname="index.html"
exist fname
sz=strsize
if sz<0 : dialog "ファイルがありません。" : end
notesel org
noteload fname

sdim cnv,sz*4 ; 変換後のバッファを十分に取る
opt="s" ; SHIFT-JISに変換する

SetNkfOption opt
NkfConvert cnv,org

notesel cnv
notesave "index_s.html"
mes "変換しました。"

このスクリプトは、EUCで書かれている「index.html」という
ファイルをシフトJIS(HSPで使用している形式)に変換して、
「index_s.html」というファイル名で保存します。
「nkf32.dll」自体は、SetNkfOptionという命令で変換の設定
(オプション)を指定した後、NkfConvert命令により変換を
実行するだけで処理は完了します。NkfConvert命令では、
変換先と変換元のバッファを指定する必要がありますが、
バッファの自動拡張は行なわないので、余裕のあるバッファを
確保する必要があるところだけ注意してください。
このDLLにより、様々な文字コードの相互変換を行なうことが
可能です。この例では、ネット上にあるEUCの文字コードを
シフトJISに変換していますが、逆にシフトJISをEUCに変換して
ネット上にftp経由でアップロードを行なうなどの応用も考え
られます。

(おにたま)

投稿者 usuaji : 04:05

2007年05月30日

【講座】HSP3ワンポイントテクニック 第21回

このコーナーでは、HSP3の変わった使用例や、気付きにくい機能
などを紹介していきたいと思います。

今回は、ひそかに活躍しているdirinfo関数について取り上げます。
dirinfo関数は、あまり直接使う機会が少ないかもしれませんが、
カレントディレクトリを示すシステム変数「dir_cur」や、
コマンドライン文字列を示すシステム変数「dir_cmdline」と
いった機能は、マクロになっていて内部ではdirinfo関数が使用
されています。
dirinfo関数は、カッコ内に指定されたパラメーターにより様々な
ディレクトリ情報を返す機能を持っています。
マクロで定義されている名前は以下の通りです。

マクロ、説明(dirinfoパラメーター)
------------------------------------------------------
dir_cur : カレント(現在の)ディレクトリ(0)
dir_exe : HSPの実行ファイルがあるディレクトリ(1)
dir_win : Windowsディレクトリ(2)
dir_sys : Windowsのシステムディレクトリ(3)
dir_cmdline : コマンドライン文字列(4)
dir_desktop : デスクトップディレクトリ($10000)
dir_mydoc : マイドキュメントディレクトリ($10005)

$10000以降のパラメーターは、CSIDL値と呼ばれるWindowsが管理
する特殊フォルダ指定のための識別コードを使用しています。
CSIDL値については、以下のページも参考にしてみてください。
http://yokohama.cool.ne.jp/chokuto/urawaza/prm/CSIDL.html

つまり、上のマクロで定義しているもの意外にも、多くの情報を
dirinfo命令により取得することができるのです。
主に使えそうなのは、

プログラムディレクトリ($10002)
お気に入りディレクトリ($10006)
スタートアップディレクトリ($10007)
最近使ったファイルディレクトリ($10008)
SendToディレクトリ($10009)
スタートメニューディレクトリ($1000b)

などですね。
このように、システム・ツール系のソフトを作る上では、
dirinfo関数の使い方をマスターしておくと便利でしょう。

(おにたま)

投稿者 usuaji : 22:21

2007年05月01日

【講座】HSP3ワンポイントテクニック 第20回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

今回は、Windowsのシェルオブジェクトを使ってみたいと思います。
シェルオブジェクトというのは、Windowsのデスクトップ管理や
フォルダの表示などを行なっているシステム全般を外部から操作する
ための仕組みを指します。
これは、COMコンポーネントで出来ていて、VBScriptや、WSHなど
多くの言語から呼び出すことができます。
HSP3からも、COM操作命令を通して活用することができます。

screen 0,320,150
objsize 320,30
newcom Shell, "Shell.Application"
button "最小化", *win1
button "最小化復帰", *win2
button "エクスプローラー", *win3
button "シャットダウン", *win4
button "サスペンド", *win5
stop
*win1
Shell->"MinimizeAll"
stop
*win2
Shell->"UndoMinimizeALL"
stop
*win3
Shell->"Explore" "C:\\"
stop
*win4
Shell->"ShutdownWindows"
stop
*win5
Shell->"Suspend"
stop

上のサンプルでは、シェルオブジェクト機能の一部をボタンに
割り振って実行させます。
ここでは、newcom命令により、シェルオブジェクトを変数Shell
として初期化しています。あとは、「Shell->"メソッド名"」に
よって機能を呼び出すことができるようになります。
たとえば、「MinimizeAll」は、すべてのウィンドウを最小化する
ものです。「Explore」は、続いて指定されているパラメーターを
パス名としてエクスプローラー表示を行ないます。
ここでは全てを紹介しきれませんが、自分で色々と機能を探して
みると面白いですよ。

Shell Objectリファレンス(英文)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/objects/shell/namespace.asp

(おにたま)

投稿者 usuaji : 12:00

2007年04月19日

【講座】HSP3ワンポイントテクニック 第19回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

前回に引き続いて、型の扱いについて取り上げていきましょう。
HSP3では、「整数型」「実数型」「文字列型」を主に使用すると
言いました。(わからない人は前回のワンポイントテクニックを
参照してください。)
「実数型」と「整数型」については、既に触れているので、
今回は「文字列型」について解説していきましょう。

a="mojiretsu"

このように、「文字列型」は「"」で囲んだ部分を文字列として格納
することができます。HSP3では、文字列として格納する文字数や
文字の種類に制限はありません。ただし、スクリプトに書くときには
特別な書き方が必要な文字もあります。

a="ABC\"DEF"

上の例では、「ABC"DEF」という文字列が代入されます。
「"」は囲むための記号として使われているので、直接書くことが
できないため、「\"」を使うことになっているのです。
他にも、「\」を使っていくつかの特殊な文字を記述できます。

「\n」 → 通常の改行(CR/LF)
「\r」 → 特殊な改行(CR)
「\t」 → タブ
「\\」 → \

代入された変数は、パラメーターに指定することができるほか、
いくつかの計算を行なうことができます。
「文字列型」で行なうことのできる計算は、「+」とif命令で使用
するための論理演算子(「=」「!=」)のみとなっています。

"abc" + "def" → "abcdef" (接続)
"abc" = "abc" → 1 (一致しているかを比較)
"abc" != "abc" → 0 (違っているかを比較)

複数の型が混在する時の計算は、最初に出てくる「型」が結果を
決めるということを前回説明しましたが、「文字列型」の場合も
同じことが言えます。

a = "abc" + 123 + "def"
mes a

のようなスクリプトがあった場合、変数aは、「abc123def」という
文字列になります。自分で型を変換する場合は、strまたはstrf
関数を利用します。たとえば、

a = str(123)

は、「123」という文字列が変数aに代入されます。

a = strf( "%06d", 123 )

は、フォーマット指定により「000123」という文字列になります。
「文字列型」は不定な長さを扱うので、一部だけを取り出したり、
検索を行なうなど様々なサポート命令が用意されています。
文字列の操作は、最初慣れないうちは不自由に感じるかもしれま
せんが、どの命令がどのような機能を持っているか知っていれば、
ほとんどの処理は難しくなくなるでしょう。

(おにたま)

投稿者 usuaji : 20:42

2007年04月03日

【講座】HSP3ワンポイントテクニック 第18回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

今回は、型の扱いについて取り上げてみましょう。
「型」というのは、計算したり変数に格納したりするための基本
となる種類で、HSP3では、「整数型」「実数型」「文字列型」という
3つの型を主に使用することになります。
同じ計算や表示をしても、それぞれの「型」ごとに少しづつ動作が
違ってきます。たとえば、数値型の「2」と「3」を足し算すると、
「5」になりますが、文字列型の「2」と「3」を足し算した時は、
「23」になります。なぜ「型」がいくつもあるのかと言うと、
扱っているものの種類によって最適な動作をすることによって、
便利になったり、高速だったりするからです。
次のようなスクリプトを入力してみてください。

a=1/3
mes a

これは、「1÷3」を計算して表示するだけのものですが、結果は
「0」になってしまいます。これは、最初に出てきている「1」
という数字をHSP3の基本的な型である整数型として判断して
計算が行なわれているためです。
これを実数で計算させるためには、以下のように修正します。

a=1.0/3
mes a

今度は、最初に出てくる「1.0」が小数点の付いた実数型となって
いるため、その後の計算が実数型で行なわれます。
最初から「1」も実数型として扱えばいいのではないかと思われる
かもしれませんが、現在のCPUは実数よりも整数の方が処理速度が
高速で、メモリ効率も優れています。また、多くの場合小数を
使わずに済んでしまうことが多いため、効率を求める上で
このような仕組みができているのです。

ちなみに、変数に代入されているものの型を変えたり、計算の中で
型を変更したい場合には、「str」「int」「double」等の関数を
使います。
たとえば、double関数はカッコ内の値を実数型に変更します。

a=double(1)/3
mes a

とした場合には、カッコ内の「1」が実数型として扱われます。
このように、「型」を使う上で注意するポイントとしては、

・計算の最初に出てくる「型」が結果を決める
・小数点を付けない数字はすべて整数として扱われる
・適切な型を選んで使用した方が効率が良い

となります。
最後に、「1÷3」の計算結果についてですが、精度が低いと考えて
いる人もいるかと思います。HSP3では、実数の文字列変換を行なう
上である程度表示を省略しています。さらに細かい桁を表示する
場合には、以下のようにstrf関数を使って取り出すことが可能です。

a=double(1)/3
mes strf("%4.15f",a) ; 小数点以下15桁まで表示


(おにたま)

投稿者 usuaji : 00:57

2007年03月20日

【講座】HSP3ワンポイントテクニック 第17回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

今回はテキストファイルを扱う方法を取り上げてみましょう。
HSPでは、テキストを扱うために、メモリノートパッドと呼ばれる
命令セットを用意しています。以下はその使用例です。

notesel buf
noteload "test.txt" ; テキストファイル読み込み
repeat notemax ; テキスト行数分繰り返す
noteget a,cnt ; 1行づつ取り出す
mes a
loop

このサンプルでは、「test.txt」というテキストファイルを
変数bufに読み込んで、noteget命令で1行づつ取り出して表示して
います。このように、とても手軽に1行単位のデータを取り出す
ことができるようになっています。
しかし、メモリノートパッド命令はメガバイト単位の大きな
テキストファイルに対しては実行速度がそれほど速くありません。
そこで、1行づつ順番に取り出す場合は、getstr命令を使うことで
高速化することができます。以下はそのサンプルです。

notesel buf
noteload "test.txt" ; テキストファイル読み込み
repeat
getstr a,buf,index,0 ; 1行づつ取り出す
index=index+strsize ; 次の取り出し位置に移動
if strsize=0 : break ; サイズが0ならば終了
mes a
loop

これも、さきほどのスクリプトと同様にテキストファイルの内容を
1行づつ取り出します。notesel命令を使用しているのは、テキスト
ファイルを読み込むためで、noteload命令は変数バッファに
ファイルの内容をそのまま読み込む命令だと考えて問題ありません。
getstr命令のパラメーターについては、ヘルプを参考にしてみて
ください。

(おにたま)

投稿者 usuaji : 23:06

2007年03月06日

【講座】HSP3ワンポイントテクニック 第16回

【講座】HSP3ワンポイントテクニック 第16回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

ファイルを扱うツールなどを作成していると、フォルダ内にある
ファイル一覧を取得する必要が出てくる場合があります。
複数のファイルに対して、同じ処理を行なう時などは、フォルダ内や
特定の拡張子だけをまとめて扱うと効率的です。
このような処理を「バッチ処理」と呼んだりします。
HSP3では、ファイル一覧を取得するための命令として「dirlist」が
用意されています。これは、指定されたフォルダ内にあるファイル
全てか、または名前に特定のパターンを持つものを複数行文字列として
取得できるというものです。
ファイル名を特定するためには「ワイルドカード」と呼ばれる表現を
使用します。これは、「*(アスタリスク)」記号を万能な名前として
扱うもので、「*.txt」と書けば拡張子が「.txt」のものすべて、
「*.*」の場合はすべてのファイルを表しています。

さて、dirlist命令でフォルダ内のファイル一覧は取得できますが、
その中にあるフォルダの下も含めて、すべてのファイルを取得したい
時には困ってしまいます。
そんな時のために、dirlistの上位バージョンにあたるdirlist2命令が
拡張プラグインHSPEXT.DLLで提供されています。
dirlist2命令は、フォルダの下の階層も含めてすべてのファイルを
取得する機能を持っています。また、同時にファイルのサイズや、
更新日時など付加情報も取得することができるのです。

以下は、変数dirで指定したフォルダ以下のファイル一覧を表示する
サンプルです。dirlist命令よりも手順が多くなっていますが、
取得される内容は大きく変わりません。

#include "hspext.as"
buf=""
dir=dir_cur ; 調べるパス
mes dir+"フォルダ以下のファイル一覧"
mesbox buf,640,400
chdir dir ; カレンドディレクトリに移動
dirlist2h 1 ; 初期設定
dirlist2 size,"*.*", 0, '\\' ; サイズを取得
sdim ftmp,size ; サイズを確保する
dirlist2r ftmp ; 結果を取得
objprm 0,ftmp ; 表示する
stop

(おにたま)

投稿者 usuaji : 21:24

2007年02月06日

【講座】HSP3ワンポイントテクニック 第15回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

今回は、音声合成を使ってパソコンを喋らせてみましょう。
Windows XP以降の環境であれば、標準で音声合成が利用できます。
以下のスクリプトは、変数wordに代入された文字列を発音します。

newcom spv, "Sapi.SpVoice"
if varuse(spv)=0 : dialog "SAPI not found." : end
word="Hello this is H.S.P. for windows."
spv->"Speak" word, 1 ; 0だと終了待ち
mes word
stop

ただし、このスクリプトでは英語しか話すことができません。
Windows XPでない人や、日本語を喋らせたいという人に向けては、
MS Agentというシステムが用意されています。
こちらのページから、日本語のシステムや、音声合成エンジンを
ダウンロードすることができます。
SAPI 4.0 runtime support、及びSpeech control panelをインストールすれば、
Windows95以降でも音声合成を利用することができるようになります。
http://www.microsoft.com/msagent/downloads/user.asp

このスクリプトでは、Speech API (SAPI)を呼び出して音声の
出力を行なっています。さらに詳しく使いたい人は、資料を
参考にしてみてください。(以下のリンクは英文です。)
http://msdn2.microsoft.com/en-us/library/ms723627.aspx

(おにたま)

投稿者 usuaji : 09:49 | コメント (0)

2007年01月23日

【講座】HSP3ワンポイントテクニック 第14回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

HSP3では、画像ファイルやデータファイル等を実行ファイルの中に
埋め込んでしまう機能があります。これは、「#pack」や「#epack」
命令によってスクリプト内で指定するか、「PACKFILE編集」のメニュー
から直接ファイルを選択して実行ファイルを作成することになります。
ファイルの中にデータを埋め込むメリットとしては、

・使用している画像ファイルやテキストファイルを見られなくする
・配布するファイルの数を整理する

といったところですが、暗号化の機能と併せて使うことで、ゲームなど
データファイルが大量に使用される場合に、とても有効です。

さらに、もう1つDPMファイルを利用してデータファイルをまとめる
方法が用意されています。これは、実行(exe)ファイルとは別に、
データファイルだけをまとめたファイル(DPMファイル)を作成するという
ものです。たとえば、「a.bmp」「b.bmp」「c.bmp」というデータを
まとめた「data.dpm」というファイルを作成しておいて、そこから
好きな時にpicload命令などでファイルを取り出して使うことができます。
この場合、スクリプトでは、

picload "DPM:data.dpm:a.bmp"

のような指定をして画像ファイルにアクセスすることができます。
DPMファイルを複数用意して切り替えながら使用することも可能です。
この場合は、

chdpm "data.dpm"

のように、フォルダを選択する要領でDPMファイルを指定すれば、
以降はそこに埋め込まれたファイルも読み込みの対象となります。
HSP3では、chdpm命令に暗号化キーのパラメーターが追加されていて、
あらかじめ指定した暗号キーを使うことで、より強力な保護をかける
ことができるようになります。
暗号化されたDPMファイルの作成は、「sample/new/」フォルダにある
「mkpack.hsp」というスクリプトを使うと便利です。

(おにたま)

投稿者 usuaji : 00:52

2006年12月05日

【講座】HSP3ワンポイントテクニック 第13回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい
機能などを紹介していきたいと思います。

今回はメニューを作成してみることにします。

HSPでは、メニューバーを利用する命令を標準で持っていませんが、
「mod_menu.as」というモジュールを使用することにより、手軽に
作成することができます。

以下のサンプルは、「開く」「終了」という項目を持つメニューを
作成して、その選択を取得するというものです。

#include "mod_menu.as"
#define CMD_OPEN 1
#define CMD_QUIT 2
oncmd gosub *OnCommand, WM_COMMAND ; メッセージ割り込み
; サブメニュー作成
newmenu hfilemenu,1
addmenu hfilemenu, "開く(&O)", CMD_OPEN
addmenu hfilemenu, "終了(&Q)", CMD_QUIT
; トップメニュー作成
newmenu hmenu,0
addmenu hmenu, "ファイル(&F)", hfilemenu, 0x10
applymenu hmenu
stop

; メッセージの処理
*OnCommand
cmd=wparam & 0xFFFF
if cmd=CMD_OPEN {
dialog "メニューを選択しました。"
}
if cmd=CMD_QUIT {
end
}
return

最初にサブメニューを作成しておいて、最後にトップメニューとし
て登録するという流れを覚えてしまえば、それほど難しくありませ
ん。

addmenu命令で指定しているメニューに表示する文字列は、
「"開く(&O)」のように、「&」に続けてショートカットキーに
なる文字を指定することができます。

ラベル「*OnCommand」以降は、選択した項目を取得するための
部分です。

メニューに割り当てられたIDごとに処理を行なうようになって
います。

(おにたま)

投稿者 usuaji : 21:13

2006年11月21日

【講座】HSP3ワンポイントテクニック 第12回

【講座】HSP3ワンポイントテクニック 第12回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

今回は、動画再生について取り上げてみましょう。
HSPのウィンドウ上で動画を再生するには、mmload、mmplay命令等で
aviファイルを指定することで可能です。
しかし、wmv、asfなどさらに多くのファイル形式を扱う時や、
ネットワーク上に置かれたファイルをストリーム(読み込みながら)
再生したい場合には、別な方法を取る必要があります。
以下のサンプルは、axobj命令によりメディアプレーヤーのActiveX
コントロールをウィンドウ上に配置して、「test.wmv」という
動画ファイルを再生するものです。(実際に動作させる場合は、
カレントディレクトリにある動画ファイルを指定してください。)

;
; メディアプレーヤーを配置する
;
axobj mp, "{22d6f312-b0f6-11d0-94ab-0080c74c7e95}",640,480
mp("ShowTracker")=1 ; トラックバー表示のON/OFF
mp("EnableTracker")=0 ; トラックバーの有効/無効
mp("ShowControls")=1 ; コントロールボタン表示のON/OFF
mp("ShowCaptioning")=0 ; キャプション表示のON/OFF
mp("ShowAudioControls")=0 ; ボリューム表示のON/OFF
mp("EnableContextMenu")=0 ; コンテキスト(右クリック)メニューの有効/無効
mp("PlayCount")=1 ; 再生する回数
mp("AutoStart")=1 ; オートスタートのON/OFF
mp("FileName")="test.wmv"
stop

ファイル名を指定している部分を、インターネット上のURLに変更
すれば、ストリーム再生をさせることも可能です。
メディアプレーヤーを配置するサイズや、各種設定を変更することが
できるので、様々な用途に使用することができると思います。

(おにたま)

投稿者 usuaji : 11:06

2006年10月25日

【講座】HSP3ワンポイントテクニック 第11回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

今回は、実務向けにHSP3を使った例として、今回はMicrosoft Excelとの
連携を取り上げてみます。

言うまでもなく、Excelは仕事にも定番で使われている表計算ソフト
ですが、ここで作成したデータをHSPから取り出す方法について
紹介していきましょう。

Excelのデータを取り出す方法としては、一度cvs形式などテキスト
ファイルとして扱えるデータファイルで出力する方法なども
ありますが、今回はHSP3が持つCOM呼び出しを利用して直接xls
ファイルにアクセスしてデータを取り出してみます。

newcom命令で、ExcelのプログラムIDである"Excel.Application"を
指定することで、各種機能を利用できるようになります。

細かい部分は、VBScript等でアクセスする手順と同じなので、
ここでは省略しますが、指定されたファイルを開き、データのある
項目数を取得して自動的に全データを取り出しています。

COMの内部では、文字コードとしてUnicode形式が使用されていますが、
HSPで扱う場合には自動的にSJIS形式に変換されています。

これにより、xlsファイルに含まれるデータをもとに変換を
行なったり、HSP上でデータを取り込んで使用することが手軽に
できるようになります。

以下のサンプルは、カレントディレクトリにある「test.xls」
というファイルの内容を表示するものです。

;
; xlsのデータを取得する
;
myname = "test.xls"
fname = dir_cur+"\\"+myname ; フルパスを作成する
;
newcom xlApp, "Excel.Application"
xlApp("Visible") = 0; Excelウィンドウは非表示
xlApp("DisplayAlerts") = 0; 警告メッセージを表示させない
xlBooks = xlApp("Workbooks") ; Workbooks コレクション取得
xlBooks->"Open" fname ; 指定ファイルを開く
xlBook = xlBooks("Item",myname) ; book取得
xlSheet = xlBook("Worksheets","Sheet1") ; Sheet取得
xlRange = xlSheet("Range","A1")
xlCurReg = xlRange("CurrentRegion")
xlRows = xlCurReg("Rows")
xlColumns = xlCurReg("Columns")

sy = 0+xlRows("Count") ; 縦の項目数を取得
sx = 0+xlColumns("Count") ; 横の項目数を取得

repeat sy:y=cnt
repeat sx:x=cnt
xlCur = xlRange("Offset",y,x) ; X,Yのセルを取得
data = xlCur("Text") ; 内容テキストを取り出す
mes "("+x+","+y+")="+data ; 表示する
loop
loop

; COMのあとしまつ
delcom xlCur : delcom xlColumns : delcom xlRows
delcom xlCurReg : delcom xlRange : delcom xlSheet
delcom xlBook
xlBooks->"Close" : delcom xlBooks
xlApp->"Quit" : delcom xlApp


テストデータが、以下のURLにありますので、実験してみてください。
http://hsp.tv/misc/test.xls

このスクリプトを実行するためには、Excelがインストールされている
必要がありますので、注意してください。

投稿者 usuaji : 01:24

2006年08月17日

【講座】HSP3ワンポイントテクニック 第10回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

今回は、配列変数について取り上げてみましょう。
HSP3からは、配列変数を「a(10)」のようにカッコを使って表現する
スタイルに変更されています。HSP2までの、「a.10」も使用する
ことができますが、カッコを使うことで配列要素部分に式を利用
できたりと便利になっています。
ちなみに、「a.10」のような表記は実行時に「a(10)」に変換されて
しまうため、どちらの書き方でもメモリ効率や速度は変わりありません。
もう1つ、HSP2から変わっている点として配列変数の自動確保が
挙げられます。
たとえば、a(15)を使いたい場合は、

dim a,16
a(15)=1

のように配列を確保してから使用するのが普通ですが、

a(15)=1

のように、いきなり配列を指定することも可能です。
これは、a(15)に代入を行なった時に、自動的にa(0)~a(15)を
使用できるように配列の自動確保が行なわれたからです。
ただし、代入ではなく「mes a(15)」のように確保されていない
要素を参照しようとした時にはエラーになります。
あくまでも、代入の時にしか自動確保されないことを覚えて
おいてください。
配列の自動確保は便利な機能ですが、

a(1000)=1

のように指定すると、a(0)~a(1000)までを一気に確保してしまう
ので、知らないうちにメモリを使い過ぎないように気をつけた方が
いいでしょう。
また、現在どこまで配列が確保されているかを調べることも
できるようになっています。
length関数は、指定した変数の配列がどれだけ確保されているかを
数値として返します。

a(15)=1
mes length(a)

これがあれば、すべての配列要素に同じ処理を繰り返して
行なうような場合にも使えます。

; 配列変数aの中身をすべて表示する
repeat length(a)
mes a(cnt)
loop

そして、これと同じことを行なう繰り返し命令がforeachです。

; 配列変数aの中身をすべて表示する
foreach a
mes a(cnt)
loop

どれも、使う機会の多い機能だと思いますので、知っておくと
便利ですよ。

(おにたま)

投稿者 usuaji : 00:00

2006年06月20日

【講座】HSP3ワンポイントテクニック 第9回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

今回は実数の乱数を得る方法についてご紹介します。
乱数は、通常rnd関数というもので得られます。
0から9までの10通りの乱数が欲しい時は、「変数=rnd(10)」
のように書けば、乱数が変数に代入されます。
しかし、rnd関数はあくまでも実用の範囲内で簡易的に求められており、
その範囲も整数で32768通り(15bit精度)までとなっています。
HSPで使用できる実数は、64bit精度になっており、数学の世界で
シミュレーションを行なう際などに必要となる乱数としては、
精度が足りないことがあります。
そこで、HSP3からは拡張プラグインHSPDAに実数で乱数を取得するための
命令が追加されています。
以下のスクリプトは、実数の乱数を20回表示するものです。

#include "hspda.as"
rndf_ini ; 乱数の初期化
mes "実数で0~1までの乱数を生成します。"
repeat 20
rndf_get dval ; 乱数の取得
mes "RND="+dval
loop

このプラグインで求めている乱数は、Mersenne Twisterと呼ばれる
優れたアルゴリズムを使用しています。詳しくは、以下のページを
参照してみてください。

Mersenne Twister Home Page
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html

(おにたま)

投稿者 usuaji : 23:13

2006年06月06日

【講座】HSP3ワンポイントテクニック 第8回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

HSP3では、picload命令でBMP、JPG、GIFといった形式を扱えるように
なっていますが、それ以外の画像を扱う場面もあるでしょう。
特に、PNG形式は可逆圧縮でコンパクトなサイズに収めることが
できるため、便利な画像フォーマットの1つと言えると思います。

HSP3では、「mod_img.as」というモジュールが標準で用意されており、
これを利用することで、いくつかの画像フォーマットを読み込むことが
できるようになります。

以下のスクリプトは、「mod_img.as」モジュールで提供される命令を使
ったサンプルです。最初に「#include "mod_img.as"」を入れるだけで、
imgload命令を使用することができます。
imgload命令は、指定した画像ファイルの内容を現在のウィンドウ内に
描画します。

#include "mod_img.as"

dialog "BMP;*.JPG;*.PNG;*.GIF;*.ICO;*.TIFF",16
if stat = 0 : end
imgload refstr
sx=size@imgctx(0)
sy=size@imgctx(1)
dialog "画像サイズは、("+sx+","+sy+")です。"
stop

imgload命令により、BMP、JPG、PNG、GIF、ICO、TIFFといった形式を
扱うことができます。ただし、HSP以外のシステムを通してファイルを
読み込むため、EXEファイルやDPMファイルにデータを埋め込むことが
できないほか、memfile命令によるメモリ経由のアクセスもできないので
注意してください。

(おにたま)

投稿者 usuaji : 13:28

2006年05月24日

【講座】HSP3ワンポイントテクニック 第7回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。
HSP3になって追加された機能の1つとしてCOM連携があります。
COMとは、Component Object Modelの略で聞くからに難しそうな感じがし
ます。
そもそもCOMとは何なのか、わからない人も大勢いると思います。
簡単に言ってしまうと、COMはWindowsのDLLと同じで、よく使う機能や動
作をまとめて他の人が使えるように提供しているライブラリなのです。
ですから、拡張プラグインと同じように色々な機能を持ったCOMが存在し、
それをスクリプトから呼び出して自由に使うことができます。
DLLは、機能の呼び出し方法がシンプルだったのに対して、COMは色々な
スクリプト言語に対応しやすいような取り決めや支援が行なわれます。
この取り決めが複雑なので、一般に難しいと思われていますが、単純に機
能を呼び出して使う限りは問題ありません。
COMを使った例は、サンプルの中のCOMOBJフォルダに収録されています。
以下のスクリプトはIEコンポーネントというCOMを呼び出した例です。

newcom ie, "InternetExplorer.Application"
ie->"navigate" "http://www.onionsoft.net/"
ie("Visible")=1

このように、COMの機能を使うこと自体は難しくありません。
ただし、COMの種類が膨大にあり使い方はそれぞれ異なるので、そちらを
覚えるのが大変かもしれません。それでも、色々と便利な機能が揃ってい
るので、あせらずに習得していくといいでしょう。
COM自体は、Java ScriptやVisual Basicなど他の言語からも呼び出すこと
ができるようになっており、参考書なども手に入れやすいと思います。

(おにたま)

投稿者 usuaji : 23:47

2006年01月17日

【講座】HSP3ワンポイントテクニック 第6回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。
今回は、ファイルのハッシュ値について覚えてみましょう。
これは、HSP3から追加されたプラグイン「hspinet」に搭載されている
機能の1つです。

#include "hspinet.as"
dialog "",16
fname = refstr
mes "FILE="+fname
filecrc a,fname
mes "CRC="+a
filemd5 md5,fname
mes "MD5="+md5
stop

上のサンプルスクリプトは、ファイルのハッシュ値としてCRC32及び、
MD5を取得して表示を行ないます。
ハッシュ値とは何でしょう? これは、簡単に言うと「ファイルの内容を
数字で表わしたもの」になります。たとえば、あなたが「こんにちは」
という文字を打ち込んで保存したテキストファイルがあるとします。
このファイルからハッシュ値を求めると1597860478のような数字が
出てきます。
この数字は、「こんにちは」という内容のテキストファイルからしか
出てきません。
「こんばんは」という内容のテキストファイルからは、また別な数字が
出てきます。
つまり、ファイルの内容全体(ファイル名は関係ありません)を他と
重複しないような
数字に置き換えたものがハッシュ値になります。
これは、1597860478という数字が「こんにちは」という文字に置き換え
られるわけではありません。あくまでも、重複しない数字を求めている
だけです。
どんなに大きなファイルでも、どんなに複雑な内容でも必ず決まった
サイズの数字に置き換えられます。
そんなことできるの? と思ってしまいますが、偉い学者の先生が
長年かけて築き上げてきたもので、実用上問題ないものになっています。
では、CRC32とかMD5って暗号のような言葉はいったい何でしょう?
これは、どちらもハッシュ値ですが、CRC32は32bit…つまりHSP3が
使用できる整数値の範囲内で求めるのに対して、
MD5は128bitで32ケタの16進数文字列として取得されます。
当然、MD5の方が精度が高く重複はほぼありえないと言っていいでしょう。
ハッシュ値は、2つのファイルが同じかどうかを比べたり、
パスワードを保存する種として使われるなど、身のまわりでも
重要な技術として使われています。
すぐに使うことはないかもしれませんが、
覚えておいて損はありませんよ。

(おにたま)

投稿者 usuaji : 23:10

2006年01月14日

【講座】HSP3ワンポイントテクニック 第5回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。
HSP3から追加された新しいプラグインにhspinet.dllがあります。
これは、インターネットネット接続された他のサーバーと通信を行なう
ことのできる
便利な命令が多数用意されています。
hspinetが主にサポートするのは、WEBブラウザで表示されるホームページ
上のデータです。
これは、httpプロトコルと呼ばれる方法で通信することで取得できるもの
です。
(これ以外にも、ftpプロトコルと呼ばれる方法もサポートしていますが、
ちょっと複雑になるので、ここでは扱いません。)
ホームページのデータは、htmlという形式で作られていますが、これをフ
ァイルとして手軽に取得することが可能です。
プラグインを使用するために、「#include "hspinet.as"」を先頭行に入
れて、あとはnetinit命令で初期化を行ない、neturl命令でURLを、
netload命令で取得する
ファイルの名前を指定するだけでOKです。
成功すると、カレントフォルダに指定したファイルが作られている
はずです。
以下のスクリプトは、HSPTV!サイトで使われているhtmlを取得している例
です。ネットと連携するなど色々な応用に使ってみると面白いと思います。

#include "hspinet.as"
;
; HSPTV!のhtmlをダウンロードしてみよう
;
netinit
if stat : dialog "ネット接続できません。" : end
neturl "http://hsp.tv/info/"
netload "about.html"
mes "OK"
stop

(おにたま)

投稿者 usuaji : 03:40

【講座】HSP3ワンポイントテクニック 第4回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。
HSP3になって拡張された機能の1つにデバッグ支援があります。
デバッグ支援は、スクリプトが実行されて変数やバッファなどの内容が正
しく変化しているかを確認するための助けになります。
HSP2.61では、デバッグウィンドウと履歴付き実行という機能によりデバ
ッグ支援を行なっていました。HSP3では履歴付き実行の替わりにメッセー
ジログ機能、デバッグウィンドウではステップ実行、実行の強制停止など
が盛り込まれました。

 メッセージログ機能は、見落としがちですが、デバッグウィンドウの
「ログ」というタブに任意のメッセージを表示しておくためのものです。
スクリプト実行中の変数の内容などを調べたい場合、dialog命令やtitle
命令などを使って一時的に表示させることができますが、実行を中断して
しまったり、画面上で見難くなる可能性がありました。logmes命令は、
HSPのウィンドウとは別な場所にメッセージを表示するため、実行の見た
目はそのままにデバッグ用のメッセージ確認ができます。
assert命令は、スクリプトの中である条件を満たすかどうかを確認するた
めの命令です。たとえば、変数aの値が10より少ない場合にしか正しく
動作しないスクリプトがあったとすると、

if a>=10 : dialog "aの値がおかしい!"

のようなスクリプトでチェックしておくと安心ですよね。
assert命令は、この代わりに以下のように書きます。

assert a<10

 この1行が実行された時点で、変数aの値が10より少ない場合は、
何もせずに次の行から実行が続けられます。変数aが10以上の場合は、
デバッグウィンドウを表示して実行を中断します。
assert命令のパラメーターには、通過するための条件を書かなければなら
ないので注意してください。assert命令のポイントは、[F5]を押して実行
している場合、つまりデバッグ時にのみ有効だということです。
実行ファイルを作成した場合には、assert命令そのものがコードに含まれ
なくなります。つまり、デバッグ時にはより細かいチェックをしておき、
実行ファイルを作成した場合には余計なチェックを省いて高速に動作させ
ることができるようになるわけです。

デバッグ支援機能の使い方は、人それぞれのスタイルがあると思いますか
ら、自分に合った方法を探してみるといいでしょう。

(おにたま)

投稿者 usuaji : 03:39

【講座】HSP3ワンポイントテクニック 第3回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

今回は、IEコンポーネントを使ってファイルビューアーを作成します。
IEコンポーネントは、ネット上のファイルを表示するためのパーツとして
考えがちですが、ローカル(自分のコンピューターが記憶している)
ファイルを表示させることも可能です。

以下のスクリプトは、カレントディレクトリにある「test.pdf」という
PDFファイルをHSPのウィンドウ内に表示するものです。
PDFファイルは、Adobe Acrobat Readerなどのソフトをインストールする
ことで閲覧可能になる形式ですが、IEのウィンドウ内に表示することの
できるドキュメントは、同じように表示することができます。
同様に、HTMLはもちろん、swf(Macromedia Flash)なども扱うことが
できます。

; IEコンポーネントでファイル表示
cls
file="test.pdf" ; 表示するファイル名
objsize 640,24
button "終了",*bye
axobj ie, "Shell.Explorer.2",640,480-24
ie->"Navigate" dir_cur+"\\"+file
stop
*bye
end

(おにたま)

投稿者 usuaji : 03:38

【講座】HSP3ワンポイントテクニック 第2回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

HSP3になって、text命令が廃止されてしまって不便を感じている人も
いるかと思います。ゆっくり文字を表示するためのtext命令自体は、
なくなってしまいましたが、そのかわりに「hsp3util.as」という
モジュールが標準で用意されており、これを利用することで同様の動作を
させることができます。

以下のスクリプトは、「hsp3util.as」モジュールで提供される命令を使
ったサンプルです。最初に「#include "hsp3util.as"」を入れるだけで、
命令を使用することができます。
text命令は、文字を表示するスピードの指定(HSP2.61のtext命令と同様)、
textmode命令で通常(0)、影文字(1)、袋文字(2)などの修飾を指定してか
ら、emes命令(mes命令と同じ使いかた)でメッセージの表示を行なってい
ます。

;
; ゆっくり文字列を表示するサンプル
;
#include "hsp3util.as" ; emes命令を使用するために必要です
font msgothic,30,1
a="ゆっくりと文字を出してみましょう。"
text 100 ; 表示スピードの設定
color 0,0,0 ; 影の色
textmode 1 ; 影文字指定
color 0,128,255 ; 文字の色
emes a ; メッセージ表示

(おにたま)

投稿者 usuaji : 03:38

【講座】HSP3ワンポイントテクニック 第1回

このコーナーでは、HSP3の変わった使用例や、気がつきにくい機能など
を紹介していきたいと思います。

最初は、COMを使ったサンプルを紹介しましょう。

以下のスクリプトは、appleが配布しているiTunesというソフトと連携し
て動作するものです。再生と停止、再生中の曲情報などを取得できます。
このように、COM機能を使うことで色々なソフトとの連携が可能です。
iTunesの機能は、COMからすべて利用可能になっています。

チャレンジしたい人は下の資料で調べてみるといいでしょう
(英語ですが)。
http://developer.apple.com/sdk/itunescomsdk.html

; iTunesを使う
title "iTunes monitor"
screen 0,320,60:sysfont 17:objsize 120,20:pos 188,10
newcom iTunes, "iTunes.Application"
button gosub "play",*i_play
button gosub "pause",*i_pause
*main
track = iTunes("CurrentTrack")
redraw 0:syscolor 15:boxf
color 0,0,0:pos 8,8
mes "Now Playing :"
mes ""+track("Name")+"\n("+track("Artist")+")"
redraw 1:wait 300:delcom track:goto *main
*i_play
iTunes->"Play"
return
*i_pause
iTunes->"Pause"
return

(おにたま)

投稿者 usuaji : 03:37