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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1111
sengokuHSP3プログラム超初心者が作るにあたって14解決


sengoku

リンク

2011/11/11(Fri) 18:43:29|NO.42925

HSP3超初心者なのですが、一週間で簡単な美術館を作りたいと思っております。
HSP3におけるやりたいこととして、
(「目標」1)美術館 写真など飾ってみるなどの簡単なものを作りたい。
(2)階段を上ったり降りたりさせたい。
(3)ヘッドマウントディスプレイをつかった左右上下方向移動させたい。
(4)視点は画面視点として、キャラクターなどをなるべく使わない方向で行きたい。
(5)音BGMをつけたり、階段を降りるときの音などを付けてみたい。
(6)おまけとして、いきなり床が崩れたりして、落ちたりするなどを付けてみたい。

なにぶん超初心者なので、いろいろと質問をしていきたいと思っておりますが、まず
このようなプログラムを作るにあたってまずはこれをしたほうがいいとかありましたら
ご指摘よろしくお願いいたします。

3d作成にあたって使用するソフトはMetasequoiaLE R2.4を使用する予定です。



この記事に返信する


FPW

リンク

2011/11/11(Fri) 19:27:14|NO.42926

初心者で、かつ一週間で作るとなると、いきなり3Dは
ハードルが高すぎると思われます。
段階を踏んで地道に覚えていくのが一番の近道です。
順序としては

・2Dで画像を表示してみる
・画像を移動してみる
・音を鳴らしてみる

ではないでしょうか。
まずはここまで作ってみるのがいいと思います。



ひらまる

リンク

2011/11/11(Fri) 22:42:00|NO.42927

いきなり3Dだからといって、ハードルが高いということはないと思います。
正直初心者にとって、2Dも3Dも大差ありません。
Metasequoiaがある程度使えるならむしろ2Dより早く修得できる可能性もあります。

私も最初は3Dゲームから始めました。
3Dはライブラリ等が自動でやってくれる部分が多いので、ツール感覚で作れるのですが、
2Dは自分で考えることが多いので、プログラミング初心者には逆に難しいかもしれません。

なにより美術館のようなソフトの場合、
・当たり判定
・大量のオブジェクトの管理
・キャラクタのアニメーション
などが必要なく、モデルの表示、カメラの移動のみで実現可能だと思います。

ここまではまぁ、初心者でも素養があれば1〜2日でできるでしょう。(多分)
問題はHMDの操作に対応することです。
HMDからどのような信号が送られてくるかわかりませんが、
現状HSP3でHMDのセンサー等に対応したライブラリ等があるというのは聞いたことがありません。
HMDを使いたいのならば、それに対応したライブラリが使える言語を探すか、
もしくはHMDのセンサー情報を取得・変換できるツールを探すことから始める方が良いでしょう。



sengoku

リンク

2011/11/12(Sat) 01:14:13|NO.42932

いろいろとご指摘などありがとうございます。
全体的に時間がないのでフル稼働しながら作っています。
現在メタセコイアではなく3DACEでのモデル作成など少しはできるようになっております。
やっぱり、メタセコイアでつくるのと3DACEで作るのでは、あまり違いは、ありませんでしょうか?

また、ただいまゲーム空間の作り方について勉強中です。参考になるものなどありましたら、
ご指摘よろしくお願いいたします。

HMDに関しましては、内蔵された加速度センサーによりマウスカーソルとの同期ができており、マウスがいく
方向に上下左右の方向移動できるプログラムにすればできないでしょうか?
そこら辺のプログラムが少し難しいと思いますのでまた質問などをさせていただければ光栄です。



GENKI

リンク

2011/11/12(Sat) 01:19:48|NO.42933

> 一週間で簡単な美術館を作りたいと思っております。

あせりは禁物です。
まずは1週間では無理とあきらめて、のんびりやりましょう。
(でも一部のEasy3Dを普段から使いこなしてる人でしたら、1,2,4,5を満たすものなら1週間で作れるかもしれませんね。)


「HSP3超初心者」ということでしたらまずは、HSPスクリプトエディタのメニューから、
 ヘルプ → HSPマニュアル目次
