6 スピードメーターのサンプル
アナログメーターってどうやって作るの?
という質問があった時に回答用に作ったサンプルです。
オートマの隼(GSX-1300R)があったらこんな感じかなと思って作りました。
一応300キロ規制がされているような演出してあります。
操作方法:
Zキーを押しっぱなしにするとアクセルをひねったことになります。
#include "DxLib.h" #include <math.h> #define PI 3.141592 #define MIN_ANGLE (PI/3*2) #define MAX_ANGLE (PI/3*7) #define ADD_SPEED (PI/220) #define SUB_SPEED (PI/180) double angle; char Key[256]; void calc_angle(){ if(Key[KEY_INPUT_Z]!=0){ if(angle<MAX_ANGLE){ angle+=ADD_SPEED-ADD_SPEED*(0.97*(angle-MIN_ANGLE)/(MAX_ANGLE-MIN_ANGLE)); if(angle>=MAX_ANGLE) angle-=ADD_SPEED*3; } } else{ if(angle>MIN_ANGLE){ angle-=SUB_SPEED; if(angle<MIN_ANGLE) angle=MIN_ANGLE; } } } #define BUNKATU 30 void meter_graph(){ int i; double ang=MIN_ANGLE; for(i=0;i<=BUNKATU;i++){ DrawLine(320+210*cos(ang),280+210*sin(ang),320+180*cos(ang),280+180*sin(ang),GetColor(255,0,0)); ang+=(MAX_ANGLE-MIN_ANGLE)/BUNKATU; } } void graph(){ DrawLine(320,280,320+200*cos(angle),280+200*sin(angle),GetColor(255,255,255)); DrawFormatString(300-70,380,GetColor(0,255,255),"%5.1fkm/h",(angle-MIN_ANGLE)*57.6); } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ angle=MIN_ANGLE; if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); SetFontSize(36); while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && Key[KEY_INPUT_ESCAPE]==0){ calc_angle(); meter_graph(); graph(); ScreenFlip(); } DxLib_End(); return 0; }
- Remical Soft -