を投稿したものです。
あれから、マウスを追いかけるところまでのプログラムが書けました。
そのあと、マウスをクリックしている間は一定加速度で加速していき、ある速度以上は加速せず一定速度で移動し、クリックを離すと、一定加速度で減速するプログラムを作ったのですが、一回目クリックすると加速しながら移動するのですが、減速ができません。
ソース載せておきます。
main.ccp
define GLOBAL_INSTANCE
#include "GV.h"
//ループで必ず行う三大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す。
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
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(ProcessLoop()==0){//メインループ
switch(func_state){
case 0:
load(); //データロード
first_ini();//初回の初期化
func_state=100;
break;
case 100:
ch_speed();
move();
graph_main();//描画メイン
break;
default:
printfDx("不明なfunc_state\n");
break;
}
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip(); //裏画面反映
}
DxLib_End();
return 0;
}
#include "GV.h"
#include <math.h>
float ms_angle=0;
//角度のラジアンを求める関数
float angle(){
GetMousePoint(&ms_x,&ms_y);
if((GetMouseInput() & MOUSE_INPUT_LEFT) != 0){
ms_angle = (float)atan2(ms_y-ch.y,ms_x-ch.x);
}
return ms_angle;
}
//移動方向
void move(){
if((GetMouseInput() & MOUSE_INPUT_LEFT) != 0){
ch.x += cos(ms_angle) * ch.speed;
ch.y += sin(ms_angle) * ch.speed;
}
}
#include "GV.h"
void ch_speed(){
if(ch.speed >= 0 && ch.speed < 7 ){
ch.speed += 0.01;
}
if((GetMouseInput() & MOUSE_INPUT_LEFT) == 0){
if(ch.speed >= 0){
ch.speed -= 0.01;
}
}
}
#include "GV.h"
void graph_ch(){
DrawRotaGraphF(ch.x,ch.y,1.0f,angle(),img_ch,TRUE);
}
void graph_main(){
graph_ch();
DrawFormatString(0,0, GetColor(225,225,225),"変数ch.speedの値は%dです\n",ch.speed);
}
すべてのソースファイルは載せていませんが、描画系はこれらのソースファイルに書かれています。
たぶん、ch_speed()が悪いんだと思いますが、どう直したらいいかわかりません。
残りのソースファイルも必要であれば載せます。