質問編集履歴
1
ソースコードの追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
### 前提
|
5
5
|
速度のゲージが突き抜けます。バックをしたら後ろに突き抜けます。どうしてこうなるか教えてください。
|
6
|
-

|
7
7
|
|
8
8
|
### 発生している問題・エラーメッセージ
|
9
9
|
|
@@ -15,11 +15,116 @@
|
|
15
15
|
|
16
16
|
```ここに言語名を入力
|
17
17
|
ソースコード
|
18
|
+
//******************************************************************************
|
18
|
-
|
19
|
+
//
|
20
|
+
//
|
21
|
+
// scene_game
|
22
|
+
//
|
23
|
+
//
|
24
|
+
//******************************************************************************
|
19
25
|
|
26
|
+
//----< インクルード >-----------------------------------------------------------
|
27
|
+
#include "all.h"
|
28
|
+
|
29
|
+
//------< 定数 >----------------------------------------------------------------
|
30
|
+
#define SPEED_MAX 40.0f
|
31
|
+
#define SPEED_MIN -10.0f
|
32
|
+
//------< 変数 >----------------------------------------------------------------
|
33
|
+
int game_state = 0; // 状態
|
34
|
+
int game_timer = 0; // タイマー
|
35
|
+
// TODO:01 スプライトの用意
|
36
|
+
Sprite* sprCar, * sprCourse;
|
37
|
+
// TODO:03 位置用の変数を用意
|
38
|
+
float carPosX, carPosY;
|
39
|
+
//TODO:05 角度用の変数を用意
|
40
|
+
float angle;
|
41
|
+
// TODO:08 速度用の変数を用意
|
42
|
+
float speed;
|
43
|
+
// 初期設定
|
44
|
+
void game_init()
|
45
|
+
{
|
46
|
+
game_state = 0;
|
47
|
+
game_timer = 0;
|
48
|
+
}
|
49
|
+
// 更新処理
|
50
|
+
void game_update()
|
51
|
+
{
|
52
|
+
using namespace input;
|
53
|
+
|
54
|
+
switch (game_state)
|
55
|
+
{
|
56
|
+
case 0:
|
57
|
+
//////// 初期設定 ////////
|
58
|
+
sprCar = sprite_load(L"./Data/Images/up.png");
|
59
|
+
sprCourse = sprite_load(L"./Data/Images/course.png");
|
60
|
+
/*fallthrough*/
|
61
|
+
case 1:
|
62
|
+
//////// パラメータの設定 ////////
|
63
|
+
carPosX = 0;
|
64
|
+
carPosY =0;
|
65
|
+
angle = ToRadian(0);
|
66
|
+
speed = 0;
|
67
|
+
// ブレンドモードの設定
|
68
|
+
GameLib::setBlendMode(Blender::BS_ALPHA);
|
69
|
+
|
70
|
+
game_state++;
|
71
|
+
/*fallthrough*/
|
72
|
+
case 2:
|
73
|
+
//////// 通常時 ////////
|
74
|
+
|
75
|
+
debug::setString("[Operation]");
|
76
|
+
debug::setString("Rotate : A, D");
|
77
|
+
debug::setString("Accel : Up Arrow");
|
78
|
+
debug::setString("Brake : Down Arrow");
|
79
|
+
debug::setString("");
|
80
|
+
// TODO:06 A,Dキーで旋回
|
81
|
+
if (STATE(0) & PAD_LEFT) { angle += ToRadian(-3); }
|
82
|
+
if (STATE(0) & PAD_RIGHT) { angle += ToRadian(3); }
|
83
|
+
debug::setString("TODegree(angle):%f", ToDegree(angle));
|
84
|
+
// TODO:09 アクセル・ブレーキの実装
|
85
|
+
if (STATE(0) & PAD_TRG1) {
|
86
|
+
speed += 0.1f;
|
87
|
+
if (speed>SPEED_MAX) { speed = SPEED_MAX; }
|
88
|
+
}
|
89
|
+
else if (STATE(0) & PAD_TRG2) {
|
90
|
+
speed +=-0.2f;
|
91
|
+
if (speed<SPEED_MIN) { speed = SPEED_MIN; }
|
92
|
+
|
93
|
+
}
|
94
|
+
else { speed *= 0.99f; }
|
95
|
+
carPosX += sinf(angle) * speed;
|
96
|
+
carPosY += -cosf(angle) * speed;
|
97
|
+
debug::setString("speed%f", speed);
|
98
|
+
|
99
|
+
break;
|
100
|
+
}
|
101
|
+
|
102
|
+
game_timer++;
|
103
|
+
}
|
104
|
+
// 描画処理
|
105
|
+
void game_render()
|
106
|
+
{
|
107
|
+
|
108
|
+
GameLib::clear(0.2549f, 0.5569f, 0.1020f);
|
109
|
+
// TODO:10 コースの描画
|
110
|
+
sprite_render(sprCourse,
|
111
|
+
-carPosX, -carPosY, 2.0f, 2.0f, 0, 0, 3840, 1920, 1920, 960, ToRadian(0));
|
112
|
+
// TODO:11 車の描画
|
113
|
+
sprite_render(sprCar, SCREEN_W * 0.5f, SCREEN_H * 0.5f, 1.0f, 1.0f, 0, 0, 256, 256, 128, 128, angle);
|
114
|
+
debug::setString("carPosX:%f", carPosX);
|
115
|
+
debug::setString("carPosY:%f", carPosY);
|
116
|
+
// TODO:12 スピードゲージの描画
|
117
|
+
primitive::rect(70, 20, 800, 100, 0, 0, ToRadian(0), 0, 0, 0, 0.4f);
|
118
|
+
primitive::rect(72, 22, 796*speed , 96, 0, 0, ToRadian(0), 1, 0, 0, 0.6f);
|
119
|
+
}
|
120
|
+
// 終了処理
|
121
|
+
void game_deinit()
|
122
|
+
{
|
123
|
+
safe_delete(sprCar);
|
124
|
+
safe_delete(sprCourse);
|
125
|
+
}
|
20
126
|
### 試したこと
|
21
|
-
|
22
|
-
|
127
|
+
SPEED_MAXをいれてみたが、逆に突き抜けたままになった。
|
23
128
|
|
24
129
|
### 補足情報(FW/ツールのバージョンなど)
|
25
130
|
|