forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Простейшая бродилка (http://forum.boolean.name/showthread.php?t=2164)

Тренсфер 22.12.2006 17:56

Простейшая бродилка
 
Здравствуйте! Пожалуйста помогите написать простейшую бродилку на MP (типа марио на денди). Я хорошо знаю паскаль, но не догоняю -как сделать перемещение камеры вслед за игроком и препятствия которые можно разбивать, а так же монстров и "выстрелы" игрока. Возможно я прошу мгого, но я просто не могу представить этого на загружаемой карте. Я читал все темы, но такого не нашёл.PS буду рад любому коду и исходнику. Заранее спасибо.

Chip 22.12.2006 18:03

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.

Тренсфер 22.12.2006 18:20

Re: Простейшая бродилка
 
Спасибо, но я делал подобное. Меня интересуют препятстивия которые можно загрузить с карты, чтобы не пропивывать каждое в программе вручную, а так же то что я описал выше. Ещё раз спасибо, но я знаю как реализовать само передвежение и гравитацию.
Ещё вопрос. Я видел на форуме реализацию 3D моделей, но можно ли реализовать на MP 3D игру. Памню в джаве есть такая айпи и если подключить библеотеку с ней ...

Chip 22.12.2006 18:23

Re: Простейшая бродилка
 
Ну тогда используй GAME API , там можно все реализовать , кроме 3D.

IVenoMI 23.12.2006 14:48

Re: Простейшая бродилка
 
Попробовал расписать пример по всем приведенным тобой запросам - получается, что я сам бродилку написал...

Тренсфер 28.12.2006 15:15

Re: Простейшая бродилка
 
Я буду рад даже небольшому кусочку кода...

IVenoMI 28.12.2006 23:42

Re: Простейшая бродилка
 
Если я тебе дам весь свой код - не научишся сам...

Спрашивай конкретно, какие моменты интересуют?..

Тренсфер 29.12.2006 15:29

Re: Простейшая бродилка
 
Меня интересует только перемещение экрана вслед за игроком (как во всех бродилках) и сдерживающие препятствия (стены). Остальное (загрузка карты и монстров, интеллект) я сам легко заделаю.

IVenoMI 30.12.2006 02:12

Re: Простейшая бродилка
 
Препятствия легко реализуются с помощью Game библиотеки уважаемого piligrima... Используй функцию int collides_with(int idx, int sprite,int pixelLevel) из библиотеки lib_sprite...

Что касается камеры - попробуй седующим образом :

Создай массив объектов карты, присвой каждому свой спрайт... Каждый объект иееет координаты относительно левого ВЕРХНЕГО угла карты, точно такие же координаты имеет игрок...

Теперь в главном цикле прорисовывай только те спрайты, которы имеют координаты +/- определенная величина относительно игрока...

Piligrim 30.12.2006 11:24

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.
Т.е. левый верхний угол отображаемой части игрового поля настраивается.

IVenoMI 30.12.2006 13:14

Re: Простейшая бродилка
 
Цитата:

Сообщение от pilgrim
Т.е. левый верхний угол отображаемой части игрового поля настраивается.

Да, пардон, ошибся...

Тренсфер 03.01.2007 17:53

Re: Простейшая бродилка
 
А как их использовать set_position ? Дайте справку пожалуйста.

Piligrim 04.01.2007 10:34

Re: Простейшая бродилка
 
все игровое поле имеет размер, допустим 100 на 100, но на экране показывается кусок 20 на 20. этой функцией указывается, где будет расположена верхняя левая точка экрана на игровом поле, т.е. какая его часть будет видна на экране.

Тренсфер 04.01.2007 12:58

Re: Простейшая бродилка
 
Вложений: 2
а int collides_with ? И почему при компиляции программа так часто вылетает в виндовс если используешь какой нибудь uses ?
мне удалось реализовать препятствия без дополнительных библиотек, но этот способ подходит только для квадратных препятствий и очень тормозит...

Piligrim 05.01.2007 09:40

Re: Простейшая бродилка
 
int collides_with проверяет соприкосновение спрайта с окружением. т.е. проверка столкновений

IVenoMI 05.01.2007 20:14

Re: Простейшая бродилка
 
Алгоритм работает очень нечетко и медленно, лучше пользуйся библиотекой...

Chip 07.01.2007 21:54

Re: Простейшая бродилка
 
Вложений: 2
А вот здесь глянь как работает ?
Я кстати еще искуственно торможу , а то летает хрен догонишь :) , если будет усложнятся то есть еще запас.
Дополнительно для взрыва использую внешний класс выводящий часть картинки с прозрачностью, а все остальное написано на чистом МР.

IVenoMI 09.01.2007 12:20

Re: Простейшая бродилка
 
Сам же понимаешь, если алгоритм хорошо написан, то будет работать хорошо на любой платформе... А если же коряво то...

Кстати совет, не тормози игру а введи внутренний таймер...

Chip 09.01.2007 14:02

Re: Простейшая бродилка
 
А какой смысл тормозить таймером когда можно тормозить плавностью движения.
Тем более этот параметр
можно будет менять в опциях .

IVenoMI 09.01.2007 14:59

Re: Простейшая бродилка
 
Учитывай,что разные девайсы имеют разные показатели производительности...

Chip 09.01.2007 17:40

Re: Простейшая бродилка
 
Вот для этого в опциях будет параметр изменения скорости под девайс.
min--mid--max

oposum_2000 10.01.2007 01:29

Re: Простейшая бродилка
 
Цитата:

Сообщение от IVenoMI
Сам же понимаешь, если алгоритм хорошо написан, то будет работать хорошо на любой платформе... А если же коряво то...

Кстати совет, не тормози игру а введи внутренний таймер...


a kak внутренний таймер razrabotati?

spasibo.

IVenoMI 10.01.2007 12:08

Re: Простейшая бродилка
 
Цитата:

Сообщение от Chip
Вот для этого в опциях будет параметр изменения скорости под девайс.
min--mid--max

Учти, что большинство играющих в игры на мобиле не заморачиваются такой мелочью, как настройки... Это статистические данніе...

Именно поэтому у большинства девелоперов в продуктах практически нет настроек... Разве что включение/выключение звука...

Мало кто додумается искать регулировку скорости в настройке, скорее посетуют на кривую игру...

Chip 10.01.2007 15:18

Re: Простейшая бродилка
 
Тоже верно.
Седня попробую совместить с таймером и и компенсировать время движения не delay, а разрешением движения.

IVenoMI 10.01.2007 15:38

Re: Простейшая бродилка
 
Я бы посоветовал именно delay...

Не все можно будет компенсировать движением...

Сделай следующим образом : бери системное время в начале главного цикла и в конце, а потом добавляй недостаточное время, чтобы добится стандартного значения в 25 fps...

Chip 10.01.2007 18:15

Re: Простейшая бродилка
 
Хочу сделать так , беру время в нечале главного цикла и в конце сравниваю с эталонным временем , считаю кратностьполученого к эталонному времени , кратность компенсирую движением а то что остается в остатке компенсирую при помощи delay

IVenoMI 12.01.2007 11:42

Re: Простейшая бродилка
 
Тоже работоспособно, однако зачем дробить алгоритм? Как по мне так более продуктивно задать фиксированную скорость и подгонять работу к ней, чем делать динамическую скорость, меняя ее каждый цикл прорисовки...

Chip 12.01.2007 12:23

Re: Простейшая бродилка
 
Ничего не дробится. А зато на мощных телах качество классное.
И скорость стабильная.
Вот пример:
procedure render;
begin
time:=getRelativeTimeMs;
Paint_Map;
drawImage(sprite, pos_x, pos_y);
repaint;
step:=(getRelativeTimeMs-Time)/8;
end;

IVenoMI 12.01.2007 12:41

Re: Простейшая бродилка
 
Хм.. А анимация? Если ее реализовать последовательной сменой картинок?...

Chip 12.01.2007 12:54

Re: Простейшая бродилка
 
Так она так и реализована, если есть нажатие джойстика то меняем спрайта пересчитываем карту и потом вызывается процедура render.

IVenoMI 12.01.2007 14:12

Re: Простейшая бродилка
 
Хм... Спорить тут сложно.. Надо посмотреть на реультат...

Chip 12.01.2007 14:40

Re: Простейшая бродилка
 
Результат вот здесь http://www.boolean.name/showthread.php?t=2473

Тренсфер 28.01.2007 21:41

Re: Простейшая бродилка
 
Ну как всётаки пользоваться int collides_with ? Что за целые параметры idx, sprite,pixelLevel ? Ну то что lib_sprite на до поместь в папку LIBS и написать в программе USES sprite;это понятно, а что дальше? Подскажите пожалуйста на каком нибудь примере, а то я чувствую себя умственно отсталым. Я думаю это не только мне интересно. Где можно прочитать инструкцию к этим модулям ?

Chip 28.01.2007 22:15

Re: Простейшая бродилка
 
Я в примере игры не использую доп библиотек пишу на чистом МР.

Mark Castle 25.10.2008 19:53

Ответ: Re: Простейшая бродилка
 
Цитата:

Сообщение от Тренсфер (Сообщение 26824)
а int collides_with ? И почему при компиляции программа так часто вылетает в виндовс если используешь какой нибудь uses ?
мне удалось реализовать препятствия без дополнительных библиотек, но этот способ подходит только для квадратных препятствий и очень тормозит...

Пожалуста выложите код!Не могу скачать с ссылки!Уже год ищу что то по препятствиям!Помогите!

Cliffe Snake 26.10.2008 01:46

Ответ: Простейшая бродилка
 