と開くと、「HSPマニュアル総合インデックス」が開きます。

・初心者のためのHSP入門(beginner/start.htm)

という項目がありますのでご覧下さい。必ず役にたちますよ。というかこれが出来なきゃ先へ進めません。


次に11/15日に発売される「最新HSP3.3 プログラミング入門」をお勧めしようかと思っていましたが…
http://www.shuwasystem.co.jp/products/7980html/3144.html

3Dを目指されるということでしたらこちらですね。
「HSP+Easy3Dで作る3Dアクションゲーム」
http://www.kohgakusha.co.jp/books/detail/978-4-7775-1636-0



> 問題はHMDの操作に対応することです。

HMDは普通はただのディスプレイらしいですね。一部では角度検出機能がついているものもあるようですが…。
なので位置と角度情報を別途取得する必要があるかと思います。
HSPでやれるとしたらKinect+Easy3Dでしょうか。私は実際に使ったことが無いので実際どの程度使えるものかわかりませんがうまく利用できるかもしれません。

とりあえずはゲームコントローラで操作する方法で完成させるといいでしょう。
これが楽で確実、早く出来ます。これが出来ないようならHMDで移動はまず作れません。



ひらまる

リンク

2011/11/12(Sat) 01:48:35|NO.42937

HMDがマウスカーソルと同期できているなら、
どの言語でも目的のものは作れると思います。

目的が「一週間で3D美術館を作ること」であり、「HSPを習得すること」ではないのならば、
HSPの基本などは一切すっ飛ばして、Easy3D付属のサンプルから改変して使えそうなものを見つけ、
マニュアルを読んで命令の内容を確認しつつ改変していくのが1週間で完成させる近道だと思います。

どの言語でもそうですが、拡張ライブラリを使う場合はもはや別言語です。
私も最初はEasy3Dから入ったので、しばらくすると「Easy3DはだいたいできるけどHSPはよくわからない」という状態でした。
3D作品を素早く作りたいならば、HSPは良い選択だと思います。

モデリングは3DACEもで問題ありませんが、Metasequoiaの方がEasy3Dに合っていると思います。
今はとにかく「やるべきこと」を書き出して、必須なものから片付けていくことが大切です。
作ってる途中に「あれもこれも」と追加するのは絶対にやってはいけません。間違いなく未完成になります。

時間に追われて作業をすると、1週間の短さ、1日の短さ、1時間の短さというものを嫌でも感じます。
しかし時間を感じる上で大切なのは長さではありません、密度です。
短くても密度の高い時間を作り出してください。

今日が納期の私は、こうしてぎりぎりになって長文のレスをして現実逃避に走ります。
しかし時間は密度! 無駄に使った時間の分、命を燃やす時間を作るのです! (・ω・)



GENKI

リンク

2011/11/12(Sat) 01:54:44|NO.42940

> HMDに関しましては、内蔵された加速度センサーによりマウスカーソルとの同期ができており、マウスがいく
> 方向に上下左右の方向移動できるプログラムにすればできないでしょうか?

上を向くと前に進んで下を向くとバックする、右に傾けると右移動…とかそんな感じでしょうか?
なんだかゲームコントローラで操作したほうがよっぽど臨場感ありそうな気が…まあいいか。

HMDを傾ければマウスが動く状態ということなんですね。mousex、mouseyでマウス座標取得できるので後は工夫次第かと。



> 現在メタセコイアではなく3DACEでのモデル作成など少しはできるようになっております。

Easy3Dを使われるのであれば、最終的にMQOファイルを作れればどんなツールでも構いません。


> ゲーム空間の作り方について勉強中です。

どのプラグインを使うかを決めるのが先だと思います。


> 全体的に時間がないのでフル稼働しながら作っています。

着手が遅かった。もう手遅れです。しかたないので省略しても問題ない機能ははぶきましょう。
一旦完成してから余裕があれば機能追加を考えましょう。

・(1)これは目的なのではずせませんね。
 ただしデータ作成は別の人に任せてプログラムに専念しましょう。
