TLbind (日本語)

TLbind について

TLbind は一括でキーボード/ジョイスティック入力をゲーム指向の使いやすい操作へ変換するシステムです。この分離により操作の再割り当てを容易にしたり、キーボード、マウスあるいはジョイスティック入力の有効または無効、さらにデジタルおよびアナログ入力の動作を容易にします。それは業務用仕様である "2セットのキー + 外部ジョイスティック"の操作を LÖVE ゲームで使えるようにすることを目的としています。

このライブラリの使用条件は ZLIB ライセンスです。

ダウンロード

Dropbox から直接入手

連絡先

準備

手続き型

  1. あなたのゲームのフォルダへ TLbind.lua を配置します。
  2. love.load() へ TLbind,control = love.filesystem.load("TLbind.lua")() のコードを追加します。
  3. love.update() に対して TLbind:update() のコードを追加します。

オブジェクト指向型

  1. あなたのゲームのフォルダへ TLbind.lua を配置します。
  2. 自機オブジェクトは "player " と呼ばれるものと見なして、その操作を player.control へリスト化されるようにしたいならば player.binds, player.control = love.filesystem.load("TLbind.lua")() のコードを使用します。
  3. 自機オブジェクトの更新関数 (またはその他1フレーム当たり) は player.binds:update() を呼び出します。
  4. そのため希望するならば (分割画面方式に対しては手軽です)、 TLbind はそれ自体がオブジェクトのように振る舞うため、従って遊技者ごとに単独で独立する TLbind を用意することができます (TLbind.giveInstance() を使用)。

よくある質問と回答

Q) 操作が押された時に検出するには?
A) 操作が押されるか押されたままであれば control[control name] は true になります。それは if control.up then... といった構文にて使用します。
Q) 操作を変更するには?
A) 例えば、"発射" 操作をジョイステック1の三番目のボタンへ割り当てるには TLbind.joyBtns[1][3]="fire" を使用します。それ以降は、ジョイステック1の三番目のボタンが押されると control.fire は true になります。
Q) 押したままではなく、単に利用者によりボタンが押された時に認識したいときはどうすればよいですか? 離された時に認識したいときはどうすればよいですか?
A) いかなる操作であろうと最初に押されたときは、1フレームの間に control.tap[control name] は true になります。同様に、離されたときは、1フレームの間に control.released[control name] は true になります。これらは通常の操作と同じ方法にて使用されます。 - if control.tap.jump then です。 さらに control.controlPressed および control.controlReleased コールバックに関しても使用することができます (後述)。
Q) どのようにマウスの入力を TLbind は扱いますか?
A) クリックはジョイスティックのボタンと同様にデジタル操作へ割り当てられます。カーソルの位置はアナログの組み合わせであり画面中央の場所は (0, 0) 、上左角は (-1, -1)、 さらに右下角は (1, 1) です。マウスの位置がジョイスティックの軸と同じ操作に割り当てられた場合は、ジョイスティックの軸は中心にあるときに操作にはマウスの位置のみを使用します。マウスの軸が移動しているのを目視できない場合は、ジョイスティックの軸が中心にあるか確認してください (両軸ともに 0 です)。
Q) どの様な機能性が TLbind にありますか?
A) それは操作 ("跳躍"、"左へ"、などゲームに関する出来事の処理) および入力の分離です。これはゲームの操作をいつでも容易に構成することを可能にします。ゲームにおいて一つの操作当たり ( または一つの入力当たりの操作)で複数の入力を請け負うため、コーディングをより簡単なものにします。アナログおよびデジタル操作へのブリッジを容易にします。キーボードまたはジョイスティック入力の無効化を容易にします。押し続けたままの状態ではなくタップの検出 ("押し続けると跳躍して弾み数秒後に地面へ接触する"以上はない)、およびアナログへの無反応領域(スティックに触れていない時に起こるふらつき問題の修正)、および平準化 (良くある現象として "対角線上の高速移動" といった不具合の防止) を適用できます。
Q) 使用するのは難しいですか?
A) 可能な限り簡単にしようと努めており、用例の一覧を後述にまとめてあります。コードの6行目では、ゲームに対して業界標準の WASD + 方向キー + ゲームパッドの操作を指定することができます。
Q) デジタルおよびアナログ操作の間にある違いはなんですか? どのようにすれば併用できますか?
A) TLbind では、デジタル操作はキーまたはボタンであり、 true または false のいずれかで表されます。アナログ制御はジョイスティックの軸あるいはボールから入力を受け取り、中心は 0 であり、 -1 および 1 の間の十進数で表されます。 TLbind は二本のデジタル操作へアナログ操作を作成して、デジタル操作およびデジタル入力が押されるとアナログ操作の -1 または 1 のアナログ入力の発生します。例えば: 後述の用例を割り当てる場合は、ジョイスティックを少し左に押すことで control.horiz = -0.22191, control.left = true, および control.right = false を生成します。


関数

bind:update

TLbind:update()

これは操作の更新を行い、それによりフレームごとに一回に呼び出されるものです。それはピリオドではなく、コロンを持つことに注意してください。

TLbind.giveInstance

TLbind.giveInstance( binds )

これは指定された割り当てテーブルから新規操作一式を作成します。割り当てのインスタンス、操作、control.tap および control.release を新規に返します。オブジェクト指向様式のプログラミング、複数遊技人の操作、などに適しています...。

table binds
割り当てのテーブルであり、説明は後述します。

control.controlPressed

control.controlPressed(c)

このコールバックの動作は操作を除き love.keypressed のようなものです (割り当ての変更およびジョイスティックの入力では適切に動作するという意味です)。操作が有効になったときに一度だけぴたりと呼び出されます。

