HyqerCard Referrenceはこちらです。
ご質問やご要望があればコメントにお書き込みください。

目次

HyqerCardって何?

スタックの作成・保存・インポート

スタックの公開(基本編:ファイルの準備)

スタックの公開(基本編:ファイルの公開)

スタックの公開(オプション編:Storage)  ← 2017/7/1新規

スタックの公開(オプション編:Controlファイル) ← 2017/7/5新規

HyqerTalkの注意事項 その1

HyqerTalkの注意事項 その2 ← 2017/6/27追記

HyqerTalkの注意事項 その3 ← 2017/7/3追記

HyqerTalkの注意事項 その4 ← 2017/6/29新規

画像取り込みとディザリング

HyperCardとの挙動の違い その1 ← 2017/7/1追記

リソースの取り込み

実行速度の調整

高速化 ← 2017/7/3新規

iOSデバイス上での動作 ← 2017/6/29新規

 

 

 

2017/7/8

 HyqerCard01.jsのアップデートを行いました。message boxの挙動変更です。最新版は「July 06 2017 20:29 Asia/Tokyo」です。「About the Finber...」から確認できます。以前のものがブラウザのキャッシュに残る場合がありますのでご注意下さい。

 

2017/7/1

 HyqerCard01.jsのアップデートを行いました。hide状態でのオブジェクトの位置変更時のrectangleの値不具合の修正です。最新版は「July 01 2017 15:53 Asia/Tokyo」です。 

2017/7/1 HyqerCard01.jsのアップデートを行いました。iOSでのmouse関係の座標不具合の修正です。最新版は「July 01 2017 11:56 Asia/Tokyo」です。

2017/6/30 HyqerCard01.jsのアップデートを行いました。HyqerTalkのエラーダイアログ挙動の修正です。最新版は「June 30 2017 18:22 Asia/Tokyo」です。

2017/6/26 HyqerCard01.jsのアップデートを行いました。mouse関数の修正です。最新版は「June 26 2017 23:28 Asia/Tokyo」です。

2017/6/25 HyqerCard01.jsのアップデートを行いました。「Importer」と「Rez Edit」の修正です。最新版は「June 24 2017 20:45 Asia/Tokyo」です。

スタックの公開(オプション編:Controlファイル)

ControlPanelの設定を保存しておいて、公開する時に反映することができます.

 

ControlPanelの起動

 Finberのアップルメニューから「ControlPanel」を選ぶとControlPanelプログラムが起動します。

 

ControlPanelの項目説明

Screen Size

 Mac!ntoshのスクリーンサイズ

  • Window:ブラウザのウィンドウサイズを使います。
  • Standard 9"(512x342):コンパクトMacのスクリーンサイズです。
  • PowerBook(640x400):初期のPowerBookのスクリーンサイズです。
  • Large(640x480):VGAのスクリーンサイズです。

 下の3つはHyqerCardのスタックサイズ指定に合わせています。ウィンドウ中央に括弧内のピクセルでデスクトップを表示し周囲は黒くしています。スタックサイズにスクリーンサイズを合わせると、全画面表示になります。コンパクトMacの時代に512x342で作られたスタックは沢山あり、その雰囲気を出すためのものです。
 
Font

 Finberやダイアログなどで使用される標準のFontを指定します。

 

Number of Cols

 Finberで表示するアイコンを横に何個並べるかを指定します。3〜6が指定でき、ファイル数がこの数を超えると2段目以降に並べます。

 

Font Smoothing

 CSSのFontSmoothingです。過去のスタックの画像を利用すると、文字が画像として書かれている場合、ビットマップフォントで書かれているのに対し、HyqerCardのボタンやフィールドの文字は標準的にはアンチエイリアスがかかってしまい、雰囲気が変わってしまいます。そのような時はFontSmoothingをnoneにするとアンチエイリアスが外れます。この値はSafariGoogleChromeで有効です。FireFoxでは無効です。

 

