2016-04-17 4 views
0

警告:この質問は、ドローライブラリを購入し、知っているTouch Luaユーザーのみに適用されます。タッチルアの描画ライブラリの基礎

この質問の末尾に、完全なプログラムを参照してください。質問のために今、私はそのプログラム(NUMPAD.LUA)の一部であるBEGINNINGで使用するスニペット

さて、:

の使用は何•「」 「b」と「x」の間?または "b"と "draw"?その他...

•テーブルはどのようにボタンを設定しましたか?超限定的でお願いしますか?

•7,8行目に "+"、 "*"、 "(j-1)"があるのはなぜですか?

•高さと幅は何ですか?私はxとyしかないと思った。あなたはそれをタップしたときに

function createButtons() 
    buttons = { } 
    local c = 1 
    for i = 1, 4 do 
     for j = 1, 3 do 
     local b = { } 
     b.x = 80 + 60 * (j-1) 
     b.y = 160 + 60 * (i-1) 
     b.width = 40 
     b.height = 40 
     b.color = draw.blue 
     b.draw = drawButton 
     b.action = digitAction 
     buttons[c] = b 
     c = c + 1 
     end 
    end 
    buttons[1].title = '7' 
    buttons[2].title = '8' 
    buttons[3].title = '9' 
    buttons[4].title = '4' 
    buttons[5].title = '5' 
    buttons[6].title = '6' 
    buttons[7].title = '1' 
    buttons[8].title = '2' 
    buttons[9].title = '3' 
    buttons[10].title = '0' 
    buttons[11].title = '.' 
    buttons[11].action = dotAction 
    buttons[12].title = 'C' 
    buttons[12].color = draw.orange 
    buttons[12].action = clearAction 
end 

最後には、全体としてプログラムを参照する...• はどのボタンが知っているのですか?具体的にはどのようなコード行で、どのように動作しますか? (私はトラックの非常にかすかな理解がところで触れてい)

function digitAction(button) 
    if string.len(display.title) < 16 then 
    sys.alert('tock') 
    if display.started then 
    display.title = display.title .. button.title 
    else 
    if button.title ~= '0' then 
     display.title = button.title 
     display.started = true 
    end 
    end 
    else 
    sys.alert('tink') 
    end 
end 

function dotAction(button) 
    if string.find(display.title, '.', 1, true) then 
    sys.alert('tink') 
    else 
    display.title = display.title .. '.' 
    display.started = true 
    sys.alert('tock') 
    end 
end 

function clearAction(button) 
    sys.alert('tock') 
    display.title = '0' 
    display.started= false 
end 

function createDisplay() 
    display = { } 
    display.x = 60 
    display.y = 100 
    display.width = 200 
    display.height = 40 
    display.title = '0' 
    display.color = draw.red 
    display.started = false 
end 

function createButtons() 
    buttons = { } 
    local c = 1 
    for i = 1, 4 do 
    for j = 1, 3 do 
    local b = { } 
    b.x = 80 + 60 * (j-1) 
    b.y = 160 + 60 * (i-1) 
    b.width = 40 
    b.height = 40 
    b.color = draw.blue 
    b.draw = drawButton 
    b.action = digitAction 
    buttons[c] = b 
    c = c + 1 
    end 
    end 
    buttons[1].title = '7' 
    buttons[2].title = '8' 
    buttons[3].title = '9' 
    buttons[4].title = '4' 
    buttons[5].title = '5' 
    buttons[6].title = '6' 
    buttons[7].title = '1' 
    buttons[8].title = '2' 
    buttons[9].title = '3' 
    buttons[10].title = '0' 
    buttons[11].title = '.' 
    buttons[11].action = dotAction 
    buttons[12].title = 'C' 
    buttons[12].color = draw.orange 
    buttons[12].action = clearAction 
end 

function drawDisplay() 
    draw.setfont('Helvetica', 20) 
    draw.setlinestyle(2, 'butt') 
    local x1, y1 = display.x, display.y 
    local x2, y2 = x1 + display.width, y1 + display.height 
    draw.roundedrect(x1, y1, x2, y2, 10, display.color) 
    local w, h = draw.stringsize(display.title) 
    local x = x2 - 10 - w 
    local y = y1 + (display.height - h)/2 
    draw.string(display.title, x, y, draw.black) 
end 

function drawButton(b) 
    draw.setfont('Helvetica', 18) 
    draw.setlinestyle(2, 'butt') 
    local x1, y1 = b.x, b.y 
    local x2, y2 = x1+b.width, y1+b.height 
    draw.roundedrect(x1, y1, x2, y2, 10, b.color) 

    local w, h = draw.stringsize(b.title) 
    local x = b.x + (b.width - w)/2 
    local y = b.y + (b.height - h)/2 
    draw.string(b.title, x, y, draw.black) 

end 

function drawButtons() 
    for i = 1, #buttons do 
    buttons[i].draw(buttons[i]) 
    end 
end 

function lookupButton(x, y) 
    for i = 1, #buttons do 
    local b = buttons[i] 
    if x > b.x and x < b.x+b.width and y > b.y and y < b.y+b.height then 
    return b 
    end 
    end 
    return nil 
end 

