SFML и C++ Уроки \ Разработка игр › Форумы › SFML System, Window и другие вопросы › взаимодействие с картой. Pacman
В этой теме 3 ответа, 2 участника, последнее обновление Павел Букреев 8 года/лет, 4 мес. назад.
-
АвторСообщения
-
как написать цикл, чтоб персонажа ограничивали стенки не только по краям, но и в середине, я так понял в уроках именно для крайних стенок делалось
размер спрайта персонажа равен размеру спрайта карты, это как-то влияет?
for (int i = y / 15; i < (y + h) / 15; i++)//проходимся по всей карте, то есть по всем квадратикам размера 32*32, которые мы окрашивали в 9 уроке. про условия читайте ниже.
for (int j = x / 15; j<(x + w) / 15; j++)//икс делим на 32, тем самым получаем левый квадратик, с которым персонаж соприкасается. (он ведь больше размера 32*32, поэтому может одновременно стоять на нескольких квадратах). А j<(x + w) / 32 – условие ограничения координат по иксу. то есть координата самого правого квадрата, который соприкасается с персонажем. таким образом идем в цикле слева направо по иксу, проходя по от левого квадрата (соприкасающегося с героем), до правого квадрата (соприкасающегося с героем)
{
if (TileMap[i][j] == ‘1’)
{
if (dy>0)//если мы шли вниз,
{
y = i * 15 – w;//то стопорим координату игрек персонажа. сначала получаем координату нашего квадратика на карте(стены) и затем вычитаем из высоты спрайта персонажа.}
if (dy<0)
{
y = i * 15 + 15;//аналогично с ходьбой вверх. dy<0, значит мы идем вверх (вспоминаем координаты паинта)}
if (dx>0)
{
x = j * 15 – h;//если идем вправо, то координата Х равна стена (символ 0) минус ширина персонажа}
if (dx < 0)
{
x = j * 15 + 15;//аналогично идем влево}
}
`Для кода есть специальная кнопка.
Код из урока не только для крайних стенок. Он в целом для любых символов “0”. Мы можем нарисовать эти символы и посередине.Да, я это уже понял, но персонаж не пролазит, я сделал проход шыре, но все равно как-то коряво получается, нужно очень точно попадать между стенками, чтоб он прошел, можно что-нибудь с этим сделать?
C++1234567891011121314151617181920212223242526for (int i = y / 20; i < (y + h) / 20; i++)for (int j = x / 20; j<(x + w) / 20; j++){if (TileMap[i][j] == '1'){if (dy>0)//если мы шли вниз,{y = i * 20 - h;}if (dy<0){y = i * 20 + 20;}if (dx>0){x = j * 20 - w;}if (dx < 0){x = j * 20 + 20;}}Может размер прямоугольника персонажа больше, чем ты видишь на экране?
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.