質問編集履歴

5

文章を修正しました。

2021/02/22 11:18

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 素早く動かすと当たり判定がおかしくなる原因が知りたい。 dxlib
1
+ [Dxlib]素早く動かすと当たり判定がおかしくなる原因が知りたい。GitHub全ソースあり
test CHANGED
@@ -6,6 +6,16 @@
6
6
 
7
7
 
8
8
 
9
+ **試したこと**
10
+
11
+ キー入力は問題りませんでした。
12
+
13
+
14
+
15
+ **その他**
16
+
17
+ ゆっくりと動かすと問題なのですが。 素早くキーを押し変えると問題が発生します。
18
+
9
19
 
10
20
 
11
21
 

4

提示文章をコードを修正

2021/02/22 11:17

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,14 @@
1
+ 提示コードの///コメント部内部のコードですが当たり判定が以下の画像のような挙動をしてしまい上手く実装出来ません。これはどうしたらいいのでしょうか?
2
+
1
- 提示画像のよう壁に当たってキーを離してすぐに下に動かすとおかくはなります。提示コードの////コメント部のコードですが
3
+ 「左側衝突し補正されて左キーを離してすぐに下キーを押押すと二枚目のよう少しめり込み、キーを離すと上に補正されてしまいます。
2
-
4
+
3
- **キーを左に押て離てすぐ上下に動すと当たり判定かしなりわけわからな方向に移動してし**は何が原因なのでしょうか?**素早く**というところで意味がわかりません。
5
+ これはどうたらいいのでょうそらコメント内部コードが悪と思うのですが何度見も正しいす。どうすばいいのでしょうか?
4
-
5
-
6
-
7
- 順序は確認しました。またキーは同時押し出来ないです。確認しました。まためり込み量を修正する関数はvoid Player::FixPos(glm::ivec2 pos)部です。
6
+
7
+
8
+
9
+
10
+
11
+
8
12
 
9
13
 
10
14
 
@@ -14,9 +18,15 @@
14
18
 
15
19
 
16
20
 
17
-
18
-
19
- ![イメージ説明](b511b295fe7cbc122072793d4c3be871.jpeg)
21
+ ![イメージ説明](5b1ab883189c55ddf8fbd3066519b86d.jpeg)
22
+
23
+ ![イメージ説明](1f7f8545a351bb0d4f1d18289175b6e6.jpeg)
24
+
25
+ ![イメージ説明](764e45264fe105b173f68fc8a6cc74cb.jpeg)
26
+
27
+
28
+
29
+
20
30
 
21
31
  2Dアクションゲーム
22
32
 

3

文章を修正しました。

2021/02/22 10:16

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,12 @@
1
1
  提示画像のように壁に当たってキーを離してすぐに上下に動かすとおかしくはなります。提示コードの////コメント部のコードですが
2
2
 
3
- **キーを左に押して離してすぐ上下に動かすと当たり判定おかしくなりわけのわからない方向に移動してしまいます**。これは何が原因なのでしょうか?**素早く**というところで意味がわかりません。順序などは確認しました。またキーは同時押し出来ないです。
3
+ **キーを左に押して離してすぐ上下に動かすと当たり判定おかしくなりわけのわからない方向に移動してしまいます**。これは何が原因なのでしょうか?**素早く**というところで意味がわかりません。
4
+
5
+
6
+
7
+ 順序は確認しました。またキーは同時押し出来ないです。確認しました。まためり込み量を修正する関数はvoid Player::FixPos(glm::ivec2 pos)部です。
8
+
9
+
4
10
 
5
11
 
6
12
 

2

文章を編集しました。

2021/02/22 09:02

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,12 @@
1
1
  提示画像のように壁に当たってキーを離してすぐに上下に動かすとおかしくはなります。提示コードの////コメント部のコードですが
2
2
 
3
- **キーを左に押して離してすぐ上下に動かすと当たり判定おかしくなりわけのわからない方向に移動してしまいます**。これは何が原因なのでしょうか?
3
+ **キーを左に押して離してすぐ上下に動かすと当たり判定おかしくなりわけのわからない方向に移動してしまいます**。これは何が原因なのでしょうか?**素早く**というところで意味がわかりません。順序などは確認しました。またキーは同時押し出来ないです。
4
-
5
-
6
-
4
+
5
+
6
+
7
- **素早く**というところで意味がわかりません。順序などは確認しました。またキーは同時押し出来ないです。
7
+ Github: https://github.com/Shigurechan/ActionGame
8
+
9
+
8
10
 
9
11
 
10
12
 
@@ -16,6 +18,12 @@
16
18
 
17
19
 
