「うわーートリケラの大群だ~~~!!!
トリケラモデルはサカイトP様から勝手に借りてるよ~~~
」
そしてDxLibでの3Dアクションゲームの作り方です。
設定とかは自分でしてください
まずPla.hとPla.cppとCam.hとCam.cppを作りますそしてpla.hの内容は↓
#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
#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 ) ) ;
/*続きは次の日記で!!!お楽しみに!*/
}