・(2)部屋1Fのみ1個とすると難易度が下がります。
・(3)は停止が難しそうなきがします。とりあえずstick命令の方向キー取得で考えてみてください。
・(5)音は全部省略。奥の手としてBGMはWMPで再生して、同時に作ったソフトを起動するという手があります。
・(6)省略。

あとはどれだけプログラミングの作業時間を確保できるか次第かなー。



ひらまる

リンク

2011/11/12(Sat) 03:24:09|NO.42944

省略は基本的にGENKIさんの方法が良いと思います。
特に5はナイスアイデアです。

また、キャラクタの移動なども座標の処理などを覚えるのが大変なので、
ぶっちゃけこの際、
3D美術館を円柱状にして、
プレイヤーは中心から移動できず、
HMDで周囲を見回す。
という仕様にしてしまえば、1週間でも難しくはないと思います。

GENKIさんの言う通り、完成したら完成品のソースはきちんと保管しつつ、
時間があれば新しい機能を追加。という形にすべきだと思います。


あと仕様しているHMDの型番がわかるなら教えていただけないでしょうか…?
個人的な趣味で数年前から「HMD欲しいなー」と思っていたのです。
傾きをマウス座標に変換できるようなHMDがあればかなり欲しいです(■ω■)



FPW

リンク

2011/11/12(Sat) 08:41:07|NO.42946

>正直初心者にとって、2Dも3Dも大差ありません。
あれ、そうだったんですか(汗)
いつも余裕を持って解答できる範囲の質問しか答えないように
気をつけていたのですが今回は思い切り間違えてしまいました・・・。
技量の無さが露呈してお恥ずかしい限りです、以後気をつけます。



check

リンク

2011/11/12(Sat) 08:51:34|NO.42947

いやいや、3Dについてモデリングなどをやっていているから、ある程度は分かっていたとしても、
プログラムを組むとなると圧倒的に2Dのほうが簡単だし、分かりやすいだろ。

ましてやHSPですらまともに理解していない初心者が
モデリングができるというだけで一週間以内でソフトを作るのは非常に厳しいものがあると思うが、
そこは当人の努力しだいだろう。

Easy3Dのサンプルでも触ってみて、3D空間を動くコードでも引っ張ってきて、
それを元にモデルを配置していけば3Dの知識もHSPの知識も
あまりなくてもなんとかなるようなならないような。



ひらまる

リンク

2011/11/12(Sat) 11:34:08|NO.42948

