2006/04/02

MurMurライブラリメモ #001

地点1からみて地点2の方角を求める関数。
画面上側を北(標準の視点)として求めるのでキャラがどっち向きかは考慮しません。
あくまで座標上の話。

--方角用の定数を定義 D_HERE = 0 -- 同一座標 D_EAST = 1 -- 東 D_WEST = 2 -- 西 D_NORTH = 4 -- 南 D_SOUTH = 8 -- 北 --[[ x1,y1に対してx2,y2の場所はどの方角になるかを返す。 8方向の値を返す、返り値は数値の和になる、ただし反対方向の値とは一緒に返らない。 (例 東南 = 5, 北西 = 10 など 東西や南北はありえない --]] function GetDirection(x1, y1 , x2, y2) local diffX, diffY = 0, 0 local pos = D_HERE diffX = x1 - x2 diffY = y1 - y2 if (diffX < 0) then pos = pos + D_EAST --東 elseif (diffX > 0) then pos = pos + D_WEST --西 end if (diffY < 0) then pos = pos + D_NORTH --南 elseif (diffY > 0) then pos = pos + D_SOUTH --北 end return pos end
って、なんかLuaってand,or演算にめっちゃ癖あるしっ!orzこのままじゃ論理演算使えない…っ 試しに使ってみました、召喚者の左側にとまる様になります。 なんで左かって、そりゃ心臓に近いからですよ!(謎)
function MoveSideToOwner(myid) local OwnPosX, OwnPosY = GetOwnerPosition(myid) local MyPosX, MyPosY = GetV(V_POSITION, myid) local MoveDirection = GetDirection(MyPosX, MyPosY, OwnPosX, OwnPosY) local MovePatternX = {0,0,0,-1,-1,-1,0,1,1,1} local MovePatternY = {1,-1,0,0,1,-1,-1,0,1,-1} --召喚者と同じ座標もしくは1セル以上離れていない場合は移動しない(1セルも処理すると結構うざい if (MoveDirection ~= D_HERE and GetDistanceFromOwner(myid) > 1) then Move(myid, OwnPosX + MovePatternX[MoveDirection], OwnPosY + MovePatternY[MoveDirection]) end end
コメントがまったくないのはご愛嬌(`・ω・´) あと、この関数を乗せるとALT+右クリックで移動させても戻ってくるさみしんぼホムになりますのでご注意を(笑) ALT+右で移動後に復帰するときはとりあえずもどってくるレベルですね、召喚者がどこ向いてるかはわからないので。

-- 注意 --

ここでごそごそとやってるコードはあくまで評価用とか実験用です。
ご自身のコードに貼り付けたりするのは自由ですが、貼り付けたプログラムを第三者に配布する場合は、
大変お手数とは思いますが、事前にご一報頂きますようお願いします。
また、プログラムを利用したことで損害や障害が発生したとしても、
当方では一切の責任を負いかねますのでよろしくお願いします。


投稿者 Merchant : カテゴリ [Lua ]

トラックバック

このエントリーのトラックバックURL:

http://merchant-murmur.info/mt/mt-tb.cgi/385

※トラックバックを行った際タイムアウト(HTTP error: 500)が起こる場合もありますがトラックバックは正常に行えている場合があります。
 エラーが発生した場合はお手数ですが、一度トラックバックを行ったこちらのページをご確認ください。
※トラックバック重複防止用のプラグインを導入しています。
 重複ではないのにトラックバックが行えない場合はお手数ですがご連絡いただけますようお願いします。

コメント

コメントをどうぞ




保存しますか?




(c)2006 Gravity Corp. & Lee Myoungjin(studio DTDS). All Rights Reserved.
(c)2006 GungHo Online Entertainment, Inc. All Rights Reserved.
当コンテンツの再利用(再転載・配布など)は、禁止しています。