Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2015, 23:26   #1
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию Сделать непроходимые стены

На форме есть два прямоугольника Image.
Один большой- это карта
Второй маленький- это персонаж

Так же есть массив карты обозначенный значениями.
Я знаю верхний левый угол прямоугольника- карты и прямоугольника песонажа.

Есть кнопка загрузить карту (игру).
Программа считывает массив и подставляет соответствующие значения Bitmap- ок в большой прямоугольник, рисует канвой нужной канвой в нужном месте проще сказать. С этим проблем нет.

Что мне нужно- так это определить стены и сделать их непроходимыми!

На кнопку ВПРАВО я просто двигаю персонаж вправо, perschag- это константа = 8 пикселям у меня.
Код:
Персонаж.Left := Персонаж.Left + perschag;
Далее Такой код:
Код:
if mastile[masperson_y, masperson_x + 1] = 's' then
Он сделан проверить следующую справа клетку на значение s и если это s- то это стена
Код:
Персонаж.Left := Персонаж.Left - perschag; //столкнулись со стеной, и сразу отодвинули на место
Так вот что когда он пытается войти в узкий проем он либо не может войти в него, либо идет сквозь него как на картинке.

За 4 шага вправо (да и вверх или вниз так же) значения считывается только одно значение из массива, так как левый верхний угол персонажа находится все еще в одной ячейке.

Собирали ведь тут простейшие подобные игры и не раз наверно, каким алгоритмом поправить ошибку понятия не имею, кто что подскажет?
Изображения
Тип файла: jpg 1111.jpg (120.3 Кб, 151 просмотров)

Последний раз редактировалось NIKOLAYY2; 28.01.2015 в 23:33.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 29.01.2015, 00:56   #2
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Вот исходик, может по нему проще будет, поправить код на кнопках- стрелках.
Добавил кнопку текущий массив можно канвой прямо на нарисованную картинку отобразить.
Все что мог сделал для удобной отладки.

Файлы карт там нарисовал несколько можно с папки проэкта открыть, можно создать самому карту там кнопка есть.
Изображения
Тип файла: jpg 1111.jpg (74.8 Кб, 70 просмотров)
Вложения
Тип файла: rar Файл.rar (279.2 Кб, 17 просмотров)

Последний раз редактировалось NIKOLAYY2; 29.01.2015 в 00:59.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 29.01.2015, 07:31   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Там где key=VK_RIGTH просто тупо нет отката персонажа:
Код:
if mastile[masperson_y, masperson_x +1] = 's' then
      if IntersectRect(DestRect, Image6.BoundsRect, Rect(Rx1, Ry1, Rx2, Ry2))
        then
      begin
        ListBox1.Items.Add('Rx1 = ' + IntToStr(Rx1) + ', Ry1 = ' + IntToStr(Ry1)
          +
          ', Rx2 = ' + IntToStr(Rx2) + ', Ry2 = ' + IntToStr(Ry2));

        Image6.Left := Image6.Left ; //столкн, шаг назад
      end;
  end;
То есть как был Image6.Left так и остался. Проведите полное тестирование персонажа для всех кнопок - вправо, влево, вверх, вниз.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 06.02.2015, 14:50   #4
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Цитата:
Utkin Проведите полное тестирование персонажа для всех кнопок - вправо, влево, вверх, вниз.
Спс я это полностью переписал через функцию IntersectRect "стены" видит теперь в любом месте.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 06.02.2015, 15:06   #5
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Как закончишь, выложи игру поиграть
FaTaL вне форума Ответить с цитированием
Старый 06.02.2015, 18:04   #6
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Как боле-менее что-то играбельное будет покажу, хотя и сейчас уже бегает вправо, влево, прыгает, собирает монетки по полю где найдет, проигрывает музыку монет, пыжка, аннимацию некоторых обьектов и себя. Это уже хоть что-то, но слабовато как-то это для игры.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 10.02.2015, 14:51   #7
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию Пока так

Редактор карт и игра в одном приложении. Код может не очень, но нужно что-то делать, главное уже работает, главное от чего-то отталкиваться и собирать боле-менее рабочее играбельное приложение
Изображения
Тип файла: jpg 1111.jpg (56.9 Кб, 106 просмотров)

Последний раз редактировалось NIKOLAYY2; 10.02.2015 в 14:55.
NIKOLAYY2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запретить проход через стены alex(21) C# (си шарп) 20 10.01.2013 11:58
Парсер для стены в ВК EndoCrinolog PHP 14 15.11.2012 02:44
GLScene проходимость сквозь стены beygul Помощь студентам 0 10.10.2011 19:12
как сделать так,чтобы он левой рукой до стены коснулся? и если можно чтобы двери лифта закрылись maxon56 Паскаль, Turbo Pascal, PascalABC.NET 0 07.06.2011 18:46
C# Создание стены и флага(финиш)! ZaVyLoN Общие вопросы .NET 6 23.10.2010 17:23