public:
mapR maper; // 'локация
pers m_Bob; // персонаж
npc job; // npc
// Конструктор движка
engine();
// Функция старт вызовет все приватные функции
void start();
};
#include "engine.h"
void engine::draw()
{
// Стираем предыдущий кадр
m_Window.clear(Color::Black);
for (int i = 0; i < maper.HEIGHT_MAP; i++)
for (int j = 0; j < maper.WIDTH_MAP; j++)
{
if (maper.TileMaps[i][j] == ' ') maper.s_map.setTextureRect(IntRect(0, 0, 32, 32)); //если встретили символ пробел, то рисуем 1й квадратик
if (maper.TileMaps[i][j] == 's') maper.s_map.setTextureRect(IntRect(32, 0, 32, 32));//если встретили символ s, то рисуем 2й квадратик
if (maper.TileMaps[i][j] == '0') maper.s_map.setTextureRect(IntRect(64, 0, 32, 32));//если встретили символ 0, то рисуем 3й квадратик
if (maper.TileMaps[i][j] == 'f') maper.s_map.setTextureRect(IntRect(96, 0, 32, 32));//добавили цветок
if (maper.TileMaps[i][j] == 'h') maper.s_map.setTextureRect(IntRect(128, 0, 32, 32));//и сердечкоtRect(128, 0, 32, 32));//и сердечко
maper.s_map.setPosition(j * 32, i * 32);
m_Window.draw(maper.s_map);
}
#include "pers.h"
#include "engine.h"//mapR.h не инклудю так как он подключен в engine.h
void pers::interactionWithMap()
{
for (int i = y / 32; i < (y + h) / 32; i++)//проходимся по тайликам, контактирующим с игроком, то есть по всем квадратикам размера 32*32, которые мы окрашивали в 9 уроке. про условия читайте ниже.
for (int j = x / 32; j < (x + w) / 32; j++)//икс делим на 32, тем самым получаем левый квадратик, с которым персонаж соприкасается. (он ведь больше размера 32*32, поэтому может одновременно стоять на нескольких квадратах). А j<(x + w) / 32 - условие ограничения координат по иксу. то есть координата самого правого квадрата, который соприкасается с персонажем. таким образом идем в цикле слева направо по иксу, проходя по от левого квадрата (соприкасающегося с героем), до правого квадрата (соприкасающегося с героем)
{
if (maper.TileMaps[i][j] == '0')//вот тут он не видит массив хоть убей
{
if (dy > 0)//если мы шли вниз,
{
y = i * 32 - h;//то стопорим координату игрек персонажа. сначала получаем координату нашего квадратика на карте(стены) и затем вычитаем из высоты спрайта персонажа.
}
if (dy < 0)
{
y = i * 32 + 32;//аналогично с ходьбой вверх. dy<0, значит мы идем вверх
}
if (dx > 0)
{
x = j * 32 - w;//если идем вправо, то координата Х равна стена (символ 0) минус ширина персонажа
}
if (dx < 0)
{
x = j * 32 + 32;//аналогично идем влево
}
}
}