したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

RCのためのLuaの関数を集めるスレ

1name=NONE:2005/06/03(金) 13:35:07
Luaの関数はスクリプトより汎用性高いから、実はプログラミング初心者にはLuaを薦めたほうがいいんじゃないか?とおもった。
そこで、このスレに使いやすい関数を集めてみませんか?

2name=NONE:2005/06/06(月) 02:43:27
試しに作った十字ライン描画関数
意外に使いやすそうなのでのせてみる。
チップの半分が0.3であることに注意。

-- CrossLine() 十字ラインの描画
-- chip : 原点となるチップ番号
-- dis : 原点からのZ軸方向の距離
-- width : 幅
-- height: 高さ
-- col : 色
-- 使用例 : CrossLine(2, 1.5, 0.3, 0.3, 16711680)

function CrossLine(chip, dis, width, height, col)
dummy=_SETCOLOR(col)

dx=-_ZX(chip)*dis
dy=-_ZY(chip)*dis
dz=-_ZZ(chip)*dis

x=_XX(chip)*width
y=_XY(chip)*width
z=_XZ(chip)*width
dummy=_MOVE3D(_X(chip)+dx+x,_Y(chip)+dy+y,_Z(chip)+dz+z)
dummy=_LINE3D(_X(chip)+dx-x,_Y(chip)+dy-y,_Z(chip)+dz-z)
x=_YX(chip)*height
y=_YY(chip)*height
z=_YZ(chip)*height
dummy=_MOVE3D(_X(chip)+dx+x,_Y(chip)+dy+y,_Z(chip)+dz+z)
dummy=_LINE3D(_X(chip)+dx-x,_Y(chip)+dy-y,_Z(chip)+dz-z)
end

3name=NONE:2005/06/06(月) 03:04:58
いきおいで載せてしまったが、もう少しだけすっきりさせときます。
Z方向の距離は好みで前方をプラスにしてあります。
使いやすいように適当に変えて使ってください。
ライン描画を使用しているので15B11に対応

-- CrossLine() 十字ラインの描画
-- chip : 原点となるチップ番号
-- dis : 原点からのZ軸方向の距離
-- width : 幅
-- height: 高さ
-- col : 色
-- 使用例 : CrossLine(2, 1.5, 0.3, 0.3, 16711680)
function CrossLine(chip, dis, width, height, col)
-- 色
dummy=_SETCOLOR(col)

-- 描画原点
cx=_X(chip)-_ZX(chip)*dis
cy=_Y(chip)-_ZY(chip)*dis
cz=_Z(chip)-_ZZ(chip)*dis

-- 横ライン
x=_XX(chip)*width
y=_XY(chip)*width
z=_XZ(chip)*width
dummy=_MOVE3D(cx+x, cy+y, cz+z)
dummy=_LINE3D(cx-x, cy-y, cz-z)

-- 縦ライン
x=_YX(chip)*height
y=_YY(chip)*height
z=_YZ(chip)*height
dummy=_MOVE3D(cx+x, cy+y, cz+z)
dummy=_LINE3D(cx-x, cy-y, cz-z)
end

4name=NONE:2005/06/07(火) 20:43:08
ボタン2個同時押しにも対応した、モード切替関数です。
この関数を使うときは、main関数の最後のほうに下の一行を入れてください。

for i = 0,16,1 do mem[i]=_KEY(i) end

-- m:現在のモード max:モードの最大個数(モード(m)は0から1ずつ増えていって、最大max-1まで増えた後に0にもどる)
-- ki1,ki2:モード変更キー(キー一個の場合は両方に同じ数字を入れる)
-- mem[n] = 1フレーム前の_KEY(n)(グローバル変数として定義してやってください)
-- 使用例 mode = function mode_change(mode,4,5,3)
-- この使用例だと、最初にmode=0だとして、ZとXを同時押しするごとに、modeが0→1→2→0→・・・と変わってゆく

mem={} -- キー状態記憶用行列

function mode_change(m,ki1,ki2,max)--2個同時押し対応モード変更関数--
if ((_KEY(ki1)==1) and (_KEY(ki2)==1) and (mem[ki1]==0) and (mem[ki2]==0)) then-- 現在キー押下され、前フレームで押されていない場合
m=math.mod(m+1,max)
end
return m
end


-- うーん、グローバル変数必須だったり、main関数にも変更加えないといけなかったり、ちょっと使いにくいかなぁ・・・

5name=NONE:2005/06/17(金) 09:39:32
Luaの練習に作ってみる。といっても全体的にCrossLineのパクリっぽい
Ctrl+F10視点でX,Y(32,32が右上、-32,-32が左下)指定すると
線が描けるって奴です
一応ZOOMを変えても同じ大きさに見える様にしてあります
disは0.3固定でいいかも
k=set2D()
_SETCOLOR(16711680)
move2D(21, 0.3, 1.5, k)
line2D(32, 32, 1.5, k)
line2D(0, -32, 1.5, k)
・・・
みたいな感じで使います

-- set2D() 開始点初期化
--move2D、line2Dに必要な引数を作成、1フレームに一回だけでOK
function set2D()
--視野角取得
zo=_ZOOM(0)/2
--初期化計算
k=math.tan(math.rad(zo))/10
--move2D,line2D用戻り値
return k
end

6name=NONE:2005/06/17(金) 09:43:46
-- move2D() 開始点設置
-- dis : 原点からのZ軸方向の距離(0.3〜600程度)
-- width : X軸(-32〜32)
-- height: Y軸(-32〜32)
-- k:set2Dの戻り値
-- 使用例 : move2D(0.3, 0.3, 1.5, k)
function move2D(width, height, dis, k)
-- 原点
cx=_X(0)-_ZX(0)*dis
cy=_Y(0)-_ZY(0)*dis
cz=_Z(0)-_ZZ(0)*dis
--描画開始点計算
w=k*(-width)/dis
h=k*(-height)/dis
x=_XX(0)*w+_YX(0)*h
y=_XY(0)*w+_YY(0)*h
z=_XZ(0)*w+_YZ(0)*h
--開始点設置
dummy=_MOVE3D(cx+x, cy+y, cz+z)

end


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板