HyqerCard Speed

 実行速度の調節を参照


 FontSmoothingとHyqerCard Speedは当初、controlPanelでの制御をしていましたが、のちにスタックファイルのコメントに

 

speed:0
FontSmoothing:none

 

などと書くことで、controlPanelの設定に優先して反映されるようになっています。

 

ControlPanel設定の保存

 ControlPanelを起動し、Fileメニューから「Save...」を選択し、任意の名前で保存します。デフォルトでcontrolPanelです。このファイルをExporterでローカルファイルに任意の名前で保存します。


ControlPanelファイルの修正

 ControlPanelファイルはJSON形式のテキストファイルなので必要に応じでテキストエディタなどで修正してください。書式はあえて説明しませんが、上記説明を見て、テキストファイル内を見れば、なんとなくわかると思います。ScreenSizeは任意のサイズに変更できます。


公開時の反映方法

 公開する時にControlPanelファイルを「.control」というファイル名でMac!ntosh上にダウンロードされるようにしてください。冒頭「.」のファイルは隠しファイルです。

つまり以下のような感じです。

http://www.eonet.ne.jp/~gregor/hyqercard/index.html?.contorl=controlPanel&HyqeCard=HyqerCard&Home=MyHome

高速化

ゲームなどで処理を速くしたい場合は、この記事を参考にして下さい。

 

行数を減らす

 HyqerCardでは(javacriptの)setTimeoutで間隔を置いて1行ずつ読んで実行しています。間隔はspeed設定(実行速度の調整を参照)に応じて変えています。

 

  • 0:  4ミリsec(Javascriptの仕様で4ミリsecが最小値のようです)
  • 1:  8ミリsec
  • 2: 16ミリsec
  • 3: 24ミリsec

 

 なので、行数が少なければ処理が速くなります。

 

  if  条件式  then
   命令1
  else
   命令2
  end  if

 

とするより

 

 if  条件式  then  命令1  else  命令2

 

とした方が速いのです。ただし可読性が落ちる場合があります。

 


読み飛ばし


以下は読み飛ばします。

  1. 空白行
  2. コメント行
  3. if文で条件がfalseの時の命令行(if,repeat,else,endなどの文は読み飛ばしません)

 基本的に空白行とコメント行は読み飛ばすので、可読性のための空白行やコメント行は入れましょう。読み飛ばしのための負荷は0ではありませんが本当に微々たるものです。ただし、ハンドラ内の1行目は空白行、コメント行も読んでしまうので、1行目は有効な命令やif,repeat文などを記述してください。

 

on  handler
  -- コメント ← 1業目なので読み飛ばされない
  命令1
        ← 空白行なので読み飛ばされる
  命令2
  -- コメント ← 読み飛ばされる
  if  1  =  1  then
   命令3
  else
   命令4  ← 読み飛ばされる
   if  2  =  2  then
    命令5  ← 読み飛ばされる(if  1  =  1の条件に対してfalseであるため)
   else
    命令6  ← 読み飛ばされる
  end  if
 end  if
end  handler

 

裏技(関数の使用)

 

 ハンドラ内の命令は複数行あれば複数回に渡って読み出し・実行しますが、関数内の命令は複数行あっても実行する時は一気に実行してしまいます。本来、関数は引数を渡して何らかの演算をして値を返すものですが、上記仕組みを利用して複数行を一気に1行分の読み込みで実行させることができます。なので以下のようなことができます。

 

on  handler
 get  kansu
end  handler

 

function  kansu
 show  cd  btn  1
 show  cd  btn  2
 show  cd  btn  3
 show  cd  btn  4
 return  true
end  kansu

 

 ハンドラにshowコマンドを書けば4回の読み出し・実行が必要になりますが、上記の例だと1回ですみます。ただし、関数は非常に制限が多いので使用にご注意を。特にrepeatが使えないため利用できないシーンが多いかと思います。

スタックの公開(オプション編:Storage)

 Mac!ntosh上のファイルはデフォルトでSessionStorageに保存されますが、保存先を変更することができます。

 他の保存先はmemoryとLocalStorageです。SessionStorageとLocalStorageはHTML5で規格化されたWebStorageですが、memoryは無理やりJavaScriptの変数上に格納します。ちなみにSessionStorageとLocalStorageはSafariがプライベートブラウズモードの時、I/Oに失敗するため、Mac!ntoshが起動しません。memoryはそれを回避するために作ったモードです。

 

ただし、LocalStorageモードは、ご自身で使う分には良いですが、他者に公開することは推奨しません。また、LocalStorageに不正なデータが混入した場合、Finber上にファイル表示されなくなる可能性がありますので環境設定で開発メニューを表示させておいて、いざという時にLocalStorageの操作ができるようにしておくことをお勧めします。

 

それぞれの挙動と特徴

 memory

  • 画面右上のディスクの名前が「memoryStorage」となる。最大サイズは不明。
  • reloadするとreload前のファイルは全て消える。
  • アップルメニューから起動するアプリ数が少ない。ControlPanelなどは継続的なstorageとreloadを前提としているため。

 SessionStorage

  • 画面右上のディスクの名前が「SessionStorage」となる。最大サイズはブラウザに依存する。
  • SafariではプライベートブラウズモードではMac!ntoshが起動しない。
  • セッションが続いている間はStorage上のファイルが保持される。reloadしてもファイルがきえない。

 LocalStorage

  • 画面右上のディスクの名前が「LocalStorage」となる。最大サイズは5M。
  • SafariではプライベートブラウズモードではMac!ntoshが起動しない。
  • 永続的にStorage上のファイルが保存される。とされるのですがSafariでキャッシュクリアしたら消えました(泣)。
  • 「Quit HyperCard」時の自動保存がされません。必要であればアップルメニューから「Save Stack」をしてください。
  • いくつかの隠し機能が表示される。

 

スタックの公開(基本編:ファイルの公開)で説明したとおりhtmlファイルの後ろに

 

Finber上でのファイル名=サーバ上のファイル名

 

と記載するとサーバ上のファイルをダウンロードしてFinber上に保存すると説明しました。

この書式は「webサーバ上のファイルをMac!ntosh上にロードする際の書式と言って良いです」と書いたとおりですが、例外が一つだけあって、Storage指定の書式がそれです。

 

Storage指定の書式

htmlファイルの直後に

 

?storage=(ストレージ名)

 

と書くとストレージを指定できます。

ストレージ名は「momory」「session」「local」の3つが指定できます。

以下のように指定します。
http://www.eonet.ne.jp/~gregor/hyqercard/index.html?storage=memory&HyqerCard=HyqerCard&Home=MyHome

※htmlファイルの直後以外だとwebサーバ上の(ストレージ名)というファイルをMac!ntosh上にstorageという名前で保存をすると解釈します。

iOSデバイス上での動作

 HyqerCardは、まず「MacSafariHyperCardの動作を真似る」というところから始めているのでiOSでの稼働を前提としていません。試しにiOS上で動くか試したら案の定、起動させることすらできなかったのですが、ちょっと改修加えたらなんとか立ち上がったので、少しだけ手を加えて多少動くようにしたというような状況です。

 

編集機能 

 iOS上ではドット単位で細かい作業をするのに向かないので、オブジェクトの移動やサイズ変更などはマウスでやるような訳にはいきません。なのでToolsメニューを非表示にして編集機能は全面的に使えないようにしています。そもそも移動、サイズ変更などは機能的にも対応させていませんので、Toolsメニュー表示させても使えません。

 もしかしたらiPadProであればApplePencilを使ってうまく操作できるのかもしれませんが、生憎所有していないのでなんとも言えません。

 

メッセージ

以下はマウス関係のメッセージの対応状況です。念のためテストしてみました。

◯ mouseDown 

△ mouseLeave(touchEnd後、他のオブジェクトにアクセスする時に発生)

△ mouseEnter (touchEnd時に発生)

 mouseUp

 mouseStillDown

△ mouseWithin(touchEnd後に発生。他のオブジェクトにアクセス時に停止)

 

 

JavaScript的には以下のイベントに紐付いています。

mouseDown → mouseDown/touchStart

mouseLeave → mouseOut

mouseEnter → mouseOver

mouseUp → click

mouseStillDown → 対応するイベントなし

mouseWithin → 対応するイベントなし

 

mouseLeave、mouseEnter、mouseWithinは発生タイミングが変なので使えないと考えてください。

 

それにしてもJavascriptのmouseOutやmouseOverイベントが(おかしなタイミングですが)発生しているとは思っていませんでした。

 

 

カーソル

 カーソルはブラウザのカーソルをそのまま使っていますので、iOSでは一切表示されません。

 

 

HyqerTalkの注意事項 その4

ちゃんと動かない記述例

 

例1. put  the  number  of   this  card  -  1  into  hensu

 

今のカード番号 - 1 を変数にいれるというものですが、エラーが発生します。以下のとおりにして下さい。

 

put  (the  number  of  this  card)  -  1  into  hensu


または

 

put  the  number  of  this  card  into  hensu1

put  hensu1 -  1  into  hensu

 

例2. repeat with i=(120 + random(number of btns)) down to 1

 

repeat with文の変数の初期値設定のところでエラーが出ます。どうも括弧の解釈に不具合が有る模様。

以下のとおりにして下さい。

 

put  random(number  of  btns)  into  hensu

repeat  with  i=(120  +  hensu)  down  to  1

 

または以下のとおり

put  120  +  random(number  of  btns)  into  hensu

repeat  with  i=hensu  down  to  1

HyqerTalkの注意事項 その3

文字列の比較

 元祖HyperTalkでは文字列の比較に大文字小文字を区別しませんが、HyqerCardでは大文字小文字を区別します。これはHyqerTalkの'is','='や'is not',’<>'を単純にjavascriptの'==='とか'!=='に変換しているからです。手抜きですみません。特に注意願いたいのは関数の返り値です。基本的に文字列を返す関数は小文字で返しています。例えばsoundとかmouseです。


 the  sound  is  "done"

 the  mouse  is  "up"

 

 などのように小文字で比較してください。

 

 the  sound  is  "DONE"

 the  mouse  is  "UP"

 

は期待通りの挙動をしません。あと、ついでながら現時点(2017/6/24)、mouse関数は私が挙動をよく理解できていなくて正しく値を返していないように思われます。

 

真偽値

 元祖HyperTalkのtrue,falseは文字列として扱いますが、HyqerTalkでは真偽値として扱われます。ですので

 

 the  mouseClick  is  true

 the  enabled  of  cd  btn  1  is  true

 

などのように真偽値を返す関数やプロパティーは定数(true,false)で評価や設定をしてください。

 

 the  mouseClick  is  "true"

 the  enabled  of  cd  btn  1  is  "true"

 

のように文字列で値を評価しないでください。

 

 

座標指定上の注意

 座標指定でマイナス値を指定する場合は変数を使ってください。ロジックを追っていないので不具合箇所を特定していないのですが、とにかく

 

 set  loc  of  cd  btn  1  to  -30,-30

 

 というような指定はエラーになります。

 

 put  -30  into  hensu1

 put  -30  into  hensu2

 set  loc  of  cd  btn  1  to  hensu1,hensu2

 

という風にして下さい。

確認していませんが、rectangle指定も同様だと考えます。

 

2017/7/3追記

domenu  "Quit HyperCard"

 アプリ名はHyqerCardですが、メニューで終了させる時は"Quit HyperCard"です。これは、HyperCardとの互換性のためで、domenuコマンドで終わらせる時は

 

 domenu  "Quit HyperCard"

 

です。

 

play  stopの挙動

 play  stopはなっているサウンドを取り消すコマンド&引数ですが、fluteがなっている場合は止まりませんのでご注意ください。"Quit HyperCard"でも終了しません。止める場合はブラウザでreloadしてください。HyqerCard Referrenceにも記載があります。