(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0009】
前記の固定式仮想スティックでは、タッチ入力した位置に応じたスティック入力を行うため、素早く目標の入力値に仮想スティックを操作可能であるが、前記の通りゲームの妨げとなる恐れがある。
【0010】
フローティング仮想スティックでは、入力開始時に必ず、タッチ入力開始位置と現在のタッチ入力位置が一致するため、一般的なゲームコントローラのスティックで言うところのニュートラルポジションとなってしまい迅速な入力を行うことができない。可動フローティング仮想スティックに関しても同様のことが言える。
【0011】
また、フローティング仮想スティックでは、タッチ入力開始位置によっては、そのタッチ入力継続中では実現不可能なスティック入力が生じてしまう。例えば、タッチ画面の左端をタッチ入力開始点とした場合は、その点より左側にタッチ可能な領域が存在しないため、結果、左側へのスティック入力を行うことができない。
可動フローティング仮想スティックに関しても、タッチ入力の始点及びタッチ入力の移動によってフローティング仮想スティックと同様の問題が生じる場合がある。
【0012】
これらの問題が生じないように仮想スティックを操作することは困難であり、快適な操作を妨げるものとなる。
本発明によって、これらの問題点を解決するとともに、より快適な操作を提供する。
【課題を解決するための手段】
【0013】
スティック開始領域を設定し、その領域内でタッチ入力が開始した時、その領域に対応した仮想スティックの操作を有効とする。スティック開始領域の取り方は任意に設定可能である。
【0014】
スティック移動領域を設定し、現在のタッチ入力点がその領域外となった時、そのタッチ入力によって操作していた仮想スティックの操作を終了する。終了後の仮想スティックの入力状態は任意に指定可能であり、例えば、ニュートラルポジションに戻す、もしくは、直前の入力状態を継続する。スティック移動領域の取り方は任意に設定可能である。
【0015】
指定した任意の始点と現在のタッチ点との位置に応じた入力を決定する入力手法において、始点として取れる領域として始点領域を定める。
始点領域の取り方は任意に設定可能である。
【0016】
始点領域外に始点を取ろうとした場合、必要に応じて、任意に定めた処理に基づき、始点を始点領域内の点に修正する。もしくは、そのタッチ入力による操作を終了する。
【0017】
タッチ入力開始時に始点領域外に始点を取ろうとした場合、必要に応じて、そのタッチ入力で仮想スティックの操作を行わない。
【0018】
始点を始点領域内に修正する方法の例として、始点を修正前の始点に最も近い始点領域内の点に移動させる。
【0019】
例えば始点領域が
図1のようにx軸とy軸に平行な線によって構成された長方形である時、始点のx座標とy座標それぞれが始点領域内の値に収まるように修正する。
【0020】
指定した任意の始点と現在のタッチ点との位置に応じた入力値を決定する入力手法において、始点を基準とした領域として最大入力領域を設定し、
現在のタッチ点が最大入力領域外で、始点とタッチ点との位置関係によって、入力値が、入力値の取り得る値の範囲外となる、もしくは決定できない場合、指定した任意の方法によって始点の位置を変更する。
【0021】
このとき、始点が始点領域外に移動してしまう場合、始点を、始点領域内に修正し、入力値を最大値にする。もしくは、そのタッチ入力による操作を終了する。
【0022】
タッチ領域において、タッチ入力の始点、もしくは任意の指定した点を中心とした任意のベクトル場となる領域を有し、タッチによる入力値を現在のタッチ点でのベクトル場の値とする。
【0023】
2種類以上のタッチ入力を基にした入力値を決定する入力手法を備え、タッチ面上に2つ以上の任意の形状の領域を設け、その領域に上記入力手法を任意の組み合わせで割り当て、各領域でのタッチ入力に対して割り当てられた入力手法によって入力値を決定する。
上記領域の数と形状と入力手法の割り当てとは、入力値を決定する処理の途中で変化させることを可能とする。
【0024】
タッチ入力が可能なデバイス上で実行されるプログラムであり、タッチ面上の指定した任意の始点と現在のタッチ点との位置に応じた入力値を決定する入力手法において、直近任意時間内でのタッチ点の動きに応じた任意の処理によって始点を移動させる。
【0025】
例えば、仮想スティック操作において、直近任意時間内でのタッチ点の移動量(動く速さ)が任意に定めた移動量(速さ)よりも多い(速い)とき、始点を任意の点に移動させる。始点が始点領域外に移動する場合は、必要に応じて始点を始点領域内に修正する。
【0026】
また、このとき、始点の移動の他にタッチ点の動きに応じた任意の処理も行う。
【0027】
例えば、仮想スティックによってキャラクターの移動を行っているとき、タッチ点の移動方向にタッチ点の移動量に応じた攻撃や回避行動を行う。
【0028】
所定の条件のもとで、仮想スティックを操作するタッチ入力が終了したとき、その仮想スティック入力値を所定の状態にして、タッチ入力終了後も継続する。
【0029】
前記継続しているスティック入力は、任意に定めた条件によって終了させて良い。
【0030】
前記継続しているスティック入力は、任意の処理に基づきのスティック入力の状態を変化させても良い。
【0031】
継続しているスティック入力に対して、所定の条件を満たしてタッチ入力が開始された場合、そのタッチ入力によってスティック入力の現在の状態が維持されるようにして、そのスティック入力の操作を当該タッチ入力によって再開する。
【発明の効果】
【0032】
始点の位置をタッチ点の位置に伴い適切に変更することによって、ユーザーが操作しやすい仮想スティック入力を可能とする。
【発明を実施するための形態】
【0034】
説明のための例として、本発明によって、タッチディスプレイを有するタブレットデバイス(160)におけるユーザーインターフェースプログラムの実施形態を示す。本実施形態は一例であり、タブレットデバイス以外の、例えばノートパソコンなどに用いられるタッチパッドであってもよい。
【0035】
図1はタブレットデバイス(160)のハードウェア構成例を示すブロック図である。本実施例におけるタブレットデバイス(160)はCPU(100)と主記憶(101)と補助記憶(102)と表示部(106)と入力部(103)とを備えている一般的なコンピュータである。このうち、補助記憶(102)の中には本実施形態によるユーザーインターフェースプログラムが格納されている。表示部(106)はタッチディスプレイを含む。入力部(103)はタッチディスプレイのタッチ入力手段(105)を含む。タブレットデバイス(160)で実行されるプログラムは、タッチ入力手段(105)によって、タッチディスプレイに対する何らかの操作があったことを検知することが出来る。ここで、タッチ入力手段(105)は、ハードウェアもしくはソフトウェアもしくはそれらの組み合わせによって実現されるものである。
【0036】
図2は本実施形態のユーザーインターフェースプログラムのモジュールの例を示したものである。
本発明によるプログラム(110)は、タッチ入力手段(112)からタッチ入力を取得し、仮想スティック入力部(114)のタッチ入力処理(115)に受け渡す。タッチ入力処理(115)では、始点の決定に関する処理を行う。続いて、仮想スティック処理(116)は始点とタッチ入力から仮想スティックの入力値を決定し任意のプログラム(113)にスティック入力を与える。仮想スティック描画(117)では、仮想スティックをディスプレイに描画する。もしくは描画に必要な情報を任意のプログラム(113)に受け渡し、任意のプログラム(113)が仮想スティックを描画する。
スティック入力値を受け取った任意のプログラム(113)はスティック入力値に応じた何らかの処理を行う。このとき任意のプログラム(113)は複数あっても構わない。
本発明によるプログラムは任意のプログラム(113)の一部として実装してもよい。
【0037】
以下、説明のため
タッチパネルなどタッチ入力可能な面をタッチ面と呼び、タッチ面に触れてから離すまでの一連の入力操作をタッチ入力と呼ぶ。
タッチ入力中のある瞬間に触れている点をタッチ点と呼び、タッチ入力を開始する最初の触れた点をタッチ入力開始点、離した時のタッチ点をタッチ入力終了点と呼ぶ。
タッチ入力は複数同時に独立して扱うことが可能である。
仮想または現実のスティックによる入力をスティック入力と呼ぶ。
スティック入力は、
スティックを動かした方向を示す入力方向と呼び、スティックを動かした量、すなわちスティックをどれだけ倒したかに当たる量を入力量と呼ぶ。
また、
スティックをx方向に動かした量をjx、スティックをy方向に動かした量をjyによって表現する。明記が無い限りx方向を横方向、y方向を縦方向とする。
スティック入力は、入力方向と入力量、もしくはjxとjyによって表現する。
入力方向と入力量、jxとjyは相互関係にあり、スティック入力値と呼ぶこととする。
【0038】
図4に本発明によるタッチ入力処理の実施例のフローチャートを示す。タッチ入力手段(112)からタッチ入力を受け取ると、
図4のタッチ入力処理を開始する。
そのタッチ入力がタッチ開始かを判断する(S201)。タッチ開始であった場合、そのタッチ開始点がスティック開始領域内にあるかを判断する(S202)。スティック開始領域内の場合、始点をタッチ開始点もしくは予め定めた点に設定、もしくはプログラムの実行による内部状態に応じた点に決定する(S203)。始点が始点領域内かを判断する(S205)。始点領域内でない場合は、始点を始点領域内の点に修正する(S206)。そして仮想スティック入力を開始し、仮想スティックの処理を行う(S207)。
【0039】
(S202)で、タッチ開始点がスティック開始領域内ではない場合は、そのタッチ入力では仮想スティック入力は行わない(S204)。すなわち、仮想スティック入力を開始しない。
【0040】
(S201)で、タッチ開始ではなかった場合、タッチ入力が終了したかを判断する(S215)。タッチが終了した場合、そのタッチ入力による仮想スティック入力があったかを判断する(S213)。あった場合、仮想スティック入力の処理を行い、スティック入力の終了を行う。
【0041】
(S215)で、タッチ終了でなかった場合、そのタッチ入力による仮想スティック入力があるかを判断する(S208)。ある場合、そのタッチ入力によって操作されている仮想スティックの始点が、その仮想スティックの始点領域内かを判断する(S209)。始点が始点領域内でない場合、始点を始点領域内の点に修正する(S210)。その後仮想スティック入力処理を行う(211)。(S209)と(S210)は仮想スティック入力の処理中(S211)に行っても良い。
【0042】
始点領域(150)とスティック開始領域(151)とスティック移動領域(152)とを
図3のように設定したときの(S206)、(S210)での始点の修正方法の例を示す。
説明のため、タブレットデバイス(160)のタッチディスプレイの左下を原点とする横方向をx、縦方向をyとした座標を取る。
タッチディスプレイ上の座標を(x,y)によって表現し、タッチディスプレイ上の四角形の領域を4つの頂点座標(L,B),(L,T),(R,T),(R,B)とした時、領域Xを(XL,XB,XR,XT)のように表現する。
【0043】
修正方法は、例えば、始点が点Aにあるとき、最も近い始点領域(150)内の点Bに修正する。
【0044】
より具体的には、始点領域を(AL,AB,AR,AT)の長方形、始点の座標を(AX,AY)としたとき、始点が始点領域よりもx軸で考えて右側にあるときAX=AR、左側あるときAX=AL、さらにy軸で考えて上側にある時AY=AT、下側にあるときAY=ABのように修正する。
【0045】
1つの動作例を述べると、(S203)で始点をタッチ開始点に決定する場合で、(S206)で始点を修正したとき、タッチ点の移動がなくとも始点とタッチ点の位置が一致しなくなる。結果として、タッチ点と始点の位置に差が生じ、その差によってタッチ点を動かさずとも仮想スティックの入力量が変化することとなる。
【0046】
本発明による仮想スティックの例として、
図5に可動フローティング仮想スティックのフローチャートを示す。
【0047】
図5の可動フローティング仮想スティック処理は
図4の(S211)に当たる処理となる。
【0048】
先ず、タッチ点がスティック移動領域内かを判断する(S301)。範囲内でない場合は、スティック入力を無効、もしくは入力量を最小値もしくはスティック入力値を現在の値に保ってそのタッチ入力による仮想スティック入力を終了する。
【0049】
(S301)で、タッチ点がスティック移動領域内である場合、タッチ点が最大入力領域外もしくはスティック入力値が決定できないかを判断する(S302)。(S302)が真の場合は始点の変更を行う(S303)。
【0050】
(S303)での始点の位置の変更方法の例を、
図6を用いて説明する。
タッチ点が点Xにあるとき、始点を点Xの方向に、点Xが最大入力領域(201)内にとなるように移動する。より詳しくは、修正前の始点(202)から点Xへのベクトルを考えたとき、ベクトルと最大入力領域(201)の境界線との交点を点mとして、始点を点mからタッチ点2へのベクトルの方向に点Xが最大入力領域(201)内となるまで移動させる。
図6では修正前の始点(202)を点mから点Xまでのベクトル分だけ移動した修正後の始点(203)へ移動する。
【0051】
(S304)において、スティック入力を決定する。(S305)でタッチ点がニュートラル領域内にあるかを判断する。タッチ点がニュートラル領域内のとき、スティック入力を無効または入力量を最小値とする(S306)。(S307)でタッチ点が最大値領域にあるかを判断する。タッチ点が最大値領域内のとき、スティック入力を最大にする。
【0052】
(S304)におけるスティック入力の決定方法について、始点を基準とした領域である、最大入力領域と最大値領域とニュートラル領域とを
図7のように設定した場合を例に説明する。
【0053】
ニュートラル領域の境界線上でスティック入力の入力量が最小値0となるようにする。
より具体的には、ニュートラル領域(602)を、始点(601)を原点とした半径aの円とした場合、スティック入力を、始点とタッチ点のなす直線とx軸との反時計回りの角度を入力方向theta、始点とタッチ点との距離をrとして、入力量をr-aとする。このとき、入力量に定数を乗じることで始点とタッチ点との距離に対する入力量の変化量を調整し、入力量が最大値となる始点とタッチ点との距離を調整する。
jxとjyによって表現する場合は、例えばjx= (r-a)cos(theta)、jy=(r-a)sin(theta)のように変換する。
【0054】
(S306)で、タッチ点がタッチ点T1のようにニュートラル領域(602)内にあるとき、スティック入力がない状態として扱う(無効)、もしくは、入力量を最小値とする。
(S308)で、タッチ点がタッチ点T3のように最大値領域(603)内にあるとき、入力方向を維持して入力量を最大値とする。
【0055】
タッチ点がタッチ点T3のように最大入力領域(604)外もしくはスティック入力値が決定できないとき、入力方向を維持し入力値が最大となるように始点の変更を行う。始点の移動によって、始点が始点領域外となる場合は適宜(S206)や(S210)のように始点を始点領域内の点に修正することが望ましい。
【0056】
(S304)と(S306)と(S308)とでのスティック入力の決定方法の別の例として、ベクトル場を用いる例を示す。
始点を原点として、スティック入力をthetaとr、現在のタッチ点をxとyによって表すとき、ベクトル場を
任意定数をAとして
theta = atan(x,y)
r = 0 ただし(a*a >= x*x + y*y )
r =A*( sqrt(x*x+y*y) -a) ただし(a2*a2 >= x*x + y*y > a*a)
r = A*(a2-a) ただし(x*x + y*y >= a2*a2)
のように設定し、タッチ点の座標でのベクトル場の値をスティック入力値とする。
ただしatan(x,y)はx方向のx軸と原点から点(x,y)への直線との反時計回りの角度を表す。
このベクトル場の取り方は自由であり、上記例以外で、例えば、rの値をthetaによって変化させる、rの値をタッチ点に応じて離散的に変化させることも可能である。
【0057】
本発明による2つの領域に異なるスティック入力の決定方法を割り当てる仮想スティックについて
図8に示すフローチャートを例に説明する。
【0058】
図8の2つの入力方法の仮想スティック処理は
図4の(S211)に当たる処理となる。
【0059】
始点を基準とした領域として、
図9に示す領域を例に説明する。(S401)でそのスティック入力が開始したか、処理の続きなのかを判断する。開始であった場合、領域を初期状態とする(S402)。本例では、
図9の状態1にする。
次に領域が状態1かを判断する(S403)。状態1であった場合、スティック入力を直前のタッチ点との変化量に応じた値とする(S405)。
【0060】
(S405)の具体的な例は、タッチ点の変化量が横と縦方向にそれぞれdx, dyだけ変化した場合、スティック入力をjxとjyによって表したとき、jx=ax*dx, jy=ay*dyのように決定する。axとayはそれぞれタッチ点の変化量に対するスティック入力値を調整する値である。
【0061】
もしくは、タッチ点の変化量がtheta_方向にdrだけ変化した場合、スティック入力をthetaとrによって表したとき、theta=theta_、r=a*drのように決定する。aはタッチ点の変化量に対するスティック入力の入力量を調整する値である。
【0062】
(S404)でタッチ点が内側領域(501)内ではなかった場合、タッチ点が外側領域(502)内かを判断する(S406)。外側領域(502)内であった場合は、領域を状態2に変更する(S407)。このとき、現在のタッチ点をもとに(S408)において決定するスティック入力値が直前のスティック入力値と同じになるように始点を変更しても良い。もしくは、入力量が直前の入力量と等しくなるように、始点とタッチ点との距離に応じた入力量の変化量を調整しても良い。
図9の状態2の実線が状態2での領域を示し、点線は、始点が移動した場合の状態2の領域の動きをわかりやすく示すために記入した状態1の領域である。
【0063】
(S403)で状態1でなかった場合、(S405)とは異なる方法でスティック入力値を決定する。例えば、(S408)において、
図5の可動フローティング仮想スティックの処理を行う。このとき、ニュートラル領域はなくても良い。
【0064】
本例では、2つの領域と2つの状態を用いた例を示したが、状態と領域とは必要に応じていくつあっても構わず、それぞれの状態と領域に対する入力方法の割り当ては自由である。
【0065】
仮想スティック操作において、直近任意時間内でのタッチ点の移動量(動く速さ)が任意に定めた移動量(速さ)よりも多い(速い)とき、始点を任意の点に移動させる。始点が始点領域外に移動する場合は、必要に応じて始点を始点領域内に修正する。(S206)、(S210)と異なる方法で始点を修正しても良い。
【0066】
図10にフローチャートを示す。(S701)で直近時間でのタッチ点の変化量、すなわちタッチ点の移動量が一定以上であるかを判断する。一定以上であった場合、そのタッチ入力で操作している仮想スティック入力があれば、その仮想スティック入力の始点の変更を行う(S702)。
【0067】
図10の素早くタッチ点が移動した場合の始点の変更は
図4のタッチ入力処理とは別に行う。例えば、タッチ入力処理の前に
図10の処理を行う。
【0068】
(S702)での始点の変更について、本実施例ではタッチ点の変化量として、タッチ点の移動方向と移動量を考える。このとき、始点を仮想スティック入力によって、入力方向がタッチ点の移動方向、入力量が最大値もしくは、タッチ点の移動量に比例する値となるような点に変更する。
【0069】
例えば、タッチ点が
図11のようにタッチ点1(803)から時間dtでタッチ点2(804)に移動した場合、始点を始点1(801)から始点2(802)へと変更する。このとき、始点2(802)からタッチ点2(804)への向きは、タッチ点1(803)からタッチ点2(804)への向きに同じであり、タッチ点2(804)と始点2(802)の距離r2は、仮想スティック入力によって、スティック入力量が最大値となる、もしくは、任意定数をaとしてa*r2/dtとなるr2、もしくはタッチ点1とタッチ点2に応じたスティック入力量が任意に定めた値となるようなr2とする。
【0070】
(S211)で処理する仮想スティックが最大入力領域を有する場合、(S702)での始点変更で、始点を最大入力領域外の点となるようにとっても良い。こうした場合、そのタッチ入力では再びタッチ点が最大入力領域内に入るまで(S302)における最大入力領域であるかの条件は考慮しない。
【0071】
(S703)で必要に応じて、タッチ点の移動方向と移動量に応じた任意の処理を行うことができる。例えば、仮想スティックによってキャラクターの移動を行っているとき、タッチ点の移動方向にタッチ点の移動量に応じた攻撃や回避行動を行う。
【0072】
仮想スティックの描画は、例えば始点にスティックの台座を表す画像を、タッチ点にスティックのレバーを表す画像を描画することによって、ユーザーに仮想スティックの入力状態を示すことを可能とする。
【0073】
もしくは、始点とタッチ点と各領域との関係から前記画像の表示位置を決定してもよい。
例えば、タッチ点が最大入力値領域内の点となるとき、レバーを表す画像をタッチ点ではなく、始点とタッチ点とを結ぶ直線と最大値領域の境界との交点に表示する。
他に、タッチ点がニュートラル領域内の点であり、入力量が最小値であるとき、レバーを表す画像を始点、すなわち台座を表す画像と同じ位置に表示し、スティックのニュートラル状態を表現する。
【0074】
本発明による仮想スティックは複数あっても構わない。それぞれの仮想スティックに、各領域と描画する画像と仮想スティック入力処理とを仮想スティックごとに定め、複数のタッチ入力によって同時に独立して操作を可能とする。
【0075】
図4と
図5と
図8と
図10のフローチャートの処理はそれぞれの仮想スティックごとに個別に処理を行う、もしくは、適宜、操作する仮想スティックを検出する手段を設け条件分岐を加えることが望ましい。
【0076】
あるタッチ入力によって操作する仮想スティックの検出手段の一つの例は、(S202)でタッチ開始点がどの仮想スティックのスティック開始領域内かによって判断する。
【0077】
仮想スティックを操作しているタッチ入力が任意の条件を満たして終了したとき、その仮想スティック入力を所定の条件の間継続して行う。
【0078】
任意の条件とは、直近時間内でのタッチ入力や適用先のシステムの状態に応じた条件としてよい。適用先に合わせて任意に設定可能である。
【0079】
一例は、タッチ入力が終了し、直近任意時間内でのタッチ点の移動量(動く速さ)が任意に定めた移動量(速さ)よりも多い(速い)とき、必要に応じてスティック入力値の変更を行い、そのタッチ入力によるスティック入力を、所定の条件の間継続する。
【0080】
所定の条件とは、任意の時間の間、タッチ入力に応じた条件、そのほか適用先のシステムによる条件などである。
例えば、前記移動量の条件を満たしてタッチ入力が終了したとき、直前のスティック入力を一定時間が経過するか、新たなタッチ入力によって当該スティック入力の操作が開始されるまで継続する。
【0081】
この処理によって継続しているスティック入力は、任意の処理に基づき変化させることが可能である。
【0082】
例えば、スティック入力量が時間経過とともに徐々に減少するようにしてもよい。このとき、最終的に未入力状態となるようにして継続を終了してよい。
【0083】
別の例では、適用先のシステムによる自動的なスティック入力の操作を行ってもよい。このとき、直近時間内でのタッチ入力に応じて、前記自動操作の働きを変えるようにしてもよい。例えば、タッチ面の右側にタッチ点を移動してタッチ入力を終了した場合と、タッチ面の上側にタッチ点を移動してタッチ入力を終了した場合とで異なる自動操作を行ってよい。他の方向に関しても同様である。また、自動操作の対象はスティック入力に限らず、例えば,ボタン入力についても自動操作を行ってもよい。スティック入力に応じてキャラクターを移動しボタンによってジャンプアクションを行うような適用例では、キャラクターの移動のみではなくジャンプの操作に関しても自動化してもよいということとなる。即ち、システム全体あるいは一部が自動的に動作するようにしてよい。
【0084】
さらに別の適用例は、斜め上方向へはじくようなタッチ入力が行われたとき、いわゆる2Dスクロールゲームのキャラクターをその方向にジャンプさせ、当該キャラクターが着地するまでの間スティック入力の左右方向の入力を継続させ当該キャラクターがその方向に向かって移動し続けるようにしても良い。さらに、当該キャラクターが空中にいる間にそのスティック入力を操作するタッチ入力が開始すると、現在のタッチ点によってキャラクターの左右方向への移動が維持されるように始点を設定してキャラクターの移動操作の再開を可能とする。
【0085】
タッチ入力開始時に、そのタッチ入力によって操作する仮想スティックの入力が継続しているとき、現在のタッチ点によって、スティック入力が現在のスティック入力の状態となるように始点を設定するようにしてよい。
【0086】
ここで、スティック入力量が最大値であるとき、現在のタッチ点が、前記最大値領域内の点となるように始点を設定してもよい。例えば、現在のタッチ点が最大値領域の外側の境界上の点となるように始点を設定することで、現在のタッチ点から少し始点に近づいてしまっても、スティック入力量は最大値を維持することができる。
【0087】
継続中のスティック入力の操作を所定の条件で再開してもよい。再開の条件として、
タッチ終了点、もしくは始点、もしくは前記直近任意時間内でのタッチ点の移動量(動く速さ)が任意に定めた移動量(速さ)よりも多い(速い)と判断したタッチ点の集合のうちいずれかのタッチ点、もしくは前記タッチ点の集合のうち最も古いタッチ点を基準とした領域、もしくはタッチ面を基準とした任意の領域として、再開領域を設定し、
タッチ開始点が再開領域内である場合のみ、スティック入力が現在のスティック入力の状態となるように始点を設定するようにしてもよい。
【0088】
再開領域は、継続中のスティック入力の始点、あるいは始点と現在のスティック入力値に応じた点、あるいはその継続しているスティック入力のタッチ終了点を基準とした任意の領域としてよい。あるいは、タッチ面を基準とした任意の領域としてもよい。
【0089】
スティック入力の継続中において、タッチ開始点が再開領域内の点であった場合は、現在のタッチ点によってスティック入力値がその時のスティック入力値となるように始点を設定し、再開領域外でスティック開始領域内の点であった場合は、継続入力を終了して、そのタッチ入力によるスティック入力を新たに開始する。
【0090】
ここで、動作の一例を説明する。joy_x=100(最大値),joy_y=0のスティック入力が継続しているときに、タッチ入力の開始点が、そのスティック入力の操作を再開する条件を満たす点、例えば点(50,0)でタッチ入力が開始したとき、始点を点(-50,0)とすることで、joy_x=100,joy_y=0が維持されるようにする。
【0091】
最大値領域を有する場合は、始点を最大値領域内の、例えば点(-55,0)にするなどして、タッチ点が少し移動してもスティック入力量が最大値を維持するようにしてもよい。
joy_x=80である場合は、始点を点(-30,0)とすることでスティック入力の状態を維持しつつそのスティックの操作を再開する。
【0092】
この処理によって、始点が始点領域外となるとき、例外的に始点の修正を行わないものとしてもよい。もしくは、始点領域外の点とならないようにスティック入力の再開の条件を設定してもよい。例えば、現在の継続しているスティック入力の状態において、始点が始点領域外の点に設定されてしまう点では、継続しているスティック入力の操作の再開を行わず、継続を終了して新たにスティック入力を開始する、あるいは継続しているスティック入力を終了する、あるいはそのタッチ入力を無視する。
【0093】
スティック入力の継続に関する動作の例の一つは、
ある方向に指やタッチペンなどのタッチ入力を検出可能な手段をはじくような操作でタッチ入力が行われたとき、即ち、直近任意時間内でのタッチ点の移動量(動く速さ)が任意に定めた移動量(速さ)よりも多い(速い)とき、かつタッチ入力が終了したとき、
そのタッチ入力による仮想スティックの入力方向を前記はじいた方向とし、入力量をはじいた量に応じた入力量、もしくは最大値となるように始点を設定し、その仮想スティックを操作するタッチ入力が行われていない状態でもスティック入力を維持する。
このとき、前記はじくタッチ入力に応じた、例えば、ゲームのキャラクターがその方向に攻撃や回避をする、といった任意の処理を伴ってもよい。
その後、タッチ入力が行われ、例えば、タッチ開始点とタッチ終了点との距離が、所定の距離以内であるならば、タッチ開始点によってスティック入力が現在のスティック入力の状態となるように始点を設定する。
【0094】
スティック入力の継続に関する動作の例のもう一つは、
仮想スティックによって、ゲームキャラクターの操作を行っている場合を例として説明する。
キャラクターはスティックの入力方向に入力量に応じた速さで移動する。
ある方向にはじくようなタッチ入力が行われると、キャラクターはその方向に向かって回避行動を行う。はじく方向は現在のスティック入力方向と異なっていてもよい。即ち、現在のスティック入力方向と反対側にはじいても構わない。
ここで、スティック入力の継続が行われると、キャラクターは回避行動が完了した後、タッチ入力が行われていなくてもはじいた方向への移動を行う。この例では、スティック入力量は最大値をとるものとすることで、回避行動が完了した後、キャラクターは最大の速さで移動することとなる。
更にその後、再開条件を満たしたうえでその仮想スティックを操作するタッチ入力が開始されると、始点が現在のスティック入力の状態を維持するように設定されるので、移動が継続される。
ここで、タッチ点を変更すると、それに応じてキャラクターの移動速度や移動方向が変化することとなる。
【0095】
以上によって、はじく入力など、タッチ入力の終了を伴う操作が行われてもスティック入力を継続して行うことができる。加えて、タッチ入力の再開時に、そのときのスティック入力を維持するように始点を設定することで、各種操作を妨げずスムーズな操作の再開を可能とする。
【0096】
前記継続入力が行われている間に、継続しているスティック入力の操作の再開をする条件に該当しないタッチ入力に応じた任意の処理を可能とする。
【0097】
前記スティック入力の操作再開の条件をタッチ開始点が前記再開領域内であり、尚且つ、当該タッチ入力が所定の時間続いているかタッチ点が所定の量以上移動している場合とするとき、前記所定の時間内にタッチ入力を終了する、いわゆるタップ入力はスティック操作を再開する条件を満たさない。これによって、スティック入力の継続をしつつ、タップ入力など、スティック入力の操作を再開する条件を満たさないタッチ入力に応じたし処理を行うことを可能とする。
【0098】
例えば、スティック入力の継続によってキャラクターが移動動作をしているとき、タップ入力を行うことによって攻撃アクションなどを行い、尚且つその後の移動動作を継続する。あるいは、移動をしながら攻撃やジャンプアクションを行う。
【0099】
前記スティック入力の操作を再開する条件を満たさないタッチ入力に対しては、通常の動作を行うものとしてもよい。
【0100】
本願仮想スティックの処理は、プログラムモジュールとしても実施することができる。このプログラムモジュールは、適用先の任意プログラムの一部として実装してもよい。
【0101】
このとき、前記処理はライブラリやソースコード、関数などによって実装する。これらは任意のプログラムに組み込むための実装方法の一例であり他の方法を用いてもよい。
【0102】
あるいは、仮想スティック入力、あるいは仮想スティックに応じた数値を利用できるような、前記任意のプログラムと独立したプログラムとして実装することもできる。
【0103】
例えば、ゲームのコントローラーのアナログスティックによる方向指示入力と等価な信号を生成するプログラムとして実装してもよい。いわゆるゲームのコントローラーのデバイスドライバのように実装してもよい。
方向指示入力に関して、スティックを操作したときの信号に相当する値を本願仮想スティック入力に応じて決定する。
【0104】
例えば、前記デバイスドライバが有効である間は、実行するコンピュータのシステムに方向指示入力信号を生成し、システムはその方向指示信号に応じた処理を行う。
例えば、アナログスティックに対応したソフトウェアを実行していれば、仮想スティック入力に応じたアナログスティックの操作を可能とする。
【0105】
また、タッチ入力に応じて、前記ゲームのコントローラーのボタンに応じて生成される信号と等価な信号を生成することによって、前記方向指示入力の場合と同様に、ボタンに対応したソフトウェアの操作を可能とする。
【0106】
仮想スティックやタッチボタンなどのタッチ入力のためのユーザーインターフェースを描画するときは、画面の最前面に描画する。さらに任意の透過処理を行ってもよい。
【0107】
また、本願によるタッチ入力の検出が、もともとのタッチ入力の検出と重なる場合は、本願によるタッチ入力に対する処理を優先して行い、もともとのタッチ入力の処理を無視するようにしてもよい。
【0108】
例えば、適用先のプログラムがタッチボタンUIを有しており、本願プログラムによって前記ボタンUIを覆うようにタッチ入力を検出する領域が設定されると、前記ボタンUIに対するタッチ入力は無視される。
【0109】
本願によるタッチ入力の検出が、もともとのタッチ入力の検出と重ならないようにしてもよい。
【0110】
上記の組み合わせによって、例えば、タッチディスプレイを有するコンピュータにおいて、前記ゲームのコントローラーが無くとも、タッチ入力によってゲームのコントローラーに対応したソフトウェアを操作することを可能とする。
【0111】
図12に任意のプログラムに組み込むように実装した場合(
図12左側)とデバイスドライバのように実装した場合(
図12右側)のシステム構成の例を示す。これはあくまで一例であり、どのように実装するかは設計者が各々決めてよい。
【0112】
任意のプログラムに組み込むように実装した場合(
図12左側)には、適用先のプログラムに本願仮想スティックの処理を含む。
【0113】
デバイスドライバのように実装した場合(
図12右側)は、本願仮想スティック入力に応じた、前記アナログスティック入力値を決定し、アナログスティック入力に対応した任意のプログラムが利用できるようにシステムに伝える。その他のタッチ入力の処理についても同様に、前記ボタン入力信号をゲームコントローラのボタン入力に対応した任意のプログラムが利用できるようにシステムに伝える。
その他のタッチ入力の処理に関しては必要に応じて実装するものとする。また、本願仮想スティックの部分とその他のタッチ入力の処理の部分を一つにまとめてよい。