いやはやいやはや イヤーッハァ!(どした
とりあえず2Dと3Dで似たような処理をするサンプルを作りました。

;2D描画 buffer 1 ; バッファを生成 picload dir_exe + "\\doclib\\hsp3ttl.jpg" ; バッファに画像読み込み PicSizeX = ginfo_sx ; 画像の横サイズを取得 PicSizeY = ginfo_sy ; 画像の縦サイズを取得 gsel 0 ; メインスクリーンを選択 rag = 0.0 ; 回転用変数を宣言 *main ; メインラベル定義 redraw 0 ; 再描画フラグをオフにする color 255, 255, 255 ; カラーに白を選択 boxf ; 画面を選択したカラーで塗りつぶす pos 320, 240 ; 描画位置を指定 gmode 0, PicSizeX, PicSizeY ; 描画サイズを指定 grotate 1, 0, 0, rag ; 回転して描画 rag += 0.1 ; 回転用変数を加算 redraw 1 ; 再描画フラグをオンにする await 1 ; CPUを休ませる goto *main ; メインラベルに移動(ループ)
2Dは他にも書き方がたくさんあります。
------------------------------------------------------------

;3D描画 #include "e3dhsp3.as" ; Easy3D読込 E3DInit 0, -1, 0, 32, 0, SCID ; Easy3D初期化 E3DSigLoad dir_exe + "\\sample\\easy3d\\Media\\banana.sig", HSID ; モデルの読込 *main ; メインラベル定義 E3DBeginScene SCID ; シーンの描画を開始 E3DRotateY HSID, 1.0 ; モデルを回転 E3DChkInView SCID, HSID ; モデルが視野内にあるか判定 E3DRender SCID, HSID, 0, 0, 0 ; モデルを描画 E3DEndScene ; シーンの描画を終了 E3DPresent SCID ; バッファをメインスクリーンにコピー await 1 ; CPUを休ませる goto *main ; メインラベルに移動(ループ)
3Dはモデルの読込→描画と直感的に書ける上に、行数も少なくて済みます。
------------------------------------------------------------

2Dと3Dでは書き方も覚えることも全く違います。
初心者ならばどっちもよくわからないと思うので、やりたい方をやった方が早いと思います。
個人的には2Dはプログラミング的、3Dはツール的な書き方だと思います。
初心者にはツール的な書き方の方が理解しやすいかと……(´・ω・`)



ひらまる

リンク

2011/11/12(Sat) 14:14:45|NO.42949

なんか楽しくてパコパコ作っちゃった。
もったいないので投下します。

HMD用に作ったので、通常のFPSとは操作方法が異なります。(WASDではないので注意)
・上下キーで前進・後退
・左右キーで旋回
・視点はマウスカーソルが画面の中心からどれだけ離れているかによって決定される。
・旋回は前進・後退に影響するが、視点の変更は前進・後退には影響しない。

↓のソースをエディタにコピペするだけで動くよ。
コメントもほぼ全行に書いてあるし、これを改変すれば1週間余裕じゃにゃい(^・ェ・^?)


;3D描画(フルスクリーン) #include "e3dhsp3.as" ; Easy3D読込 E3DInit 0, -1, 1, 32, 0, SCID ; Easy3D初期化 ;光源初期化 E3DCreateLight Light ; 光源を生成 E3DSetDirectionalLight Light, 0.5, -1, 0, 200, 200, 200 ; 光源の向きと色を設定 ;カメラ初期化 CameraDegXZ = 0.0 ; カメラ横平面角度宣言 CameraDegY = 0.0 ; カメラ仰ぎ角度宣言 E3DSetCameraPos 0, 250, 0 ; カメラ初期座標設定 ;地面初期化 E3DLoadMQOFileAsGround dir_exe + "\\sample\\easy3d\\Media\\ground.mqo", 10.0, GroundModel ; 地面モデルの読込 ;展示品初期化 ArtDir = dir_exe + "\\sample\\easy3d\\Media\\" ; 展示品のフォルダを指定 sdim ArtFile ; 展示品ファイル名配列宣言 ArtFile( 0 ) = "banana.sig" ; 展示品を追加 ArtFile( 1 ) = "slime25.sig" ; 展示品を追加 ArtFile( 2 ) = "tako.sig" ; 展示品を追加 ;展示品配置 MaxArtNum = 32 ; 展示品の最大数 dim ArtModel, MaxArtNum ; 展示品モデル配列宣言 randomize ; 乱数生成 repeat MaxArtNum ; 展示品の最大数分、展示品を作成開始 E3DSigLoad ArtDir + ArtFile( rnd( length( ArtFile ) ) ), ArtModel( cnt ) ; 展示品モデルをランダムに読込 E3DSetPos ArtModel( cnt ), -5000 + rnd( 10000 ), rnd( 1000 ), -5000 + rnd( 10000 ) ; 展示品の座標をランダムに設定 loop ; ↑のrepeatに戻ってループする ;マウス座標初期化 DefaultMouseX = ginfo_wx1 + ginfo_winx / 2 ; ウィンドウ横サイズの中心をマウスのデフォルトX座標にする DefaultMouseY = ginfo_wy1 + ginfo_winy / 2 ; ウィンドウ縦サイズの中心をマウスのデフォルトY座標にする MauseMoveRateX = 90.0 / ginfo_winx ; マウスを画面の横端まで持っていくとカメラが90度回転するように倍率を設定 MauseMoveRateY = 90.0 / ginfo_winy ; マウスを画面の縦端まで持っていくとカメラが90度回転するように倍率を設定 mouse DefaultMouseX, DefaultMouseY ; マウスカーソルをデフォルト座標に移動 ;mouse -1 ; ←※この行を有効にするとマウスカーソルが非表示になる。 ;フォント初期化 E3DCreateFont 20, 0, 400, 0, 0, 0, "MS ゴシック", FontID *main ; メインラベル定義 ; シーンの描画を開始 E3DBeginScene SCID ; シーンの描画を開始 ;カメラ移動 E3DSetCameraDeg CameraDegXZ, CameraDeg ; カメラの角度を移動用に設定 getkey Left , 37 ; 左キーの状態を取得 getkey Up , 38 ; 上キーの状態を取得 getkey Right, 39 ; 右キーの状態を取得 getkey Down , 40 ; 下キーの状態を取得 if Up : E3DCameraPosForward 20 ; 上キーで前進 if Down : E3DCameraPosForward -20 ; 下キーで後退 if Left : CameraDegXZ += 1 ; 左キーで左旋回 if Right : CameraDegXZ -= 1 ; 右キーで右旋回 ;カメラ回転 MouseMoveX = MauseMoveRateX * ( DefaultMouseX - ginfo_mx ) ; マウスの横移動距離を取得 MouseMoveY = MauseMoveRateY * ( DefaultMouseY - ginfo_my ) ; マウスの縦移動距離を取得 E3DSetCameraDeg CameraDegXZ + MouseMoveX, CameraDegY + MouseMoveY ; カメラの角度を描画用に設定 ;地面描画 E3DChkInView SCID, GroundModel ; 地面モデルが視野内にあるか判定 E3DRender SCID, GroundModel ; 地面モデルを描画 ;展示品描画 repeat MaxArtNum ; 展示品の最大数分、描画を開始 E3DRotateY ArtModel( cnt ), 1 ; 展示品モデルを回転 E3DChkInView SCID, ArtModel( cnt ) ; 展示品モデルが視野内にあるか判定 E3DRender SCID, ArtModel( cnt ) ; 展示品モデルを描画 loop ; ↑のrepeatに戻ってループする ;終了処理 getkey ESC, 27 ; ESCキーの状態を取得 if ESC : end ; ESCキーが押されていれば終了 ;操作説明を表示(消しても平気だよ) E3DDrawTextByFontID SCID, FontID, 0, 0, "↑ : 前進" , 255, 255, 255 E3DDrawTextByFontID SCID, FontID, 0, 20, "↓ : 後退" , 255, 255, 255 E3DDrawTextByFontID SCID, FontID, 0, 40, "← : 左旋回" , 255, 255, 255 E3DDrawTextByFontID SCID, FontID, 0, 60, "→ : 右旋回" , 255, 255, 255 E3DDrawTextByFontID SCID, FontID, 0, 80, "ESC : 終了" , 255, 255, 255 ;描画反映 E3DEndScene ; シーンの描画を終了 E3DPresent SCID ; バッファをメインスクリーンにコピー await 1 ; CPUを休ませる goto *main ; メインラベルに移動(ループ)



sengoku

リンク

2011/11/12(Sat) 23:26:54|NO.42953

たくさんの意見をいただき、本当にありがとうございます。
ただいま、3dゲームのサンプルプログラミングを見ながらどこがどう動くかなどの
プログラミング命令の理解などを主にやっております。ただ見てうつすだけだと自分お力に
ならないとわかっておりますので慎重かつ迅速に覚えていきたいです。

まだプログラムについてうといので、ひらまる様のプログラムなどとても見やすく勉強になりました。
HMD用ように作っていただいたプログラムも参考にさせていただきたいと思っております。


改めまして、意見をくださった皆様方本当にありがとうございます。
まだまだ、プログラムなどで生きずまったりした時に質問などをさせていただく場合があると思いますので
その時は、よろしくお願いいたします。
また、あとこんなことしたら良いなどという意見などありましたらご指摘などどうぞよろしくお願いいたします。



てれてれ

リンク

2011/11/12(Sat) 23:29:25|NO.42954

とりあえず解決したのであれば下のチェックボックスにチェックを入れたらいいと思いまーす。



sengoku

リンク

2011/11/12(Sat) 23:45:09|NO.42958

すいませんチェック入れていませんでした。ご指摘ありがとうございます。



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