3Dモデル移動

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
G.G.
記事: 63
登録日時: 10年前
連絡を取る:

3Dモデル移動

#1

投稿記事 by G.G. » 9年前

3Dモデルがキーを離すと元に戻ってしまいます。
どうしたらいいか教えてください。

必ずcodeタグを使用してくださいね。詳しくは、フォーラムルールの確認を。 by softya(ソフト屋)

コード:

#include "DXLib.h"

int Key[256];
VECTOR Vect1, Vect2 ;


typedef struct{
	int right;
	int left;
}flag_t;
 
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
    char GetHitKeyStateAll_Key[256];
    GetHitKeyStateAll( GetHitKeyStateAll_Key );
    for(int i=0;i<256;i++){
        if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
        else                            GetHitKeyStateAll_InputKey[i]=0;
    }
    return 0;
}
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
 
    while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
          //↑メッセージ処理          ↑画面をクリア           ↑入力状態を保存       ↑ESCが押されていない
 

		int ModelHandle ;
		flag_t flag;
		// 3Dモデルの読み込み
		ModelHandle = MV1LoadModel( "date/にとりー.mqo" ) ;
		flag.left=0;
		flag.right=0;

		// Vect1 と Vect2 に値を代入
		Vect1 = VGet( 100.0f, 200.0f, 500.0f ) ;
		Vect2 = VGet( 90.0f, 0.0f, 0.0f ) ;
	if (Key[KEY_INPUT_LEFT]>0){
		flag.left=1;
	}
	if(Key[KEY_INPUT_RIGHT]>0){
		flag.right=1;
	}
	if (flag.left>0){
		Vect1 = VSub( Vect1, Vect2 ) ;
	}
	if (flag.right>0){
		Vect1 = VAdd( Vect1,Vect2);
	}
	
	
	// Vect1 の内容を画面に表示
	DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Vect1  x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;  

	// 画面に映る位置に3Dモデルを移動
	MV1SetPosition( ModelHandle, Vect1 ) ;

	// 3Dモデルの描画
	MV1DrawModel( ModelHandle ) ;

        ScreenFlip();
    }
 
    DxLib_End();
    return 0;
}

アバター
G.G.
記事: 63
登録日時: 10年前
連絡を取る:

Re: 3Dモデル移動

#2

投稿記事 by G.G. » 9年前

あう、すみません・・・。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: 3Dモデル移動

#3

投稿記事 by softya(ソフト屋) » 9年前

上にも書きましたが、必ずcodeタグを使用してくださいね。詳しくは、フォーラムルールに。

で、原因ですが
// Vect1 と Vect2 に値を代入
Vect1 = VGet( 100.0f, 200.0f, 500.0f ) ;
[訂正]Vect2は代入しても良い。
で毎フレーム初期座標に戻しているのが原因です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
G.G.
記事: 63
登録日時: 10年前
連絡を取る:

Re: 3Dモデル移動

#4

投稿記事 by G.G. » 9年前

すみません、返事遅れました。
無事実行できたので御礼を申し上げます。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る