![]() |
Простейшая бродилка
Здравствуйте! Пожалуйста помогите написать простейшую бродилку на MP (типа марио на денди). Я хорошо знаю паскаль, но не догоняю -как сделать перемещение камеры вслед за игроком и препятствия которые можно разбивать, а так же монстров и "выстрелы" игрока. Возможно я прошу мгого, но я просто не могу представить этого на загружаемой карте. Я читал все темы, но такого не нашёл.PS буду рад любому коду и исходнику. Заранее спасибо.
|
Re: Простейшая бродилка
Создай проект и кинь туда этот код , я думаю дальше можешь сам продолжить
program Ball; var img : image; x,y,key : integer; begin img:=loadimage('/icon.png'); //загрузить изображение setcolor(255,255,0); //установить цвет фона (R,G,B) x:=((GetWidth/2)-(GetImageWidth(img)/2)); // центруем позицую изображения по горизонтали y:=((GetHeight/2)-(GetImageHeight(img)/2));// центруем позицую изображения по вертикали repeat key:=KeyToAction(GetKeyPressed); // читаем нажатие джойстика if key = GA_UP then y := y - 1; // смотрим какая клавиша нажата if key = GA_DOWN then y := y + 1; // изменяем оси х,у if key = GA_LEFT then x := x - 1; // в зависимости от нажатой клавиши if key = GA_RIGHT then x := x + 1; FillRect(0, 0, GetWidth, GetHeight); // заливка экрана ранее выбраным цветом DrawImage(img, x, y); // перерисовать изображение с новыми координатами Repaint; // вывести на экран until key = GA_FIRE; // если нажата кнопкп Fire то завершить end. |
Re: Простейшая бродилка
Спасибо, но я делал подобное. Меня интересуют препятстивия которые можно загрузить с карты, чтобы не пропивывать каждое в программе вручную, а так же то что я описал выше. Ещё раз спасибо, но я знаю как реализовать само передвежение и гравитацию.
Ещё вопрос. Я видел на форуме реализацию 3D моделей, но можно ли реализовать на MP 3D игру. Памню в джаве есть такая айпи и если подключить библеотеку с ней ... |
Re: Простейшая бродилка
Ну тогда используй GAME API , там можно все реализовать , кроме 3D.
|
Re: Простейшая бродилка
Попробовал расписать пример по всем приведенным тобой запросам - получается, что я сам бродилку написал...
|
Re: Простейшая бродилка
Я буду рад даже небольшому кусочку кода...
|
Re: Простейшая бродилка
Если я тебе дам весь свой код - не научишся сам...
Спрашивай конкретно, какие моменты интересуют?.. |
Re: Простейшая бродилка
Меня интересует только перемещение экрана вслед за игроком (как во всех бродилках) и сдерживающие препятствия (стены). Остальное (загрузка карты и монстров, интеллект) я сам легко заделаю.
|
Re: Простейшая бродилка
Препятствия легко реализуются с помощью Game библиотеки уважаемого piligrima... Используй функцию int collides_with(int idx, int sprite,int pixelLevel) из библиотеки lib_sprite...
Что касается камеры - попробуй седующим образом : Создай массив объектов карты, присвой каждому свой спрайт... Каждый объект иееет координаты относительно левого ВЕРХНЕГО угла карты, точно такие же координаты имеет игрок... Теперь в главном цикле прорисовывай только те спрайты, которы имеют координаты +/- определенная величина относительно игрока... |
Re: Простейшая бродилка
set_position(int x, int y) - Sets this Layer's position such that its upper-left corner is located at (x,y) in the painter's coordinate system.
Т.е. левый верхний угол отображаемой части игрового поля настраивается. |
Re: Простейшая бродилка
Цитата:
|
Re: Простейшая бродилка
А как их использовать set_position ? Дайте справку пожалуйста.
|
Re: Простейшая бродилка
все игровое поле имеет размер, допустим 100 на 100, но на экране показывается кусок 20 на 20. этой функцией указывается, где будет расположена верхняя левая точка экрана на игровом поле, т.е. какая его часть будет видна на экране.
|
Re: Простейшая бродилка
Вложений: 2
а int collides_with ? И почему при компиляции программа так часто вылетает в виндовс если используешь какой нибудь uses ?
мне удалось реализовать препятствия без дополнительных библиотек, но этот способ подходит только для квадратных препятствий и очень тормозит... |
Re: Простейшая бродилка
int collides_with проверяет соприкосновение спрайта с окружением. т.е. проверка столкновений
|
Re: Простейшая бродилка
Алгоритм работает очень нечетко и медленно, лучше пользуйся библиотекой...
|
Re: Простейшая бродилка
Вложений: 2
А вот здесь глянь как работает ?
Я кстати еще искуственно торможу , а то летает хрен догонишь :) , если будет усложнятся то есть еще запас. Дополнительно для взрыва использую внешний класс выводящий часть картинки с прозрачностью, а все остальное написано на чистом МР. |
Re: Простейшая бродилка
Сам же понимаешь, если алгоритм хорошо написан, то будет работать хорошо на любой платформе... А если же коряво то...
Кстати совет, не тормози игру а введи внутренний таймер... |
Re: Простейшая бродилка
А какой смысл тормозить таймером когда можно тормозить плавностью движения.
Тем более этот параметр можно будет менять в опциях . |
Re: Простейшая бродилка
Учитывай,что разные девайсы имеют разные показатели производительности...
|
Re: Простейшая бродилка
Вот для этого в опциях будет параметр изменения скорости под девайс.
min--mid--max |
Re: Простейшая бродилка
Цитата:
a kak внутренний таймер razrabotati? spasibo. |
Re: Простейшая бродилка
Цитата:
Именно поэтому у большинства девелоперов в продуктах практически нет настроек... Разве что включение/выключение звука... Мало кто додумается искать регулировку скорости в настройке, скорее посетуют на кривую игру... |
Re: Простейшая бродилка
Тоже верно.
Седня попробую совместить с таймером и и компенсировать время движения не delay, а разрешением движения. |
Re: Простейшая бродилка
Я бы посоветовал именно delay...
Не все можно будет компенсировать движением... Сделай следующим образом : бери системное время в начале главного цикла и в конце, а потом добавляй недостаточное время, чтобы добится стандартного значения в 25 fps... |
Re: Простейшая бродилка
Хочу сделать так , беру время в нечале главного цикла и в конце сравниваю с эталонным временем , считаю кратностьполученого к эталонному времени , кратность компенсирую движением а то что остается в остатке компенсирую при помощи delay
|
Re: Простейшая бродилка
Тоже работоспособно, однако зачем дробить алгоритм? Как по мне так более продуктивно задать фиксированную скорость и подгонять работу к ней, чем делать динамическую скорость, меняя ее каждый цикл прорисовки...
|
Re: Простейшая бродилка
Ничего не дробится. А зато на мощных телах качество классное.
И скорость стабильная. Вот пример: procedure render; begin time:=getRelativeTimeMs; Paint_Map; drawImage(sprite, pos_x, pos_y); repaint; step:=(getRelativeTimeMs-Time)/8; end; |
Re: Простейшая бродилка
Хм.. А анимация? Если ее реализовать последовательной сменой картинок?...
|
Re: Простейшая бродилка
Так она так и реализована, если есть нажатие джойстика то меняем спрайта пересчитываем карту и потом вызывается процедура render.
|
Re: Простейшая бродилка
Хм... Спорить тут сложно.. Надо посмотреть на реультат...
|
Re: Простейшая бродилка
Результат вот здесь http://www.boolean.name/showthread.php?t=2473
|
Re: Простейшая бродилка
Ну как всётаки пользоваться int collides_with ? Что за целые параметры idx, sprite,pixelLevel ? Ну то что lib_sprite на до поместь в папку LIBS и написать в программе USES sprite;это понятно, а что дальше? Подскажите пожалуйста на каком нибудь примере, а то я чувствую себя умственно отсталым. Я думаю это не только мне интересно. Где можно прочитать инструкцию к этим модулям ?
|
Re: Простейшая бродилка
Я в примере игры не использую доп библиотек пишу на чистом МР.
|
Ответ: Re: Простейшая бродилка
Цитата:
|
Ответ: Простейшая бродилка
Из библиотеки Lib_game я использую только возможность нажатия нескольких кнопок одновременно и загрузку анимации персонажа(от которой хочу уйти средствами Lib_Alpha), остальное по-моему легче самому написать(кроме анализа коллизий).
Стандартными средствами MP можно без труда отрисовывать поле 256x256 из тайлов размером 64x64, причём можно налету подгружать нужные тайлы, а неиспользуемые выгружать библой Lib_memclean.Кол-во разновидностей тайлов может быть около 100(за глаза хватит). |
Ответ: Простейшая бродилка
Я тоже как-то стараюсь не использовать Lib_sprite, Lib_layer, Lib_game. При особом желании, большие карты можно прекрасно генерировать и в чистом MP.
|
Ответ: Re: Простейшая бродилка
Цитата:
Вот есть библиотека collides_with: collides_with(int idx, int sprite,int pixelLevel) - проверка столкновения с другим спрайтом. Что это за функции: (int idx, int sprite,int pixelLevel)??? Немогу сделать пряпятствия! |
Ответ: Простейшая бродилка
Цитата:
|
Ответ: Простейшая бродилка
Цитата:
|
Ответ: Простейшая бродилка
(int idx, int sprite,int pixelLevel)
библиотека работает со спрайтами по индексам idx - индекс основного спрайта sprite - индекс спрайта столкновение с которым проверяется pixelLevel - если равен нулю, проверяется простое пересечение прямоугольников спрайтов иначе проверяется попиксельно, т.е. на уровне картинки спрайта. |
Ответ: Простейшая бродилка
(int idx, int sprite,int pixelLevel)
библиотека работает со спрайтами по индексам idx - индекс основного спрайта sprite - индекс спрайта столкновение с которым проверяется pixelLevel - если равен нулю, проверяется простое пересечение прямоугольников спрайтов иначе проверяется попиксельно, т.е. на уровне картинки спрайта. |
Ответ: Простейшая бродилка
Цитата:
|
Ответ: Простейшая бродилка
Цитата:
|
Ответ: Простейшая бродилка
Цитата:
|
Ответ: Re: Простейшая бродилка
Цитата:
|
Ответ: Простейшая бродилка
Вложений: 1
Вот нашел крутой исходник. автора не помню!
|
Часовой пояс GMT +4, время: 14:42. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot