重力効果とコメントしている部分に「もしブロックにあたっていなかったら落下する」みたいな処理を作るのに
他クラスのマップ管理クラスの当たり判定メソッドを使って当たっているか毎回確認したいのですがどうすればいいのでしょうか?
Mapソースファイルの当たり判定関数(コメント部)でプレイヤーの座標を引数に入れて
当たっているかどうかを判定してあたっていなかったら重力でまた下に移動するという処理を作りたいです。
質問ですが全体を把握するためのGameクラスを作りそこにプレイヤーとマップ管理クラスを書いたがために
この問題にあたっているのですがこれはどうすれば解決できるのかが知りです。
そもそもこのコーディングが間違えたのかなと思うのですが
Player.cpp
1#include "Input.h" 2#include "Player.h" 3#include "DxLib.h" 4 5 6/*コンストラクタ*/ 7Player::Player(const char* str, int xx, int yy) :pos{xx,yy} 8{ 9 LoadDivGraph(str,7,7,1,64,64,g_handle); 10 11} 12 13/*計算更新*/ 14void Player::Update() 15{ 16 input_key(); 17 //gravity(); 18 19} 20 21/*描画更新*/ 22void Player::Draw_Update() 23{ 24 DrawFormatString(100,100,GetColor(255,255,255),"Debug"); 25 DrawGraph(gPos_x(), gPos_y(), g_handle[0], true); 26 27} 28 29 30/*キー入力*/ 31void Player::input_key() 32{ 33 if (keybord(KEY_INPUT_LEFT) > 0) 34 { 35 sPos_x(-5); 36 } 37 38 if (keybord(KEY_INPUT_RIGHT) > 0) 39 { 40 sPos_x(+5); 41 } 42 43 /*ジャンプ*/ 44 if (keybord(KEY_INPUT_SPACE) > 0) 45 { 46 n = (n - 2); 47 if (n <= 0) 48 { 49 n = 0; 50 gravity(); 51 } 52 53 sPos_y(n); 54 } 55 else { 56 57 n = jump_range;//減った値を再設定 58 gravity(); 59 } 60 61 62 63} 64 65/*重力効果*/ 66void Player::gravity() 67{ 68 //マップのオブジェクトの上に乗るまでjumpできない。 69 70 if (gPos_y() < 200) 71 { 72 sPos_y(-6); 73 } 74 75 76} 77 78/*座標の取得と設定*/ 79void Player::sPos_x(int xx)//加算 80{ 81 pos.x += xx; 82} 83 84void Player::sPos_y(int yy)//加算 85{ 86 pos.y += -yy; 87} 88 89int Player::gPos_x() 90{ 91 return pos.x; 92} 93 94int Player::gPos_y() 95{ 96 return pos.y; 97} 98
Map.cpp
Map.cpp
1#include "DxLib.h" 2#include "Map.h" 3 4 5 6static int Map_debug = 0; 7 8 9/*コンストラクタ*/ 10Map::Map(const char* str) :pos{0,0} 11{ 12 if (LoadDivGraph(str, 40, 10, 4, 64, 64, g_handle) == -1) { Map_debug = -1; } 13 14} 15 16 17 18void Map::Update() 19{ 20 21} 22 23/*当たり判定////////////////////////////////////////////////////////////////////////////////////////*/ 24bool Map::Map_Col(int x, int y) 25{ 26 return true; 27} 28//////////////////////////////////////////////////////////////////////////////////////////////////// 29 30void Map::Draw_Update() 31{ 32 //DrawFormatString(0, 0, GetColor(255, 255, 255), "%d",Map_debug); 33 34 for (int y = 0; y < 20; y++) 35 { 36 for (int x = 0; x < 20; x++) 37 { 38 39 DrawGraph(y * CELL,x * CELL,g_handle[Draw_set_stage(x,y)],true); 40 } 41 } 42 43 44} 45 46/*描画チップを選別*/ 47/* 48 495 レンガ 50 51*/ 52int Map::Draw_set_stage(int x,int y) 53{ 54 int t = draw_map[x][y]; 55 56 switch (t) 57 { 58 case 0://なにもない 59 return -1; 60 break; 61 62 case 2://レンガ 63 return 5; 64 break; 65 66 67 68 } 69 70 71 72 73 74} 75 76 77 78/*座標の取得と設定*/ 79void Map::sPos_x(int xx) 80{ 81 pos.x += xx; 82} 83 84void Map::sPos_y(int yy) 85{ 86 pos.y += -yy; 87} 88 89int Map::gPos_x() 90{ 91 return pos.x; 92} 93 94int Map::gPos_y() 95{ 96 return pos.y; 97} 98
Game.h
1#include "Dxlib.h" 2#include "Game.h" 3 4 5Game::Game() 6{ 7 8} 9 10 11void Game::Update() 12{ 13 14 m->Update(); 15 p->Update(); 16 17} 18 19void Game::Draw_Update() 20{ 21 m->Draw_Update(); 22 p->Draw_Update(); 23 24}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/07/28 17:07
2019/07/29 00:17
退会済みユーザー
2019/07/29 01:31
2019/07/29 07:26
退会済みユーザー
2019/07/29 08:51