3Dアクション制作日記3&3Dアクションゲームの作り方

アバター
プラム
記事: 164
登録日時: 11年前
住所: 東海地方

3Dアクション制作日記3&3Dアクションゲームの作り方

投稿記事 by プラム » 11年前

ダンジョンを作ってみました↓
スクリーンショット006.png
スクリーンショット006.png (24.6 KiB) 閲覧数: 105 回
リノ=ライト
「うわーートリケラの大群だ~~~!!!
トリケラモデルはサカイトP様から勝手に借りてるよ~~~


そしてDxLibでの3Dアクションゲームの作り方です。
設定とかは自分でしてください
まずPla.hとPla.cppとCam.hとCam.cppを作りますそしてpla.hの内容は↓

CODE:

#ifndef DEF_PLAYER
#define DEF_PLAYER

#include "DxLib.h" //Dxライブラリをインクロード
#include "Cam.h"

class Player {
 public: //~~非公開部分~~

VECTOR Position ; //プレイヤーの座標
VECTOR MoveVec; //移動ベクトル
float Angle ; //プレイヤーの回転度
float jumpPos; //ジャンプ力
int State ; //プレイヤーの状態
/*
int PlayAnim; //再生しているアニメーション(今回は使いません)
float PlayAnimTaim; //再生しているアニメーションの再生時間(今回は使いません) 
int ModelHandle; //モデルハンドル(今回は使いません)*/


 private: //~~公開部分~~
void PLA_Init();
void PLA_Update();
void PLA_Move();
/*void PLA_Anim();//アニメーション処理(今回は使いません)
void PLA_NewAnim( int NewAnimNumber ); //新たなアニメーションを再生する(今回は使いません)*/
void PLA_Draw(); //描画処理
void PLA_Angle(); //向きを変える処理
void PLA_End();
}; 
#define PLAYER_MOVE_SPEED 1.5f //移動スピード
#define PLAYER_JUMP_SPEED 4.5f //ジャンプスピード
#define PLAYER_HIT_H 8.5f //縦あたり判定範囲
#define PLAYER_HIT_W 18.0f //横あたり判定範囲
#define PLAYER_ANGLE_SPEED 0.5f //回転速度
#define PLAYER_DOWN_SPEED 0.5f //重力
#define PLAYER_HIT_PLUS 5.8f //押し出し距離

#endif
続いてはPla.cpp内容は↓

CODE:

#include "PLAYER.h"

void Player::PLA_Init(){
Position=VGet(0.0f,0.0f,0.0f); //座標は全て0
Angle=0.0f; //回転度は0
/*ModelHandle=MV1LoadModel("data/test.pmd"); //モデルロード*/
State=2; //初期状態はジャンプ(もし最初から壁に当たっていない場合浮いているままになるから)

}
void Player::PLA_Update(){
VECTOR UpMove,LeftMove; 
UpMove=VSub( Target,Eye );
UpMove.y=0.0f;
LeftMove = VCross( UpMove, VGet( 0.0f, 1.0f, 0.0f ) ) ;
UpMove = VNorm( UpMove ) ;
LeftMove = VNorm( LeftMove ) ;

MoveVec=VGet(0.0f,0.0f,0.0f);

if(CheckHitKey(KEY_INPUT_UP)==1||CheckHitKey(KEY_INPUT_W)==1){
MoveVec=VAdd(MoveVec,UpMove);

}else if(CheckHitKey(KEY_INPUT_DOWN)==1||CheckHitKey(KEY_INPUT_S)==1){

MoveVec=VAdd(MoveVec,VScale( UpMove, -1.0f ) );

}

if(CheckHitKey(KEY_INPUT_LEFT)==1||CheckHitKey(KEY_INPUT_A)==1){
MoveVec=VAdd(MoveVec,LeftMove);

}else if(CheckHitKey(KEY_INPUT_RIGHT)==1||CheckHitKey(KEY_INPUT_D)==1){

MoveVec=VAdd(MoveVec,VScale( LeftMove, -1.0f ) );

}

if(State!=2&&CheckHitKey(KEY_INPUT_Z)==1||CheckHitKey(KEY_INPUT_SPACE)==1){

jumpPos=PLAYER_JUMP_SPEED;
State=2;
}
if(MoveVec.x>0.1f||MoveVec.z>0.1f){

MoveVec=VScale(MoveVec,PLAYER_MOVE_SPEED);
State=1;

}else{
if(State==1){
State=0;
}
}
if(State==2){
jumpPos-=PLAYER_DOWN_SPEED;
MoveVec.y=jumpPos;
}
PLA_Angle();
PLA_Move();
}
void Player::PLA_Move(){
int i,j,k;
MV1_COLL_RESULT_POLY_DIM HitDim;
MV1_COLL_RESULT_POLY *Kabe[ 200 ] ;		
MV1_COLL_RESULT_POLY *Yuka[ 200 ] ;	
int KabeNum,YukaNum;
HitDim = MV1CollCheck_Sphere( StgModelHandle, -1, Position, PLAYER_HIT_H + VSize( MoveVec ) ) ;
/*続きは次の日記で!!!お楽しみに!*/
}

次の日記で続きを書きますまた!
最後に編集したユーザー プラム on 2014年3月12日(水) 17:07 [ 編集 1 回目 ]

コメントはまだありません。