function drawScreen() 
    draw.beginframe() 
    draw.clear() 
    drawDisplay() 
    drawButtons() 
    draw.endframe() 
end 

function touchBegan(x, y) 
    local b = lookupButton(x, y) 
    if b then 
    b.action(b) 
    end 
end 

function touchMoved(x, y) 
end 

function touchEnded(x, y) 
end 

function init() 
    draw.setscreen(1) 
    draw.settitle('Num Pad') 
    draw.clear() 
    draw.tracktouches (touchBegan, touchMoved, touchEnded) 

    createButtons() 
    createDisplay() 
end 

function mainloop() 
    while true do 
    draw.doevents() 
    drawScreen() 
    draw.sleep(30) 
    end 
end 

function main() 
    init() 
    mainloop() 
end 

-- start program 
main() 

は、あなたが提供することができます任意の助けをありがとうございました!私はこれがたくさんの質問であることを知っていますが、この知識は本当に私を推進するのに役立ちます!

答えて

2

警告:この質問のみ を購入し、あなたがプログラミングの質問に答えるために何かを購入する必要がないとき以来ドローライブラリ

の知識を持っているタッチLuaのユーザーのためにあるのですか?とにかくあなたの質問は絶対的なルアの基礎にあります。

「。」の使用方法「b」と「x」の間?または "b"と "draw"?その他...

ドット演算子は、テーブルメンバーのインデックスに使用されます。したがって、b.xは、テーブルbのキー"x"に属する値を提供します。 b["x"]のためのその構文的な砂糖。

テーブルはどのようにボタンを設定しましたか?超限定的でお願いしますか?

関数createButtonsは、空のテーブルを作成し、さまざまなボタンプロパティを格納するテーブルbで表されるボタンで塗りつぶします。

なぜ7行目と8行目に "+"、 "*"、 "(j-1)"があるのですか?

このプログラムの作成者は、追加して掛けたいからです。座標b.xb.yが計算されます。 jは1で始まるので(j-1)が使用されますが、この計算では0から開始する必要があります。 2 forループは4行のボタンを作成します。それぞれのボタンはx座標がパラメータjに依存し、yはパラメータiに依存するため、3つのボタンを含みます。

高さと幅は何ですか?私はx とyしかないと思った。

ボタンには、場所だけでなく寸法も必要です。 bがforループ内のローカル変数として作成されるとき、そのプロパティはすべてここで設定されます。それらは後で変更される可能性があります。

ボタンをタップすると、どのようにボタンが表示されますか?具体的には 行のコードは何ですか?どのように動作しますか?

あなたのメインループは毎回draw.doevents()を呼び出します。したがって、ある時点で、touchBeganが呼び出されるイベントが発生します。 ボタン自体がタップされたことがわかりません。関数touchBegan(x、y)は、lookupButton(x、y)を呼び出してボタンの1つがx、yでヒットしたかどうかを調べ、そのアクション関数を呼び出します。 actionは、dotAction、digitAction、またはclearActionのいずれかです。したがって、数字ボタンをタップするとdigitAction()が呼び出されます。

自分で好きなことをして、Luaに関する本を読んだり、少なくともLuaのチュートリアルをしてください。第三者図書館へのダイビング。最も一般的なLua型を索引付けする方法がわからない場合、または+と*が算術演算子である場合は、コードを理解するのが非常に難しくなり、決して生産的ではありません。

+0

私は私の人生でタッチルアを見たことがありません。しかし私はルアを知っているので、私はあなたの質問にすべて答えることができました。私はそれがあなたに少し動機を与えることを願っています:) – Piglet

+0

ありがとうございました!私はこれをさらに分析するにつれて疑問が増えますが、これで十分です。答えの最後の段落で言及したように、「Luaチュートリアル」ではどこでこれを見つけることができますか?私はLuaのウェブサイトを使用することしかできませんでした。私の知る限り、ドローライブラリチュートリアルはありませんでした(私はこれを調べます)。私が参照しなければならなかったのは、コマンドのリストとアプリで何をしたのかということでした。 –

+0

ドローライブラリのチュートリアルは必要ありませんが、Luaのことを明らかにしていないので、Luaチュートリアルが必要です。 Luaを十分に理解すれば、コードを読んだり理解したり、ライブラリを効果的に使うことができます。そのようなテキストを読む。あなたがすべての単語を知っていない場合、あなたは意味を取得しません。あなたの場合、あなたはすべての文字を知らない。あなたが読むことができなければ、あなたは書くのに苦労するでしょう。 – Piglet

1

このプログラムでは特にテーブルを使用してボタンを表していますが、これは管理しやすくするためです。高さと幅は同じ方法です。ドローライブラリが初めての場合は、このようなコードを確認するだけであなたを混乱させることになります。ほとんどの質問は正直なところOOPに関するものです。

また、この質問は現在スタックオーバーフローには適していない可能性があります。タッチルアフォーラムでPMの私が自由に感じることができるヘルプ/小さなチュートリアルが必要な場合は、私のユーザー名はワーキングピークですが、この質問を修正または削除する必要があります。

+0

私は返事があれば、私は削除します。おそらく、私は難しいことをする前に基本を打つ必要があります。 –