18
20
 
21
+
22
+
23
+
24
+
25
+
26
+
19
27
  ```cpp
20
28
 
21
29
  #include "Input.hpp"

1

提示コードを修正

2021/02/22 05:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,887 +1,803 @@
1
- 提示画像のように壁に当たってキーを離して上下に動かすとおかしくはならないのですが 
1
+ 提示画像のように壁に当たってキーを離してすぐに上下に動かすとおかしくはなります。提示コード////コメント部のコードですが
2
2
 
3
3
  **キーを左に押して離してすぐ上下に動かすと当たり判定おかしくなりわけのわからない方向に移動してしまいます**。これは何が原因なのでしょうか?
4
4
 
5
+
6
+
5
7
  **素早く**というところで意味がわかりません。順序などは確認しました。またキーは同時押し出来ないです。
6
8
 
7
9
 
8
10
 
11
+ ![イメージ説明](b511b295fe7cbc122072793d4c3be871.jpeg)
12
+
13
+ 2Dアクションゲーム
14
+
9
- **#define CELL ((int)48)**です。
15
+ **#define CELL ((int)48)**
10
-
11
-
12
-
13
-
14
-
15
- ![イメージ説明](f5f059168215bd6c467b5d71509a14a0.jpeg)
16
-
17
-
18
-
19
-
20
-
21
-
22
16
 
23
17
 
24
18
 
25
19
  ```cpp
26
20
 
21
+ #include "Input.hpp"
22
+
23
+
24
+
25
+ // コンストラクタ
26
+
27
+ Input::Input()
28
+
29
+ {
30
+
31
+ //キー状態配列を初期化
32
+
33
+ for (int i = 0; i < 256; i++)
34
+
35
+ {
36
+
37
+ Key[i] = 0;
38
+
39
+ }
40
+
41
+ }
42
+
43
+
44
+
45
+ //キー入力状態を更新
46
+
47
+ void Input::Update()
48
+
49
+ {
50
+
51
+ char tmpKey[256]; // 現在のキーの入力状態を格納する
52
+
53
+ GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る
54
+
55
+ for (int i = 0; i < 256; i++) {
56
+
57
+ if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら
58
+
59
+ Key[i]++; // 加算
60
+
61
+ }
62
+
63
+ else {
64
+
65
+ // 押されていなければ
66
+
67
+ Key[i] = 0; // 0にする
68
+
69
+ }
70
+
71
+ }
72
+
73
+ }
74
+
75
+
76
+
77
+ //キーを押した時だけ
78
+
79
+ bool Input::getKeyDown(unsigned char KeyCode)
80
+
81
+ {
82
+
83
+ if (Key[KeyCode] == 1)
84
+
85
+ {
86
+
87
+ return true;
88
+
89
+ }
90
+
91
+ else
92
+
93
+ {
94
+
95
+ return false;
96
+
97
+ }
98
+
99
+ }
100
+
101
+
102
+
103
+ //キーを押している時
104
+
105
+ int Input::getKeyDownHold(unsigned char KeyCode)
106
+
107
+ {
108
+
109
+ //printf("あああ\n");
110
+
111
+ return Key[KeyCode];
112
+
113
+ }
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+ ```
122
+
123
+
124
+
125
+ ```cpp
126
+
27
- #include "Game_Scene.hpp"
127
+ #include "Player.hpp"
28
128
 
29
129
 
30
130
 
31
131
  //コンストラクタ
32
132
 
33
- Game_Scene::Game_Scene(Scene_Type t,Entry *e) : Scene_base(t,e)
133
+ Player::Player(Entry* e) : Actor(e)
34
-
134
+
35
- {
135
+ {
36
-
37
- Owner = e;
136
+
38
-
39
-
40
-
41
-
42
-
43
- //文字数の関係で省略
137
+
44
-
45
-
46
-
47
-
48
-
138
+
49
- }
139
+ }
140
+
141
+
142
+
143
+ //座標を修正
144
+
145
+ void Player::FixPos(glm::ivec2 pos)
146
+
147
+ {
148
+
149
+ if (mVector == VECTOR_UP)
150
+
151
+ {
152
+
153
+ printf("UP\n");
154
+
155
+ mPosition.y = pos.y + CELL + CELL / 2;
156
+
157
+ }
158
+
159
+ else if (mVector == VECTOR_DOWN)
160
+
161
+ {
162
+
163
+ printf("DOWN\n");
164
+
165
+
166
+
167
+ mPosition.y = pos.y - (CELL / 2);
168
+
169
+ }
170
+
171
+ else if (mVector == VECTOR_LEFT)
172
+
173
+ {
174
+
175
+ printf("LEFT\n");
176
+
177
+
178
+
179
+ mPosition.x = pos.x + (CELL + CELL / 2);
180
+
181
+ }
182
+
183
+ else if (mVector == VECTOR_RIGHT)
184
+
185
+ {
186
+
187
+ printf("RIGHT\n");
188
+
189
+
190
+
191
+ mPosition.x = pos.x - (CELL / 2);
192
+
193
+ }
194
+
195
+ else {
196
+
197
+ printf("None\n");
198
+
199
+ }
200
+
201
+
202
+
203
+ }
204
+
205
+
206
+
207
+
208
+
209
+
50
210
 
