トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

チュートリアル 3: タッチスクリーン/ボタン

これまでで、あなたは画面の文字を表示させ、プログラムがどのように動くかを決めることができるようになりました。
しかし、これだけではゲームを作成する際に非常に不便です。(DSはゲームをするために作られているのですからねぇ)

ゲームを作成するには、ユーザーの入力(インプット)が必要です。
DSには「タッチスクリーン」,「ボタン」,「マイク」の入力の方法があります。
このチュートリアルでは、はじめの2つ「タッチスクリーン」,「ボタン」についてを説明します。

ボタンは簡単です。
各ボタンに対して、ボタンが押されていればtrue値を返し、押されていなければfalse値を返す機能があります。
これらの機能はDSLuaのreadme.txtにも書かれいますが、ここでリストアップしておきます。

Pads.A()
Pads.B()
Pads.X()
Pads.Y()
Pads.L()
Pads.R()
Pads.Up()
Pads.Down()
Pads.Left()
Pads.Right()
Pads.Select()
Pads.Start()
Pads.AnyKey() 

とても、とても簡単ですね。すべて「Pads.」で始まり、ボタンの名称の後に「()」がつくだけです。
「Pads.AnyKey()」は何か1つでもボタンが押されたらtrue値を返します。

以下にスクリプトの例を記載します。
これはひどいEtch A Sketch(エッチ・ア・スケッチ)ですね。テキスト表示ですので。

SCREEN_TOP = 1
BGTopText = Screen.LoadTextBG()
Screen.Initialize( SCREEN_TOP, BGTopText )

x = 16
y = 12

while Pads.Start() == false do -- Exit when they press START
     if Pads.Up() then
          y = y - 1
     end
     if Pads.Down() then
          y = y + 1
     end
     if Pads.Left() then
          x = x - 1
     end
     if Pads.Right() then
          x = x + 1
     end
     BGTopText:PrintXY( x, y, "0" )
     for delay=1,5000 do
     end
end 

タッチスクリーンはちょっとだけ難しいですが、まだまだ簡単な方です。
タッチスクリーンの機能は3つあります。

名称 内容
Stylus.Down() 画面上のどこかがタッチされていたらtrue値を返します
Stylus.X() 画面上のタッチされているX座標の値を返します
Stylus.Y() 画面上のタッチされているY座標の値を返します

例として、多くのDSゲームにもあるように、ゲーム画面でユーザーが画面をタッチするのを待つには、以下のようなコードを使用します。

while Stylus.Down() == false do
end 

しかし、画面上にボタンを表示し、ユーザーがそのボタンをタッチしているかをスタイラスで判定するのは少し難しいです。
以下のコードを使用します。コードを何回か見てこれを理解できればよいのですが。

if Stylus.X() >= 50 and Stylus.X() <= 70 and Stylus.Y() <= 150 and Stylus.Y() >= 100 then
     BGBotText:PrintXY( 1, 1, "You pressed the button!" )
end 

もちろんループを使用して、タッチされているかどうかを絶えず確認する必要があります。
ともかく、上のコードは以下のような範囲をタッチしているかどうかをチェックします。

ファイルが存在しません。

Functionsプロジェクトを活用すれば、より簡単にこれを検出できます。以下のようにコードを書くだけです。

if stylusInBox( 50, 100, 70, 150 ) then
     BGBotText:PrintXY( 1, 1, "You pressed the button!" )
end 

はじめの(50, 100)は四角形の左上の座標を、次の(70, 150)は四角形の右下の座標を指します。
スタイラスがこの範囲をタッチしたらtrue値を返します。