キャラクターに時間内を滑るように移動をさせたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tuya

キャラクターに時間内を滑るように移動をさせたい

#1

投稿記事 by tuya » 15年前

はじめまして、いつもお世話になっております。

左右どちらでもいいのでキーを押します。
キーを押している間は通常移動をさせて
キーを放した後、滑る時間を利用してキャラクターを滑らせたいと思っています。

//*_ キャラクターの初期位置及び滑る時間
int x = 320;
int y = 240;
int vx = 0;
float speed = 0.1f;
int slip_time = 30;
int SlipTime = 0;
char KeyBuf[ 256 ] ;

//*_ 滑る時間が0以上あるなら,時間を減らす
if(SlipTime > 0)
{
SlipTime--;

//*_ 時間が0を下回ったら,時間を0にする
if(SlipTime <= 0) SlipTime = 0;
}
//*_ 滑っていなければ
else
{
// キー入力のあと,SlipTime にsliptimeを入れる
if(KeyBuf[KEY_INPUT_LEFT] == 1) SlipTime = slip_time;
// ここからvxにspeedをどのように入れるかが分かりません

}
// vxをキャラクターのxに加算する
x +=vx;
// はみ出し処理
if(x < 0) x =0;
if(x > 640-32) x = 640-32;

//*_ キャラクター
DrawBox(x,y,x+32,y+32,GetColor(0,0,255),TRUE) ;

滑る時間までは書けますがその後のキー入力の部分がうまく書けません。
説明下手で申し訳ありませんが
ご教授頂けないでしょうか?よろしくお願いいたします。

へろりくしょん

Re:キャラクターに時間内を滑るように移動をさせたい

#2

投稿記事 by へろりくしょん » 15年前

質問の意味が今ひとつ分かりません。

それら一連の処理がどのように呼ばれるのか分からないので何とも言えないのですが。
ざらっと見た感じ、1秒間にン十回と呼ばれるっぽいですね。

とりあえず通常移動時の処理を書きたいということでしょうか。

正直なところ、なんでもいいんじゃないですか?
vx = speed * 10; でもいいし。 vx = speed * 20; でもいいし。
ただ、変数vxはint型ですから、結局少数以下は丸められますので、vx++; でもいいかと。


滑っている間の移動が行われていないのは仕様ですか?


それとこれらの処理がフレーム毎等1秒間にン十回と呼ばれるのであれば、
if(KeyBuf[KEY_INPUT_LEFT] == 1) の条件を満たした瞬間問答無用で滑ると思うのですが、これも仕様ですか?

とりあえず一連の状態遷移を紙に書いてみるといいですよ。 後は細かいパラメータの調整ですみますから。

シエル

Re:キャラクターに時間内を滑るように移動をさせたい

#3

投稿記事 by シエル » 15年前

はいどうぞ。一瞬で作ったから、まともな形にして使ってください。

#include "DxLib.h"

//
/*********************** メイン ****************************/

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){


if(ChangeWindowMode(TRUE)||DxLib_Init()||SetDrawScreen(DX_SCREEN_BACK))return -1;

int x = 320;
int y = 240;
int vx =4 ;
float speed = 0.1f;
int slip_time = 20;
int SlipTime = 0;
char KeyBuf[ 256 ] ;
int flag=3;

while(!ScreenFlip()&&!ProcessMessage()&&!ClearDrawScreen()&&!CheckHitKey(KEY_INPUT_ESCAPE)){
GetHitKeyStateAll( KeyBuf ) ;





// キー入力のあと,SlipTime にsliptimeを入れる
if(KeyBuf[KEY_INPUT_LEFT] == 1){
SlipTime = slip_time;
// vxをキャラクターのxに加算する
x-=vx;
flag=0;
}else if(KeyBuf[KEY_INPUT_RIGHT] == 1){
SlipTime = slip_time;
// vxをキャラクターのxに加算する
flag=1;
x+=vx;
}

if(flag){
x+=SlipTime;
if(SlipTime > 0)
SlipTime--;
}else{
x-=SlipTime;
if(SlipTime>0)
SlipTime--;
}

// はみ出し処理
if(x < 0) x =0;
if(x > 640-32) x = 640-32;

//*_ キャラクター
DrawBox(x,y,x+32,y+32,GetColor(0,0,255),TRUE) ;

Sleep(16);
}
DxLib_End();return 0;
} 画像

tuya

Re:キャラクターに時間内を滑るように移動をさせたい

#4

投稿記事 by tuya » 15年前

早速のお返事ありがとうございました。
とても参考になりました。

本当にありがとうございます

閉鎖

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