HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0918
Nanashinogond3mでFPSゲーを作るときの視点をマウスで4解決


Nanashinogon

リンク

2018/9/18(Tue) 00:10:11|NO.85358

とりあえず何も知らずにd3mでFPSゲー作ろうと思って
やったらこーゆー問題に早速ぶつかってしまいました。

多分、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



この記事に返信する


Nanashinogon

リンク

2018/9/18(Tue) 00:12:49|NO.85359

->>>すみませんどうでもいい補足です<<<-
上記のソースはプレイするためではなく、マップを編集する奴を
作ろうとして書いたソースです。



あらや

リンク

2018/9/18(Tue) 01:18:11|NO.85360

sin(サイン)、cos(コサイン)などの三角関数は高校数学レベルなので中学生だとちょっと早いかもしれませんね。

基本として、三角関数は直角三角形を基準にして考えるものだと覚えてください。

一応三角関数に関して比較的わかりやすく解説しているサイトです。
https://atarimae.biz/archives/18037
プログラムで使う角度はラジアン(弧度法)を使うことが多いのですが
それに関しても解説してあるので読んでみてください。


質問の箇所に関してですが
>clx=sin(mousex,mousey)
sinに座標を渡すのではなく角度を渡します。
clx=sin(ラジアン角度)

ラジアンがわからない、もしくは慣れないようでしたら 通常の度数法を弧度法に変換するマクロを使って
clx=sin(deg2rad(角度))
こんな形で使うとだけ覚えておけばとりあえずは大丈夫です。



ついでですが、atan(アークタンジェント)はtan(タンジェント)の逆だと思ってください。
tan(角度) = 数値 // tanに角度を渡すと、それに応じた数値がわかる
atan(数値) = 角度 // atanに数値を渡すと、それに応じた角度がわかる
こんな感じです。


HSPというより数学的な説明ばかりで申し訳ないですが、
この辺りを理解しないと3Dのビュー処理は無理かと思います。



法貴優雅

リンク

2018/9/18(Tue) 20:03:50|NO.85363

過去ログからですが、参考にどうぞ。
http://hsp.tv/play/pforum.php?mode=pastwch&num=81890



Nanashinogon

リンク

2018/9/20(Thu) 22:34:58|NO.85391

>>あらやさん>>法貴優雅さん
ありがとうございます!頑張ってみます!



ONION software Copyright 1997-2018(c) All rights reserved.