やったらこーゆー問題に早速ぶつかってしまいました。
多分、sinとかcosとか使うやろなーって思ってます。
一応
https://wiki.hsp.moe/DevMagazin%EF%BC%8F%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0.html
読んできたんですが、厨房にはぜんぜん理解できません泣
どうかご教授お願いします。
*メモ*
・d3mを使う理由は、多環境で動作することが多いからです。 ・数学掲示板じゃないので、なるべく応用に解説を加えて貰うと嬉しいです。
とりあえずさっきまで書いていたソースです
わからないところはスラッシュ(/)でいっぱいにしています。
↓
screen 0,300,200,4,0,0 mes "準備中です、ちょっとまってね" #include "d3m.hsp" #define wh color 255,255,255 #define f1 font "" ,20,1 #define f2 font "" ,15,1 #define f3 font "" ,15 #define fd cx=0.0:cy=0.0:cz=0.0:clx=0.0:cly=0.0:clz=0.0 onexit gosub *quit fd *cammove bgscr 0,ginfo_dispx,ginfo_dispy,1,0,0 title "インフォメーション" screen 1,,,,5,5 screen 2,200,150,8,ginfo_dispx-220,5 title "ファイル" screen 3,200,600,8,ginfo_dispx-220,160 title "パラメータ変更" repeat ;インフォメーションウインドウ gsel 0 redraw 0 font "MS UI Gothic",15,1 color:boxf pos 670,30:wh mes "マウス座標:"+mx+","+my+" Sマウス座標:"+smx+","+smy+","+smz mes "目線座標:"+clx+","+cly+","+clz ;ヘルプ color 255,0,0:line smx,smy,mousex,mousey ;線 wh line 640/2,480/2+30+cz,cx/100+640/2,480/2+170 line 640/2-100,cy/100+480/2+250/2,640/2,480/2+30 color 255,0,0 line cx/100+640/2,480/2+90,cx/100+640/2,480/2+170 color 255,255,0 line 640/2-100,cy/100+480/2+250/2,640/2+100,cy/100+480/2+250/2 ;キー入力受付 getkey k,2 if k>0::gsel 3,1:gsel 2,1:gsel 1,1 font "MS UI Gothic",15 redraw 1 ;カメラビューウインドウ gsel 1 redraw 0 title "カメラビュー CX:"+cx+" CY:"+cy+" CZ:"+cz wh:boxf ;キー受付 getkey mr,2 ;補助表示 ; sm座標表示 color 255,100,100 pset smx,smy ; 座標平面描画 color 64, 192, 64 repeat 31*b a = cnt * 2000 / 30 - 1000 d3line a, 1000*b, 0, a, -1000*b, 0 d3line 1000*b, a, 0, -1000*b, a, 0 loop ; 座標軸描画 color 32, 128, 32 d3mes "X", 2200, 0, 0 d3mes "Y", 0, 2200, 0 d3mes "Z", 0, 0, 1100 d3arrow 2000, 0, 0, -2000, 0, 0 ; x d3arrow 0, 2000, 0, 0, -2000, 0 ; y d3arrow 0, 0, 1000, 0, 0, -1000 ; z ;キー処理 ;x,y座標 差分から移動する場面 if mr>0{ ;ヘルプ color 255,0,0:line smx,smy,mousex,mousey color pos 0,0 :mes "ホールド マウス座標:"+mx+","+my+"\nSマウス座標:"+smx+","+smy+","+smz pos 640/2,0:mes "Y+\n近づく" pos 640/2,440:mes "y-\n遠ざかる" pos 0,480/2:mes "x-" pos 600,480/2:mes "X+" boxf 640/2-100,480/2+30,640/2+100,480/2+200 ;線 wh line 640/2,480/2+30+cz,cx/100+640/2,480/2+170 line 640/2-100,cy/100+480/2+250/2,640/2,480/2+30 color 255,0,0 line cx/100+640/2,480/2+90,cx/100+640/2,480/2+170 color 255,255,0 line 640/2-100,cy/100+480/2+250/2,640/2+100,cy/100+480/2+250/2 ;カメラ位置、マウス座標記録 if scpos=0{ scx=mx:scy=my smx=mousex:smy=mousey scpos=1 } pos 640-90,0:color:mes "カメラ移動" ;mouseとsmの差分移動 if smx>mousex:cx+(mousex-smx) ;-x if smx<mousex:cx+(mousex-smx) ;+x if smx>mousey:cy-(mousey-smy) ;-y if smx<mousey:cy-(mousey-smy) ;+y } if mr=0&scpos=1:scpos=0 ;z座標 マウスホイール cz+mousew/10 ;ビュー処理 ;マウスホールドなし(フリー) if mr=0{ clx=sin(mousex,mousey) ///////////////////////////////////////わかんないです(焦り } d3setcam cx,cy,cz,clx,cly,clz redraw 1 mx=mousex:my=mousey ;info用 ;ファイルウインドウ gsel 2 if fwb=0{ syscolor 10:boxf:color mes "マップを保存":pos 100,0:button gosub "保存",*save mes "マップを読込":pos 100:button gosub "読み込み",*load mes "保存せずに終了":pos 100:button gosub "終了",*quit fwb=1 } ;パラメータ変更ウインドウ gsel 3 getkey k,1 if k>0:pwb=0 if ginfo_act!3:pwb=0 if ginfo_act=3&mousey<200&pwb=0{ clrobj syscolor 10:boxf:color objsize 200,100:f3 pos 0,0:listbox plist,,"カメラビュー\nマップ" pos 6,200:font "MS UI Gothic",13 switch plist case 0 f1:mes "\n補助線":f3 mes "補助タイル(緑)倍増量" input b,182,20 f1:mes "\n位置":f3 mes "カメラ座標(CX,CY,CZ)" input cx,60,20:input cy,60,20:input cz,60,20 mes "ゼロ座標" chkbox "する",chk1 swbreak case 1 f1:mes "マップ" f3:mes "空(天井)" input sky,182,20 mes "地面" input gnd,182,20 swbreak swend pwb=1 } if chk1=1:fd:chk1=0 wait 1 loop *save dialog ".txt",17,"専用テキストマップ" return *load dialog ".txt",16,"専用テキストマップ" return *quit dialog "本当に終了しますか?",2 repeat wait 1 if stat =6:end if stat =7:break loop return