提示コードの////コメント部のコードです。真横に動いても自分の"後"を仲間が追尾する処理を実装したいのですがどうすればいいのでしょうか?アルゴリズムというか考え方が知りたいです。
提示画像の一番上のキャラクターが自分のキャラクターでそれを右に動かしてその後上に動かした時にちゃんと後ろを追いかけてくれる処理を作りたいです。
#include "Game.hpp" #include "DxLib.h" #include "Input.hpp" #include <time.h> static const char* filename = "Log.txt"; static std::ofstream ofs(filename); Game::Game() { isMove = false; srand((unsigned int)time(NULL)); LoadDivGraph("assets/resource/Character_48px.png", 56, 8, 7, mapCELL, mapCELL, handle_chr);//キャラクター全データ読み込み int c = 0; for(int i = 0; i < 56;) { for(int j = 0; j< 8; j++){ handle_chr_all[c][j] = handle_chr[i++]; } c++; } //ofs<<"aa"<<std::endl; player = new Player(handle_chr_all[0], 100, 100); member_a = new Player(handle_chr_all[1], 100, 100 + (mapCELL * 1)); member_b = new Player(handle_chr_all[2], 100, 100 + (mapCELL * 2)); member_c = new Player(handle_chr_all[3], 100, 100 + (mapCELL * 3)); map = new Map(); speed = new Position(0,0);//速度管理 } /*操作*/ void Game::Control() { const float move = 5; if (Input::keyboard(KEY_INPUT_LEFT) > 0) { speed->x = -move; speed->y = 0; isMove = true; } else if (Input::keyboard(KEY_INPUT_RIGHT) > 0) { speed->x = move; speed->y = 0; isMove = true; } else if (Input::keyboard(KEY_INPUT_UP) > 0) { speed->x = 0; speed->y = -move; isMove = true; } else if (Input::keyboard(KEY_INPUT_DOWN) > 0) { speed->x = 0; speed->y = move; isMove = true; }else{ isMove = false; speed->x = 0; speed->y = 0; } *player->PrevPos = *player->position; player->Move(speed); } /////////////////////////////////////////////////////////////////////////////////////////////////////// /*仲間を自分に追尾させる。処理*/ void Game::Party() { // member_a->position->x = p.x - mapCELL; // member_a->position->y = p.y - mapCELL; /*Right move*/ if(player->getDirection().x > 0 && player->getDirection().y == 0) { member_a->position->x = player->PrevPos->x - mapCELL; member_a->position->y = player->PrevPos->y; }else if (player->getDirection().x < 0 && player->getDirection().y == 0) { member_a->position->x = player->PrevPos->x + mapCELL; member_a->position->y = player->PrevPos->y; } //member_a->Move(speed); //member_b->Move(speed); //member_c->Move(speed); } /////////////////////////////////////////////////////////////////////////////////////////////////////// /*エンカウントを管理 */ void Game::Encount() { if(isMove == true && rand() % 5 == 0) { //ofs<<"エンカウント!!! "<<std::endl; } } void Game::Update() { Control(); Encount(); Party(); map->Update(); member_a->Update(); member_b->Update(); member_c->Update(); player->Update(); } void Game::Draw_Update() { map->Draw_Update(); member_a->Draw_Update(); member_b->Draw_Update(); member_c->Draw_Update(); player->Draw_Update(); DrawFormatString(0, 0, GetColor(0, 0, 0), "player: %.2f , %.2f", player->position->x, player->position->y); }
回答2件
あなたの回答
tips
プレビュー