string c
押された操作の名称。

control.controlReleased

control.controlReleased(c)

このコールバックの動作は操作を除き、 love.keyreleased のようなものです。

string c
離された操作の名称。


入力の種類と構成

割り当ては TLbind (手続き的な用例・標準) または player.binds の配下にて管理されています。割り当ての一覧は入力、ジョイスティック番号、などにより一つにまとめられたテーブルです。明瞭さについては、次の用語集を参照してください。

  • 操作 - 抽象概念、ゲームの中心となる値であり true/false (デジタル操作に対して) のいずれかと等価または -1 から 1 の間の数値 (アナログ操作に対して) です。操作には任意の名前を指定することができますが、それぞれの名前は必ず唯一無二の物にしてください。
  • 入力 - キーボードまたはジョイスティックが操作されて離されたときに発行される信号です。これらを LOVE では KeyConstant, MouseConstant, JoystickConstant として定義しており、ジョイスティックの番号、およびジョイスティックのボタン、軸、ハット、および、ボールの番号となっています。
  • 割り当て - 入力と操作の間を連結します。 "この入力が発生したときに、その制御を設定します"。入力ごとに割り当てられるのは一つの操作につき一つだけできますが、操作は多数の入力へ割り当てられる場合があります。
  • 作成 - アナログ操作を二つのデジタル操作へ連結します。作成は遊技者がアナログまたはデジタル入力を使用しているかどうかに関して心配する必要はないため、アナログ操作での動作をより単純化します。

bind.keys

これはキーボードのキー用です。キーが KeyConstant ならばテーブルであり、値は操作の名称です。言い換えると TLbind.keys.KeyConstant = "control" にて割り当ての形式を作成します。 下記を参照してください。

TLbind.keys = {
	w="up", a="left", s="down", d="right", [" "]="jump", lctrl="attack", escape="menu",
	up="up", left="left", down="down", right="right", z="jump", rctrl="attack",
}

bind.mouseAxes

マウスの x および y 座標を割り当てるためのテーブルです。それは TLbind.mouseAxes[1 for x or 2 for y] = "control" の形式です。

TLbind.mouseAxes = { "horiz", "vert" }

bind.mouseBtns

これはマウスのボタンを TLbind.mouseBtns.MouseConstant = "control" 形式にて一覧にしたものです。

TLbind.mouseBtns = { l="target", r="shoot" }

bind.joyAxes

これはジョイスティックの軸の一覧です(スティック本体またはゲームパッドのサムスティックですが、ラダーなどが該当する場合があります)。対となる軸にて bind.deadzoneAxes を使用することを強く推奨します。それの形式は TLbind.joyAxes[joystick#][axis#] = "control" です。

TLbind.joyAxes = { {"horiz", "vert"} }

bind.joyBtns

この一覧はジョイスティックのボタンであり、形式は TLbind.joyBtns[joystick#][button#] = "control" です。

TLbind.joyBtns = { {"jump", "attack", [8]="menu"} }

bind.joyBalls

これはジョイスティックが無駄にしている場合がある全てのボールデバイス用です。これらは珍しいので、ゲームには依存させずに使わないことが望ましいです。それらの割り当ては TLbind.joyBalls[joystick#][ball#] = {"x control", "y control"} の形式です。

TLbind.joyBalls = { { {"horiz","vert"}, {"yaw","pitch"} } }

bind.joyHats

このテーブルはジョイスティックのハット用です (一部のジョイスティックで見られる小型のサムスティックといったもの)。それらはアナログではなくデジタルであることに注意してください。それらの割り当ては TLbind.joyHats[joystick#][hat#] = {"l control", "r control", "u control", "d control"} の形式です。

TLbind.joyHats = { {{"left","right","up","down"}} }

bind.maps

このテーブルは作成すべきデジタル操作から/およびアナログ操作の一覧です。これを使用すると、その他の種類に対してのコード化に関する心配をすることなく、一種類の入力に対して容易にコード化することができます。それらは TLbind.maps[analogue] = {"negative digital", "positive digital"} の形式にて作成されます。

TLbind.maps = { horiz={"left","right"}, vert={"up","down"} }

bind.deadzoneAxes

この機能は一組のアナログ操作に比較された半径の無反応領域を適用します。これは旧式・安物・未校訂の装置で発生する "軸ブレ" を防止します。さらに標準の正方形ではなく、真円内にアナログの一組を制限します。これを使用すると、古典的な "対角線上の高速移動" といった不具合を回避することができます。完全な 45 度角 (しかし完全な直線であればさらに 1 に到達します) の場合は一組は約 0.7 に達します。それらの形式は TLbind.deadzoneAxes[entry#] = {"analogue 1", "analogue 2"} にて形成されます。

TLbind.deadzoneAxes = { {"horiz", "vert"} }

Xbox コントローラーに関する注意

Microsoft は XBox コントローラーを Windows 用の公式ゲームパッドとして決定しており、同様に、最も一般的なコントローラとして遊技者が所有しているものであるとしています。従って、このコントローラーでゲームの操作が動作するように調整することは望ましいことです。

XBox コントローラーに関する重要な警告: トリガーは両方ともに二つのボタンではなく一つの軸として扱われます(Sony Playstation(R) にほぼ精通しているかたには L2 および R2 としてお馴染みでしょう)。それらを補うために以下の使用方法により割り当てられる物と考えてください:

joyAxes = { {[3]="triggers"} }          -- R トリガーは -1!
maps = { triggers={"rtrig","ltrig"} }   -- ltrig および rtrig はデジタル操作です。

そのほかの言語