51
211
 
52
212
 
53
213
  //更新
54
214
 
55
- void Game_Scene::Update()
56
-
57
- {
58
-
59
- //バトル
60
-
61
- if (player->getIsMenu() == false)
62
-
63
- {
64
-
65
-
66
-
67
- stage->ScrollMap(*player); //画面スクロール
68
-
69
- player->Update(); //イヤー更新
70
-
71
- stage->ColPlayer(*player); //プレイヤーとマップとの当たり判定
72
-
73
-
74
-
75
- stage->Update(); //ステージ更新
76
-
77
- enemy_mng->Update(); //エネミ更新
78
-
79
-
80
-
81
- stage->ColBullet(player->getBullet()); //バレットとマップとの当たり判定
82
-
83
- stage->ColEnemy(enemy_mng->getEnemy());
84
-
85
- }
86
-
87
- else
88
-
89
- {
90
-
91
- //ショップ画面
92
-
93
- if (shop->getState() == true)
215
+ void Player::Update()
216
+
217
+ {
218
+
219
+ DrawFormatString(0,0,GetColor(0,255,0),"Position: %d , %d ",mPosition.x,mPosition.y);
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+ //printf("%d\n",mSpeed_Max);
228
+
229
+ Bullet_Update(); //ットを更新
230
+
231
+ Player_Update(); //プレイヤー更新
232
+
233
+ }
234
+
235
+
236
+
237
+ //ステタスを設定
238
+
239
+ void Player::set_Bulid(ItemData data)
240
+
241
+ {
242
+
243
+
244
+
245
+ mSpeed_Max += data.mSpeed_Max;
246
+
247
+
248
+
249
+ HP_Max += data.HP_Max;
250
+
251
+ HP += data.HP_Rec;
252
+
253
+ HP_autoRec += data.HP_autoRec;
254
+
255
+
256
+
257
+ Attack += data.Attack;
258
+
259
+
260
+
261
+ Coin += data.Coin;
262
+
263
+
264
+
265
+ }
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+ //キー入力部
274
+
275
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
276
+
277
+ //プレイヤー 更新
278
+
279
+ void Player::Player_Update()
280
+
281
+ {
282
+
283
+ //printf("いいいい\n");
284
+
285
+
286
+
287
+
288
+
289
+ mSpeed = mSpeed_Max;
290
+
291
+ //キー入力
292
+
293
+ if (Owner->InputKey->getKeyDownHold(KEY_INPUT_LEFT) > 0)
294
+
295
+ {
296
+
297
+ mVector = VECTOR_LEFT; //方向
298
+
299
+ }
300
+
301
+ else if (Owner->InputKey->getKeyDownHold(KEY_INPUT_RIGHT) > 0)
302
+
303
+ {
304
+
305
+ mVector = VECTOR_RIGHT; //方向
306
+
307
+ }
308
+
309
+ else if (Owner->InputKey->getKeyDownHold(KEY_INPUT_UP) > 0)
310
+
311
+ {
312
+
313
+ mVector = VECTOR_UP; //方向
314
+
315
+ }
316
+
317
+ else if (Owner->InputKey->getKeyDownHold(KEY_INPUT_DOWN) > 0)
318
+
319
+ {
320
+
321
+ mVector = VECTOR_DOWN; //方向
322
+
323
+ }
324
+
325
+ else {
326
+
327
+ mSpeed = 0;
328
+
329
+ }
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+ //当たり判定
344
+
345
+
346
+
347
+ //スプライトの中心からのため修正
348
+
349
+ glm::ivec2 pos = mPosition;
350
+
351
+ pos.x += -(CELL / 2);
352
+
353
+ pos.y += -(CELL / 2);
354
+
355
+ mCol.setPosition(pos);
356
+
357
+ mCol.setSize(mSize);
358
+
359
+ mCol.setTrigger(false);
360
+
361
+ mCol.setVector(mVector);
362
+
363
+
364
+
365
+
366
+
367
+ }
368
+
369
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
370
+
371
+ //描画
372
+
373
+ void Player::Draw()
374
+
375
+ {
376
+
377
+ Bullet_Draw(); //バレット描画
378
+
379
+ Player_Draw(); //プレイヤー描画
380
+
381
+ }
382
+
383
+
384
+
385
+
386
+
387
+ //プレイヤー 描画
388
+
389
+ void Player::Player_Draw()
390
+
391
+ {
392
+
393
+ //方向
394
+
395
+ if (mVector == VECTOR_UP)
396
+
397
+ {
398
+
399
+ DrawRotaGraph(mPosition.x, mPosition.y, 1.0, 0, mSprite, true, false);
400
+
401
+ }
402
+
403
+ else if (mVector == VECTOR_DOWN)
404
+
405
+ {
406
+
407
+ DrawRotaGraph(mPosition.x, mPosition.y, 1.0, PI, mSprite, true, false);
408
+
409
+ }
410
+
411
+ else if (mVector == VECTOR_LEFT)
412
+
413
+ {
414
+
415
+ DrawRotaGraph(mPosition.x, mPosition.y, 1.0, -(PI * 2) / 4, mSprite, true, false);
416
+
417
+ }
418
+
419
+ else if (mVector == VECTOR_RIGHT)
420
+
421
+ {
422
+
423
+ DrawRotaGraph(mPosition.x, mPosition.y, 1.0, (PI * 2) / 4, mSprite, true, false);
424
+
425
+ }
426
+
427
+
428
+
429
+ DrawPixel(mPosition.x, mPosition.y,GetColor(0,255,0));
430
+
431
+ }
432
+
433
+
434
+
435
+
436
+
437
+ //バレット 描画
438
+
439
+ void Player::Bullet_Draw()
440
+
441
+ {
442
+
443
+ for (std::vector<Bullet>::iterator itr = mBullet->begin(); itr != mBullet->end(); itr++)
444
+
445
+ {
446
+
447
+ itr->Draw(); //バレット描画
448
+
449
+ }
450
+
451
+ }
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+ //デストラクタ
460
+
461
+ Player::~Player()
462
+
463
+ {
464
+
465
+
466
+
467
+ }
468
+
469
+
470
+
471
+ ```
472
+
473
+
474
+
475
+
476
+
477
+ ```cpp
478
+
479
+ #include "Stage.hpp"
480
+
481
+
482
+
483
+ //コンストラクタ
484
+
485
+ Stage::Stage(Entry* e)
486
+
487
+ {
488
+
489
+
490
+
491
+ }
492
+
493
+
494
+
495
+ //更新
496
+
497
+
498
+
499
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
500
+
501
+ //プレイヤーとの当たり判定
502
+
503
+ void Stage::ColPlayer(Player &player)
504
+
505
+ {
506
+
507
+ for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
508
+
509
+ {
510
+
511
+ if (Box_Collision::Intersect(itr->mCol,player.mCol) == true)
94
512
 
95
513
  {
96
514
 
97
- shop->Update(*player);
515
+ switch (itr->mCol.getObjectType())
516
+
517
+ {
518
+
519
+ //ショップ
520
+
521
+ case StageObjectType::Shop:
522
+
523
+ {
524
+
525
+ if (Owner->InputKey->getKeyDown(KEY_INPUT_P) == true)
526
+
527
+ {
528
+
529
+ player.setIsMenu(true);
530
+
531
+ player.FixPos(itr->mCol.getPosition());
532
+
533
+ }
534
+
535
+ }
536
+
537
+ break;
538
+
539
+
540
+
541
+ //レンガとの当たり判定
542
+
543
+ case StageObjectType::Brick:
544
+
545
+ {
546
+
547
+ player.FixPos(itr->mCol.getPosition());
548
+
549
+ }
550
+
551
+ break;
552
+
553
+
554
+
555
+ //ブロックとの当たり判定
556
+
557
+ case StageObjectType::Block:
558
+
559
+ {
560
+
561
+
562
+
563
+ player.FixPos(itr->mCol.getPosition());
564
+
565
+ }
566
+
567
+ break;
568
+
569
+ }
98
570
 
99
571
  }
100
572
 
573
+ }
574
+
575
+ }
576
+
577
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
578
+
579
+
580
+
581
+
582
+
583
+ //画面スクロール
584
+
585
+ void Stage::ScrollMap(Player& player)
586
+
587
+ {
588
+
589
+ //左右移動
590
+
591
+ if (player.getPosition().x > (SCREEN_WIDTH - 100) + player.getSpeed() && player.getVector() == VECTOR_RIGHT) {
592
+
593
+ printf("Right\n");
594
+
595
+
596
+
597
+ for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
598
+
599
+ {
600
+
601
+
602
+
101
- else {
603
+ glm::ivec2 pos;
604
+
102
-
605
+ pos = itr->getPosition();
606
+
607
+ pos.x += -player.getSpeed();
608
+
609
+
610
+
103
- player->setIsMenu(false);
611
+ itr->setPosition(pos);
104
-
105
- shop = std::make_shared <Shop>(Owner);
106
612
 
107
613
  }
108
614
 
109
615
  }
110
616
 
111
-
112
-
113
-
114
-
115
-
116
-
117
- }
118
-
119
-
120
-
121
- //描画
122
-
123
- void Game_Scene::Draw()
124
-
125
- {
126
-
127
-
128
-
129
- player->Draw(); //プレイヤー描画
130
-
131
- stage->Draw(); //ステージ描画
132
-
133
- //enemy_mng->Draw();
134
-
135
-
136
-
137
- //ショップ画面
138
-
139
- if (player->getIsMenu() == true)
140
-
141
- {
142
-
143
- shop->Draw();
144
-
145
- }
146
-
147
-
148
-
149
-
150
-
151
-
152
-
153
- }
617
+ else if (player.getPosition().x < ( 100 ) + player.getSpeed() && player.getVector() == VECTOR_LEFT)
618
+
619
+ {
620
+
621
+ printf("Left\n");
622
+
623
+ for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
624
+
625
+ {
626
+
627
+ glm::ivec2 pos;
628
+
629
+ pos = itr->getPosition();
630
+
631
+ pos.x += player.getSpeed();
632
+
633
+
634
+
635
+ itr->setPosition(pos);
636
+
637
+ }
638
+
639
+
640
+
641
+ //上下移動
642
+
643
+ }else if (player.getPosition().y > (SCREEN_HEIGHT - 100) + player.getSpeed() && player.getVector() == VECTOR_DOWN) {
644
+
645
+ printf("Dwon\n");
646
+
647
+
648
+
649
+ for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
650
+
651
+ {
652
+
653
+
654
+
655
+ glm::ivec2 pos;
656
+
657
+ pos = itr->getPosition();
658
+
659
+ pos.y += -player.getSpeed();
660
+
661
+
662
+
663
+ itr->setPosition(pos);
664
+
665
+ }
666
+
667
+ }
668
+
669
+ else if (player.getPosition().y < (100) + player.getSpeed() && player.getVector() == VECTOR_UP)
670
+
671
+ {
672
+
673
+ printf("Up\n");
674
+
675
+ for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
676
+
677
+ {
678
+
679
+ glm::ivec2 pos;
680
+
681
+ pos = itr->getPosition();
682
+
683
+ pos.y += player.getSpeed();
684
+
685
+
686
+
687
+ itr->setPosition(pos);
688
+
689
+ }
690
+
691
+ }
692
+
693
+ else {
694
+
695
+
696
+
697
+
698
+
699
+ //移動
700
+
701
+ int speed = player.getSpeed();
702
+
703
+ glm::ivec2 vec = player.getVector();
704
+
705
+ glm::ivec2 pos = player.getPosition();
706
+
707
+ pos.x += vec.x * speed;
708
+
709
+ pos.y += vec.y * speed;
710
+
711
+
712
+
713
+ player.setPosition(pos);
714
+
715
+ }
716
+
717
+ }
718
+
719
+
720
+
721
+ //エネミーとの当たり判定
722
+
723
+ void Stage::ColEnemy(std::shared_ptr<std::vector<Enemy>> enemy)
724
+
725
+ {
726
+
727
+ for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
728
+
729
+ {
730
+
731
+ MapChip chip = *itr;
732
+
733
+ for (std::vector<Enemy>::iterator itr = enemy->begin(); itr != enemy->end(); itr++)
734
+
735
+ {
736
+
737
+ //交差判定
738
+
739
+ if (Box_Collision::Intersect(chip.mCol, itr->mCol) == true )
740
+
741
+ {
742
+
743
+ switch (chip.mCol.getObjectType())
744
+
745
+ {
746
+
747
+
748
+
749
+ //ブロック
750
+
751
+ case StageObjectType::Block:
752
+
753
+ {
754
+
755
+ itr->FixPos(chip.mCol.getPosition());
756
+
757
+ itr->setMove_Rand();
758
+
759
+ }
760
+
761
+
762
+
763
+
764
+
765
+ }
766
+
767
+ }
768
+
769
+ }
770
+
771
+ }
772
+
773
+
774
+
775
+ }
776
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
154
786
 
155
787
 
156
788
 
157
789
  //デストラクタ
158
790
 
159
- Game_Scene::~Game_Scene()
791
+ Stage::~Stage()
160
-
792
+
161
- {
793
+ {
162
-
163
-
164
-
794
+
795
+
796
+
165
- }
797
+ }
798
+
799
+
166
800
 
167
801
 
168
802
 
169
803
  ```
170
-
171
-
172
-
173
- ```cpp
174
-
175
- #include "MapChip.hpp"
176
-
177
-
178
-
179
- //コンストラクタ
180
-
181
- MapChip::MapChip(StageObjectType t, glm::ivec2 pos, glm::ivec2 size,int handle) : Actor(nullptr)
182
-
183
- {
184
-
185
-
186
-
187
-
188
-
189
- //文字数の関係で省略
190
-
191
-
192
-
193
-
194
-
195
-
196
-
197
- }
198
-
199
-
200
-
201
-
202
-
203
- void MapChip::Update()
204
-
205
- {
206
-
207
- //当たり判定
208
-
209
- mCol.setPosition(mPosition);
210
-
211
- mCol.setSize(mSize);
212
-
213
- mCol.setTrigger(true);
214
-
215
-
216
-
217
-
218
-
219
- }
220
-
221
-
222
-
223
- void MapChip::Draw()
224
-
225
- {
226
-
227
- DrawGraph(mPosition.x, mPosition.y,mSprite,true);
228
-
229
- }
230
-
231
-
232
-
233
-
234
-
235
- //デストラクタ
236
-
237
- MapChip::~MapChip()
238
-
239
- {
240
-
241
-
242
-
243
- }
244
-
245
-
246
-
247
- ```
248
-
249
-
250
-
251
-
252
-
253
- ```cpp
254
-
255
- #include "Player.hpp"
256
-
257
-
258
-
259
- //コンストラクタ
260
-
261
- Player::Player(Entry* e) : Actor(e)
262
-
263
- {
264
-
265
- //文字数の関係で省略
266
-
267
- }
268
-
269
-
270
-
271
- //座標を修正
272
-
273
- void Player::FixPos(glm::ivec2 pos)
274
-
275
- {
276
-
277
- if (mVector == VECTOR_UP)
278
-
279
- {
280
-
281
- printf("UP\n");
282
-
283
- mPosition.y = pos.y + CELL + CELL / 2;
284
-
285
- }
286
-
287
- else if (mVector == VECTOR_DOWN)
288
-
289
- {
290
-
291
- printf("DOWN\n");
292
-
293
-
294
-
295
- mPosition.y = pos.y - (CELL / 2);
296
-
297
- }
298
-
299
- else if (mVector == VECTOR_LEFT)
300
-
301
- {
302
-
303
- printf("LEFT\n");
304
-
305
-
306
-
307
- mPosition.x = pos.x + (CELL + CELL / 2);
308
-
309
- }
310
-
311
- else if (mVector == VECTOR_RIGHT)
312
-
313
- {
314
-
315
- printf("RIGHT\n");
316
-
317
-
318
-
319
- mPosition.x = pos.x - (CELL / 2);
320
-
321
- }
322
-
323
- else {
324
-
325
- printf("None\n");
326
-
327
- }
328
-
329
-
330
-
331
- }
332
-
333
-
334
-
335
-
336
-
337
-
338
-
339
-
340
-
341
- int Player::getSpeed()
342
-
343
- {
344
-
345
- return mSpeed;
346
-
347
- }
348
-
349
-
350
-
351
- //更新
352
-
353
- void Player::Update()
354
-
355
- {
356
-
357
- DrawFormatString(0,0,GetColor(0,255,0),"Position: %d , %d ",mPosition.x,mPosition.y);
358
-
359
-
360
-
361
-
362
-
363
-
364
-
365
- //printf("%d\n",mSpeed_Max);
366
-
367
- Bullet_Update(); //バレットを更新
368
-
369
- Player_Update(); //プレイヤー更新
370
-
371
- }
372
-
373
-
374
-
375
- //ステータスを設定
376
-
377
- void Player::set_Bulid(ItemData data)
378
-
379
- {
380
-
381
-
382
-
383
- mSpeed_Max += data.mSpeed_Max;
384
-
385
-
386
-
387
- HP_Max += data.HP_Max;
388
-
389
- HP += data.HP_Rec;
390
-
391
- HP_autoRec += data.HP_autoRec;
392
-
393
-
394
-
395
- Attack += data.Attack;
396
-
397
-
398
-
399
- Coin += data.Coin;
400
-
401
-
402
-
403
- }
404
-
405
-
406
-
407
-
408
-
409
-
410
-
411
-
412
-
413
-
414
-
415
- //プレイヤー 更新
416
-
417
- void Player::Player_Update()
418
-
419
- {
420
-
421
- //printf("いいいい\n");
422
-
423
-
424
-
425
-
426
-
427
- mSpeed = mSpeed_Max;
428
-
429
- //キー入力
430
-
431
- if (Owner->InputKey->getKeyDownHold(KEY_INPUT_LEFT) > 0)
432
-
433
- {
434
-
435
- mVector = VECTOR_LEFT; //方向
436
-
437
- }
438
-
439
- else if (Owner->InputKey->getKeyDownHold(KEY_INPUT_RIGHT) > 0)
440
-
441
- {
442
-
443
- mVector = VECTOR_RIGHT; //方向
444
-
445
- }
446
-
447
- else if (Owner->InputKey->getKeyDownHold(KEY_INPUT_UP) > 0)
448
-
449
- {
450
-
451
- mVector = VECTOR_UP; //方向
452
-
453
- }
454
-
455
- else if (Owner->InputKey->getKeyDownHold(KEY_INPUT_DOWN) > 0)
456
-
457
- {
458
-
459
- mVector = VECTOR_DOWN; //方向
460
-
461
- }
462
-
463
- else {
464
-
465
- mSpeed = 0;
466
-
467
- }
468
-
469
-
470
-
471
-
472
-
473
-
474
-
475
-
476
-
477
-
478
-
479
-
480
-
481
- //当たり判定
482
-
483
-
484
-
485
- //スプライトの中心からのため修正
486
-
487
- glm::ivec2 pos = mPosition;
488
-
489
- pos.x += -(CELL / 2);
490
-
491
- pos.y += -(CELL / 2);
492
-
493
- mCol.setPosition(pos);
494
-
495
- mCol.setSize(mSize);
496
-
497
- mCol.setTrigger(false);
498
-
499
- mCol.setVector(mVector);
500
-
501
-
502
-
503
-
504
-
505
- }
506
-
507
-
508
-
509
- //描画
510
-
511
- void Player::Draw()
512
-
513
- {
514
-
515
- Bullet_Draw(); //バレット描画
516
-
517
- Player_Draw(); //プレイヤー描画
518
-
519
- }
520
-
521
-
522
-
523
-
524
-
525
- //プレイヤー 描画
526
-
527
- void Player::Player_Draw()
528
-
529
- {
530
-
531
- //方向
532
-
533
- if (mVector == VECTOR_UP)
534
-
535
- {
536
-
537
- DrawRotaGraph(mPosition.x, mPosition.y, 1.0, 0, mSprite, true, false);
538
-
539
- }
540
-
541
- else if (mVector == VECTOR_DOWN)
542
-
543
- {
544
-
545
- DrawRotaGraph(mPosition.x, mPosition.y, 1.0, PI, mSprite, true, false);
546
-
547
- }
548
-
549
- else if (mVector == VECTOR_LEFT)
550
-
551
- {
552
-
553
- DrawRotaGraph(mPosition.x, mPosition.y, 1.0, -(PI * 2) / 4, mSprite, true, false);
554
-
555
- }
556
-
557
- else if (mVector == VECTOR_RIGHT)
558
-
559
- {
560
-
561
- DrawRotaGraph(mPosition.x, mPosition.y, 1.0, (PI * 2) / 4, mSprite, true, false);
562
-
563
- }
564
-
565
-
566
-
567
- DrawPixel(mPosition.x, mPosition.y,GetColor(0,255,0));
568
-
569
- }
570
-
571
-
572
-
573
-
574
-
575
-
576
-
577
-
578
-
579
-
580
-
581
-
582
-
583
-
584
-
585
- ```
586
-
587
-
588
-
589
- ```cpp
590
-
591
- #include "Stage.hpp"
592
-
593
-
594
-
595
- //コンストラクタ
596
-
597
- Stage::Stage(Entry* e)
598
-
599
- {
600
-
601
-
602
-
603
- }
604
-
605
-
606
-
607
- //更新
608
-
609
- void Stage::Update()
610
-
611
- {
612
-
613
- for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
614
-
615
- {
616
-
617
- itr->Update();
618
-
619
- }
620
-
621
- }
622
-
623
-
624
-
625
- //描画
626
-
627
- void Stage::Draw()
628
-
629
- {
630
-
631
- for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
632
-
633
- {
634
-
635
- itr->Draw();
636
-
637
- }
638
-
639
- }
640
-
641
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
642
-
643
- //プレイヤーとの当たり判定
644
-
645
- void Stage::ColPlayer(Player &player)
646
-
647
- {
648
-
649
- for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
650
-
651
- {
652
-
653
- if (Box_Collision::Intersect(itr->mCol,player.mCol) == true)
654
-
655
- {
656
-
657
- switch (itr->mCol.getObjectType())
658
-
659
- {
660
-
661
- //ショップ
662
-
663
- case StageObjectType::Shop:
664
-
665
- {
666
-
667
- if (Owner->InputKey->getKeyDown(KEY_INPUT_P) == true)
668
-
669
- {
670
-
671
- player.setIsMenu(true);
672
-
673
- player.FixPos(itr->mCol.getPosition());
674
-
675
- }
676
-
677
- }
678
-
679
- break;
680
-
681
-
682
-
683
- //レンガとの当たり判定
684
-
685
- case StageObjectType::Brick:
686
-
687
- {
688
-
689
- player.FixPos(itr->mCol.getPosition());
690
-
691
- }
692
-
693
- break;
694
-
695
-
696
-
697
- //ブロックとの当たり判定
698
-
699
- case StageObjectType::Block:
700
-
701
- {
702
-
703
-
704
-
705
- player.FixPos(itr->mCol.getPosition());
706
-
707
- }
708
-
709
- break;
710
-
711
- }
712
-
713
- }
714
-
715
- }
716
-
717
- }
718
-
719
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
720
-
721
-
722
-
723
-
724
-
725
- //画面スクロール
726
-
727
- void Stage::ScrollMap(Player& player)
728
-
729
- {
730
-
731
- //左右移動
732
-
733
- if (player.getPosition().x > (SCREEN_WIDTH - 100) + player.getSpeed() && player.getVector() == VECTOR_RIGHT) {
734
-
735
- printf("Right\n");
736
-
737
-
738
-
739
- for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
740
-
741
- {
742
-
743
-
744
-
745
- glm::ivec2 pos;
746
-
747
- pos = itr->getPosition();
748
-
749
- pos.x += -player.getSpeed();
750
-
751
-
752
-
753
- itr->setPosition(pos);
754
-
755
- }
756
-
757
- }
758
-
759
- else if (player.getPosition().x < ( 100 ) + player.getSpeed() && player.getVector() == VECTOR_LEFT)
760
-
761
- {
762
-
763
- printf("Left\n");
764
-
765
- for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
766
-
767
- {
768
-
769
- glm::ivec2 pos;
770
-
771
- pos = itr->getPosition();
772
-
773
- pos.x += player.getSpeed();
774
-
775
-
776
-
777
- itr->setPosition(pos);
778
-
779
- }
780
-
781
-
782
-
783
- //上下移動
784
-
785
- }else if (player.getPosition().y > (SCREEN_HEIGHT - 100) + player.getSpeed() && player.getVector() == VECTOR_DOWN) {
786
-
787
- printf("Dwon\n");
788
-
789
-
790
-
791
- for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
792
-
793
- {
794
-
795
-
796
-
797
- glm::ivec2 pos;
798
-
799
- pos = itr->getPosition();
800
-
801
- pos.y += -player.getSpeed();
802
-
803
-
804
-
805
- itr->setPosition(pos);
806
-
807
- }
808
-
809
- }
810
-
811
- else if (player.getPosition().y < (100) + player.getSpeed() && player.getVector() == VECTOR_UP)
812
-
813
- {
814
-
815
- printf("Up\n");
816
-
817
- for (std::vector<MapChip>::iterator itr = mStage.begin(); itr != mStage.end(); itr++)
818
-
819
- {
820
-
821
- glm::ivec2 pos;
822
-
823
- pos = itr->getPosition();
824
-
825
- pos.y += player.getSpeed();
826
-
827
-
828
-
829
- itr->setPosition(pos);
830
-
831
- }
832
-
833
- }
834
-
835
- else {
836
-
837
-
838
-
839
-
840
-
841
- //移動
842
-
843
- int speed = player.getSpeed();
844
-
845
- glm::ivec2 vec = player.getVector();
846
-
847
- glm::ivec2 pos = player.getPosition();
848
-
849
- pos.x += vec.x * speed;
850
-
851
- pos.y += vec.y * speed;
852
-
853
-
854
-
855
- player.setPosition(pos);
856
-
857
- }
858
-
859
- }
860
-
861
-
862
-
863
-
864
-
865
-
866
-
867
-
868
-
869
-
870
-
871
-
872
-
873
- //デストラクタ
874
-
875
- Stage::~Stage()
876
-
877
- {
878
-
879
-
880
-
881
- }
882
-
883
-
884
-
885
-
886
-
887
- ```