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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1122
がみだまd3moduleで一人称視点ゲームが作りたい3解決


がみだま

リンク

2017/11/22(Wed) 21:26:43|NO.81890

一人称視点ゲームが作りたいですので作ろうとしたのです。
でもどうしても視点カメラ(d3setcam)のターゲット座標の操作がわからないのです。
どうすればいいのでしょうか!?教えてください!おなしゃす!
※始めたばかりなので、出来ればわかりやすくおなしゃす・・・・
※OSはUbuntuです、Wineで無理やり動かしているのでシンプルに教えていただくと
ものすごく嬉しいのです。

試行錯誤して挫折した文↓

*main if start=1:stop title "無題":cls 4 color 100,100,100:boxf 0,0,640,23 button "ファイル",*file pos 65,0:button "編集",*edit pos 130,0:button "設定",*set pos 195,0:button "ヘルプ",*help pos 575,0:button "テストプレイ",*play ;status pos 257,-3:font msgothic,12,1:color 255,255,255 mes "プレイヤー位置:"+px+","+py+","+pz pos 257,10 mes "プレイヤー視点:"+psx+","+psy+","+psz *file *edit repeat color 0,0,0:boxf 0,20,640,480 pos 0,30:color 100,100,100 mes "マウス座標:":mes mousex:mes mousey mes "PC座標:":mes pcx:mes pcy:mes pcz ;横方向 pcx=1000 ;縦方向 pcz=480-mousey+pcz1 pcz=210-mousey #include "d3m.hsp" color 255,255,255:d3box 100,100,100,0,0,0 ;cammove wait 5 d3setcam px,py,pz,pcx,100,pcz loop *set *help



この記事に返信する


法貴優雅

リンク

2017/11/23(Thu) 16:49:01|NO.81895

API叩いちゃってるし、Wine環境で動くかわからないけど
Windowsでは動いたコード。
bgscrにすればAPI叩かなくていいかも。
もっと簡潔に書ける人がいれば、修正しちゃってください。


#include "d3m.hsp" #uselib "user32.dll" #cfunc GetSystemMetrics "GetSystemMetrics" int #const SM_CYCAPTION $00000004 // タイトルバーの高さ #const MV 0.5 // 移動速度 // スクリーンサイズ sx = 960 sy = 540 // 画面中心座標 scx = sx / 2 scy = sy / 2 // ウィンドウの枠算出 frmx = ((ginfo_wx2 - ginfo_wx1) - ginfo_winx) / 2 frmy = (((ginfo_wy2 - ginfo_wy1) - GetSystemMetrics(SM_CYCAPTION)) - ginfo_winy) / 2 frmy += GetSystemMetrics(SM_CYCAPTION) // 設置する箱の位置情報(てきとー) bx = 240, 160, 80, 40, -60, -90, -120, -200 by = 200, -80, 40, -120, 120, -80, 20, -160 bs = 10 // 箱のサイズ // スクリーン設定 screen 0, sx, sy, 0 title "[WASD]移動 [MOUSE]視点 [ESC]終了" mouse ginfo_wx1 + frmx + scx, ginfo_wy1 + frmy + scy // カメラの初期設定 ch = 0.0 // カメラ水平角度 cv = 0.0 // カメラ垂直向き cx = 0.0 // カメラ位置 cy = 0.0 cz = 10.0 clx = 0.0 // カメラターゲット位置 cly = 0.0 clz = 0.0 gosub *updatecam *main // 動作処理 // ESC getkey k, 27:if k > 0:end cm = 0 // カメラ移動フラグ // 前進後退は同時押しさせない // W getkey k, 87 if k > 0 { cm += 8 } else { // S getkey k, 83 if k > 0 { cm += 1 } } // 左移動右移動は同時押しさせない // A getkey k, 65 if k > 0 { cm += 2 } else { // D getkey k, 68 if k > 0 { cm += 4 } } //mouse scx, scy //カメラの状態を更新 gosub *updatecam // 描画処理 redraw 0 // 画面クリア color 255, 255, 255 : boxf // 床描画 color 0, 192, 0 repeat 32 d3line 256, 256 - (cnt * 16), 0, -256, 256 - (cnt * 16), 0 d3line 256 - (cnt * 16), 256, 0, 256 - (cnt * 16), -256, 0 loop // 箱描画 color 0, 0, 255 repeat 8 d3box bx(cnt), by(cnt), 0, bx(cnt) + bs, by(cnt) + bs, bs loop // サイト描画 color 255, 0, 0 line scx - 8, scy, scx + 8, scy line scx, scy - 8, scx, scy + 8 // フレームレート表示 color 0, 0, 0 pos 0, 0:mes "fps:" + d3getfps() redraw 1 await (1000 / 60) // fps60位のウェイト goto *main // カメラ更新 *updatecam // カメラ位置の更新 if (cm > 0) { // 移動してる場合だけ更新 fdir = ch switch (cm) case 8 // 前 fmv = MV swbreak case 1 // 後 fmv = -MV swbreak case 2 // 左 fmv = MV fdir = ch - 1.5707 swbreak case 4 // 右 fmv = -MV fdir = ch - 1.5707 swbreak case 10 // 右前 fmv = MV fdir = ch - 0.7853 swbreak case 12 // 左前 fmv = -MV fdir = ch - 2.356 swbreak case 3: // 右後 fmv = MV fdir = ch - 2.356 swbreak case 5: // 左後 fmv = -MV fdir = ch - 0.7853 swbreak swend fx = sin(fdir) fy = cos(fdir) fz = 1.0 // 正規化 len = sqrt((fx * fx) + (fy * fy) + (fz * fz)) if (len != 0.0) { fx /= len fy /= len fz /= len } // カメラ移動 fx *= fmv cx += fx fy *= fmv cy += fy } // カメラ視点の更新 // LookAtカメラしかないみたいなので、ターゲット位置を算出する fx = double(mousex - scx) fy = double(mousey - scy) if (ginfo_act != -1):mouse ginfo_wx1 + frmx + scx, ginfo_wy1 + frmy + scy ch += fx / 500.0 cv -= fy / 100.0 // リミッター if ch < -6.2832:ch += 6.2832 if ch > 6.2832:ch -= 6.2832 if cv < -10.0:cv = -10.0 if cv > 10.0:cv = 10.0 // 水平方向のベクトルを算出する fx = sin(ch) fy = cos(ch) fz = 1.0 // 正規化 len = sqrt((fx * fx) + (fy * fy) + (fz * fz)) if len != 0.0 { fx /= len fy /= len fz /= len } clx = cx + (fx * 10) cly = cy + (fy * 10) clz = cz + cv // カメラ更新 d3setcam cx, cy, cz, clx, cly, clz, 1.0 return



法貴優雅

リンク

2017/11/23(Thu) 17:09:01|NO.81896

あーカメラ視点の正規化計算いらないや。
単純に

fx = sin(ch) fy = cos(ch) clx = cx + fx cly = cy + fy clz = cz + cv
だけでよいと思われる。



がみだま

リンク

2017/11/24(Fri) 18:22:14|NO.81899

ありがとうございます!助かりました!



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