初luaコード

67 views
Skip to first unread message

tetsuya noguchi

unread,
Sep 8, 2011, 2:29:01 AM9/8/11
to luarida-...@googlegroups.com
ども。のぐちです。

え~luaridaで初コーディングです。
ベースコードの部分はたろサさんのgraphicsample.luaをベースにしてます。

YouTubeのプチコン画像のなかに、昔懐かしいMZ2000 BASICの波形プロットの
サンプルがソース付きででてたので、これをば、インプリメント。

ぼくのLifetouchNOTEでは23秒で描画完了。
変数の定義わすれとか、エラーとかがちゃんとダイアログにでるので
「あぁこのためにダイアログ定義してたのか」
とある意味納得してたりして。
時間取得はluaのサイト検索で、os.clock()がみつかったので試してみたら
ちゃんと動作している模様。
ということはrequire "socket"とかもうごくのかな?
まあ、当面いらないけど。

このプログラムでわかったことは、グラフィック描画が意外と時間がかかっていること。
drawLineで描画すると、1画面描画する前にスリープにはいるくらい、時間がかかってた。
putLineにすると、シャキ~~って描画するので、ほっとしたけど。

やっぱり、実機でそのままデバッグできるってたのしいね!

==ここから===================================
------------------------------------------
--グラフィックサンプル
------------------------------------------
--関数宣言--------------------------------
main={} --mainメソッド

--グローバル変数宣言----------------------
------------------------------------------
mt={}
mt.__newindex=function(mtt,mtn,mtv)
dialog( "Error Message", "宣言していない変数 "..mtn.." に値を入れようとしています", 0 )
touch(3)
end
mt.__index=function(mtt,mtn)
dialog( "Error Message", "変数 "..mtn.." は宣言されていません", 0 )
touch(3)
end
setmetatable(_G,mt)
--------以下が実プログラム----------------


function main()
    local sz,sx
    local x,y,z,a,b
    local px, py
    local w = 256
    local h = 192
    local hpi = 3.141592/2
    local cx = w/2
    local cy = h/2*1.5
    local st_time
    local ed_time

    st_time = os.clock()
    --canvas.drawCls( color(0,0,0) )
    canvas.putCls( color(0,0,0) )

    for sz=0, 199  do
        for sx=0, 199 do
            x = ( sx-100) / 100 
            z = ( sz-100) / 100 
            a= math.cos( 3.0*x*hpi)
            b= math.sin( 2.0*z*hpi)
            y=(a^2)*(b^2)*1.15
            px=( z/3+x)*95+cx
            py=( z/2-y)*100+cy

            canvas.putLine( px,py+1, px,h, color(0,0,0) )
            canvas.putLine( px,py, px,py-1, color(255,255,255) )
            --canvas.drawLine( px,py+1, px,h, color(0,0,0) )
            --canvas.drawLine( px,py, px,py-1, color(255,255,255) )
        end
       canvas.putflush()
    end

    ed_time = os.clock() - st_time
    dialog("Time", "Elapstime is  " ..ed_time.." sec", 1)

    touch( 3 )
end

main()
------------------------------------------
--グラフィックサンプル
------------------------------------------
--関数宣言--------------------------------
main={} --mainメソッド

--グローバル変数宣言----------------------
------------------------------------------
mt={}
mt.__newindex=function(mtt,mtn,mtv)
dialog( "Error Message", "宣言していない変数 "..mtn.." に値を入れようとしています", 0 )
touch(3)
end
mt.__index=function(mtt,mtn)
dialog( "Error Message", "変数 "..mtn.." は宣言されていません", 0 )
touch(3)
end
setmetatable(_G,mt)
--------以下が実プログラム----------------


function main()
    local sz,sx
    local x,y,z,a,b
    local px, py
    local w = 256
    local h = 192
    local hpi = 3.141592/2
    local cx = w/2
    local cy = h/2*1.5
    local st_time
    local ed_time

    st_time = os.clock()
    --canvas.drawCls( color(0,0,0) )
    canvas.putCls( color(0,0,0) )

    for sz=0, 199  do
        for sx=0, 199 do
            x = ( sx-100) / 100 
            z = ( sz-100) / 100 
            a= math.cos( 3.0*x*hpi)
            b= math.sin( 2.0*z*hpi)
            y=(a^2)*(b^2)*1.15
            px=( z/3+x)*95+cx
            py=( z/2-y)*100+cy

            canvas.putLine( px,py+1, px,h, color(0,0,0) )
            canvas.putLine( px,py, px,py-1, color(255,255,255) )
            --canvas.drawLine( px,py+1, px,h, color(0,0,0) )
            --canvas.drawLine( px,py, px,py-1, color(255,255,255) )
        end
       canvas.putflush()
    end

    ed_time = os.clock() - st_time
    dialog("Time", "Elapstime is  " ..ed_time.." sec", 1)

    touch( 3 )
end

main()
==ここまで===================================

たろサ

unread,
Sep 8, 2011, 3:18:27 AM9/8/11
to luarida-...@googlegroups.com
 たろサです。

 XPERIA mini Proで50秒くらいでした。スリープ入ります・・・。
 遅いのは私のせい力不足ですね。スリープに入ると終了するのも仕様です。

 そんなにLua言語に明るいわけではないので、他の人のプログラムを見るのは
新鮮です。

 べき乗に ^ が使えるんですね。後、os.clock()って、小数単位も出るんです
ね。知らなかったです。だったらsystem.getSec()要らないですね。

 こんな感じですが、よろしくお願いします。 

> ==ここま
> で===================================
>
> --
> このグループにメールで投稿: luarida-...@googlegroups.com
> このグループから退会する: luarida-fun-cl...@googlegroups.com
> その他のオプションについては、次の URL からグループにアクセスしてくださ
> い。 http://groups.google.com/group/luarida-fun-club?hl=ja?hl=ja

--
山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
E-Mail: taro...@gmail.com

tetsuya noguchi

unread,
Sep 8, 2011, 11:07:51 PM9/8/11
to luarida-...@googlegroups.com
グラフィックに関してはこんなもんだとおもってますから、特に問題とはおもってないですよ。
むしろ、2フレームバッファ的につかえる機構を最初から用意していただいてるわけでいいとおもいます。

あと、もうすこし調べないといけないんですが、感触的にいって
 local x
 local y
と定義するのと

 local x, y
と定義するので、速度差がでるような感じです。

サンプルソフトを作っていて、デバッグ中は19秒台だったんですが、
結局こんな22秒ですし。

なにかあるんでしょうかね。



たろサ

unread,
Sep 9, 2011, 3:15:44 AM9/9/11
to luarida-...@googlegroups.com
 たろサです。

local x
local y

local x,y
で何が違うんだろうな。

 luacして違いを見ればいいのかもしれません。

 私は、速度は遅くても良いやとあきらめています。(^^;

 関数内はグローバルよりlocal変数使うほうが早いそうです。これはなんとな
く分かる気がしますが。

 私も去年「どうぶつしょうぎ」を作って以来、まともなアプリを作っていない
ので、秋になったら何かアプリを作りたいと思います。


(2011/09/09 12:07), tetsuya noguchi wrote:
> グラフィックに関してはこんなもんだとおもってますから、特に問題とはおもっ
> てないですよ。
> むしろ、2フレームバッファ的につかえる機構を最初から用意していただいてる

> わけでいいとおもいます。
>
> あと、もうすこし調べないといけないんですが、感触的にいって
> local x
> local y
> と定義するのと
>
> local x, y
> と定義するので、速度差がでるような感じです。
>
> サンプルソフトを作っていて、デバッグ中は19秒台だったんですが、
> 結局こんな22秒ですし。
>
> なにかあるんでしょうかね。
>
>
>

tetsuya noguchi

unread,
Sep 9, 2011, 4:03:37 AM9/9/11
to luarida-...@googlegroups.com
ですよね(^^)
べつに速度重視ってわけでもないんですが、なにかあるのかなと。
もうすこしチマチマさわって文法を頭に入れておこうとおもっています。

秋になればまた遠方出張もあるでしょうから、新幹線(飛行機?)のなかで
なにかつくれるかも、とおもっているんですが。

ちょいちょい、ってなにか作りたいときにつくれる環境にあることが
重要ですし。
そういうときにはAndroid+キーボードであってよかったとつくづくおもいます。

Reply all
Reply to author
Forward
0 new messages