Из библиотеки Lib_game я использую только возможность нажатия нескольких кнопок одновременно и загрузку анимации персонажа(от которой хочу уйти средствами Lib_Alpha), остальное по-моему легче самому написать(кроме анализа коллизий).
Стандартными средствами MP можно без труда отрисовывать поле 256x256 из тайлов размером 64x64, причём можно налету подгружать нужные тайлы, а неиспользуемые выгружать библой Lib_memclean.Кол-во разновидностей тайлов может быть около 100(за глаза хватит).

odd 26.10.2008 07:44

Ответ: Простейшая бродилка
 
Я тоже как-то стараюсь не использовать Lib_sprite, Lib_layer, Lib_game. При особом желании, большие карты можно прекрасно генерировать и в чистом MP.

Mark Castle 28.10.2008 12:48

Ответ: Re: Простейшая бродилка
 
Цитата:

Сообщение от IVenoMI (Сообщение 26175)
Препятствия легко реализуются с помощью Game библиотеки уважаемого piligrima... Используй функцию int collides_with(int idx, int sprite,int pixelLevel) из библиотеки lib_sprite...

Что касается камеры - попробуй седующим образом :

Создай массив объектов карты, присвой каждому свой спрайт... Каждый объект иееет координаты относительно левого ВЕРХНЕГО угла карты, точно такие же координаты имеет игрок...

Теперь в главном цикле прорисовывай только те спрайты, которы имеют координаты +/- определенная величина относительно игрока...

У меня вопросец:
Вот есть библиотека collides_with:
collides_with(int idx, int sprite,int pixelLevel) - проверка столкновения с другим спрайтом.

Что это за функции: (int idx, int sprite,int pixelLevel)???

Немогу сделать пряпятствия!

impersonalis 28.10.2008 13:22

Ответ: Простейшая бродилка
 
Цитата:

Что это за функции: (int idx, int sprite,int pixelLevel)???
аргументы?

Mark Castle 28.10.2008 14:19

Ответ: Простейшая бродилка
 
Цитата:

Сообщение от impersonalis (Сообщение 89648)
аргументы?

Да.что они значат?

Piligrim 28.10.2008 14:21

Ответ: Простейшая бродилка
 
(int idx, int sprite,int pixelLevel)
библиотека работает со спрайтами по индексам
idx - индекс основного спрайта
sprite - индекс спрайта столкновение с которым проверяется
pixelLevel - если равен нулю, проверяется простое пересечение прямоугольников спрайтов иначе проверяется попиксельно, т.е. на уровне картинки спрайта.

Piligrim 28.10.2008 14:30

Ответ: Простейшая бродилка
 
(int idx, int sprite,int pixelLevel)
библиотека работает со спрайтами по индексам
idx - индекс основного спрайта
sprite - индекс спрайта столкновение с которым проверяется
pixelLevel - если равен нулю, проверяется простое пересечение прямоугольников спрайтов иначе проверяется попиксельно, т.е. на уровне картинки спрайта.

Mark Castle 28.10.2008 14:41

Ответ: Простейшая бродилка
 
Цитата:

Сообщение от pilgrim (Сообщение 89662)
(int idx, int sprite,int pixelLevel)
библиотека работает со спрайтами по индексам
idx - индекс основного спрайта
sprite - индекс спрайта столкновение с которым проверяется
pixelLevel - если равен нулю, проверяется простое пересечение прямоугольников спрайтов иначе проверяется попиксельно, т.е. на уровне картинки спрайта.

Индекс,всмысле,координаты?

Cliffe Snake 28.10.2008 16:20

Ответ: Простейшая бродилка
 
Цитата:

Сообщение от Mark Castle (Сообщение 89664)
Индекс,всмысле,координаты?

Под индексом подразумевается номер спрайта, полученный при его загрузке. Парень тебе сколько лет? Такие глупости спрашиваешь. :)

Mark Castle 29.10.2008 12:34

Ответ: Простейшая бродилка
 
Цитата:

Сообщение от Cliffe Snake (Сообщение 89671)
Под индексом подразумевается номер спрайта, полученный при его загрузке. Парень тебе сколько лет? Такие глупости спрашиваешь. :)

!!14!!

sasha_peleng 08.12.2008 17:05

Ответ: Re: Простейшая бродилка
 
Цитата:

Сообщение от Chip (Сообщение 27384)
А вот здесь глянь как работает ?
Я кстати еще искуственно торможу , а то летает хрен догонишь :) , если будет усложнятся то есть еще запас.
Дополнительно для взрыва использую внешний класс выводящий часть картинки с прозрачностью, а все остальное написано на чистом МР.

А нельзя исходник?:SOS:

scorey 02.04.2009 17:33

Ответ: Простейшая бродилка
 
Вложений: 1
Вот нашел крутой исходник. автора не помню!


Часовой пояс GMT +4, время: 14:42.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot