2017年1月11日水曜日

■「hsp3dish.ini」設定ファイルについて

「hsp3dish.ini」ファイルはDishを利用する際に画面のサイズ等の設定を参照するファイルとなります。


  • Windows上(※EXE化した場合は適用されませんので、「#packopt」を利用してください)
    ソースと同じフォルダ内に「hsp3dish.ini」ファイルが存在すると実行時に自動的に中身を読み画面(ウィンドウ)サイズを変更してくれます。

  • Android上
    プロジェクトフォルダ内の「hsp」フォルダに「hsp3dish.ini」ファイルが存在すると設定内容がビルド時に反映されます。
    注意点としては指定した画面サイズによって自動的に画面の向きが設定されてしまいますので、画面の向きを自分で設定したい場合などはマニュアル設定を行ってください。

    2.画面表示の向きを設定
    3.画面の表示サイズを設定

2017年1月2日月曜日

■HSP3Dishがバージョンアップしたら必ずやること

HSP3Dishがバージョンアップし、最新のHSP3Dishで開発を続ける場合には必ずやっておくことが1つだけあります。

以前のDish Helperで作成したプロジェクトがある場合、プロジェクトフォルダを削除して最新のDish Helperで新たにプロジェクトを作成しなおすこと。
(※ビルドしなおす機会がもう無いでろうプロジェクトは作成しなおす必要はありません)

これだけです。

意外とこれが盲点で、プロジェクトを作り直さないとAndroid上で新しいHSP3Dishの機能が使えなかったり反映されていなかったりとハマる原因となります。

2016年12月29日木曜日

■Android上で自作アプリからDPMファイル内のテキストデータを読み込んだ後で気を付けること

例えば以下のような文字列を比較するプログラム(*1)でS-JISのテキストファイル"test.txt"(*2)をDPMファイルに含ませてアプリをビルドし、Android上で実行させるとどうなるでしょうか?


(*1)
;--------------------------------------------
; 開始
;--------------------------------------------

#include "hsp3dish.as"

      setcls 1, $000000
      color 255, 255, 255

      dat = ""
      notesel dat
      noteload "test.txt"

*main
      redraw 0

      get_tx = ""
      noteget get_tx, 0
      pos 0, 0
      if get_tx == "A" {
            mes "[A]と同じです"
      } else {
            mes "[A]と違います"
      }

      get_tx = ""
      noteget get_tx, 1
      pos 0, 50
      if get_tx == "あ" {
            mes "[あ]と同じです"
      } else {
            mes "[あ]と違います"
      }

      redraw 1
      await 16
      goto *main

;--------------------------------------------
; 終わり
;--------------------------------------------


(*2) test.txt
-------
A
あ
-------


結果はこうなると思います。


[A]と同じです
[あ]と違います


なぜこうなるのでしょうか?

実は、Dish Helperでビルドされる際のソース内の文字列に関係があります。

通常のHSP(Windows上で動作する)は、文字コードはS-JISで処理されておりますが、Dish Helperでビルドされたアプリは内部の文字列の文字コードは全てUTF-8に変換されております。
また、DPMファイルにS-JISのテキストファイルを含めてもDPMファイル内のファイルは特に変換はされません。

感の良い方はここで気づいたと思います。

答えは、ソース内の「if get_tx == "あ"」の「あ」とテキストファイル内の「あ」は全くの別のものということです。
先ほども書きましたが、Dish Helperでソースをビルドするとソース内部の文字列は全てUTF-8の文字コードに変換されます。

もう少し具体的に書きますと、


S-JISの「あ」の文字コード = 1バイト( 130 ), 2バイト( 160 )
UTF-8の「あ」の文字コード = 1バイト( 227 ), 2バイト( 129 ), 3バイト( 130 )


というふうになります。

それでは、文字列をif文などで比較したい場合どうすればよいのか?

一番確実な方法としては、DPMファイルに含ませるテキストファイルをUTF-8で保存してからDish Helperでビルドをする方法です。
もう一つの方法としては、プログラム内で文字コードを書き換えて自前で文字を変換する方法です。

どちらの方法も利点と欠点がありますので自分のやりやすい方法で行うとよいでしょう。
ただし、「文字の変換ってどうやるの?」という人は、前者の方法(テキストエディターなどでUTF-8で保存したものをDPMファイルに含ませる)てビルドするようにしましょう。

2016年12月28日水曜日

■HSP3Dish上でのタッチ処理は「getkey」や「stick」ではなく「mtlist / mtinfo」を使うこと

例えば、以下のようなソースを組んだ場合、Windows上で動かしたときにどのような問題が出るでしょうか?


;--------------------------------------------
; 開始
;--------------------------------------------

#include "hsp3dish.as"

#const KEY_LEFT_CLICK 1

      setcls 1, $000000
      color 255, 255, 255

*main

      redraw 0

      tap = 0
      getkey tap, KEY_LEFT_CLICK
      pos 0, 0 : mes str(tap)

      redraw 1

      await 16
      goto *main

;--------------------------------------------
; 終わり
;--------------------------------------------



このソース内容は、ウィンドウ内をマウスで左クリックしている間ウィンドウの左上の位置に「1」が表示されるようになっています。

実際に実行してみると、確かにウィンドウ内を左クリックしている間は画面上に「1」が表示されます。
一見全く問題の無いようなソースですが、画面タッチが可能なWindowsタブレットPC等でこのソースを実行し、左クリックの代わりに画面をタッチすると何が問題なのかが分かります。

実は画面タッチ可能なWindowsタブレットPC等でこのソースを実行すると、画面をタッチしても画面上に「1」は表示されません。
もう少し詳しく書きますと、「getkey」命令の箇所で「1」ではなく「0」が返ってきます。

表示される答えとしては「画面をダブルタップ」すると画面上に「1」が表示されます。
つまり、ダブルタップをしないと「getkey」命令の箇所でクリックと判定されないのです。
これは「stick」命令についても同様です。

これがHSP3Dish上の仕様なのか不具合なのかはわかりませんが、Androidアプリを想定してプログラム作るのであれば、マルチタッチに対応している「mtlist / mtinfo」を使うように心がけましょう。

ミニアクション「みにぼう」チュートリアル動画

簡単なチュートリアルを作りました。