Движение к точке в платформере
| |
Maxaon | Дата: Четверг, 16 Августа 2012, 23:37 | Сообщение # 21 |
участник
Сейчас нет на сайте
| А зачем карту сохранять в файл если известно, что она при запуске всегда рандомная?
|
|
| |
LunarPixel | Дата: Пятница, 17 Августа 2012, 08:23 | Сообщение # 22 |
старожил
Сейчас нет на сайте
| Saladin, хм, интересная идея.. надо будет попробовать
|
|
| |
Archido | Дата: Пятница, 17 Августа 2012, 08:33 | Сообщение # 23 |
Сэнсэй
Сейчас нет на сайте
| Quote (Нохчи) определять нужно лишь один раз, дальше можно хоть в файл сохранить, хоть еще куда-то. Весь разговор о том, что эмулировать движения перса не обязательно, если "правила" наши не меняются по ходу игры конечно. Как уже было сказано, вариант сохранять в файл - это не вариант в данном случае. Но я вообще-то не это имел в виду.
Тут смотря еще что подразумевать под эмуляцией. Поэтому меня интересует конкретно сам процесс и алгоритм "генерации уровня" с помощью "правил" (и от этого зависит конечное быстродействие, но это менее важно). Вот есть сырой массив \ пачка объектов уровня, нужно построить, исходя из этой информации, связный граф. Повторюсь, как конкретно определить, что с одного блока можно попасть на другой? И не только "запрыгивать", но еще и "спрыгивать", при этом совсем не обязательно, что эти блоки будут расположены относительно друг друга по "правилам" (т.к. можно спрыгнуть и пролететь огого сколько, но в итоге приземлиться на конкретный блок).
P.S. LunarPixel, да простишь ты нас, за небольшой оффтоп ?
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Пятница, 17 Августа 2012, 08:42 |
|
| |
Нохчи | Дата: Пятница, 17 Августа 2012, 15:53 | Сообщение # 24 |
заслуженный участник
Сейчас нет на сайте
| Archido, мысль такая была: берем любой блок и определяем, можно ли с него перейти на соседние(свообное пространство это тоже блоки), если да, смотрим, можно ли с них перейти на следующие и т.д., таким образом обходим все блоки. Волновой алгоритм. Моменты, когда можно спрыгнуть с платформы и пролететь огого сколько тоже будут просчитаны, если делать так. ТС говорил не о скорости генерации уровня, а о скорости просчета пути на уже готовом уровне, мне кажется проблем с быстродействием не должно быть.
Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Пятница, 17 Августа 2012, 15:53 |
|
| |
Archido | Дата: Пятница, 17 Августа 2012, 19:17 | Сообщение # 25 |
Сэнсэй
Сейчас нет на сайте
| Quote (Нохчи) мысль такая была: берем любой блок и определяем, можно ли с него перейти на соседние(свообное пространство это тоже блоки), если да, смотрим, можно ли с них перейти на следующие и т.д., таким образом обходим все блоки А, вот терь ясно. Правда, будут проблемы, если геометрия уровня непростая, ну и генериться будет не очень быстро . Ну да ладно, бог с ним, мысль ясна.
Quote (Нохчи) ТС говорил не о скорости генерации уровня, а о скорости просчета пути на уже готовом уровне, мне кажется проблем с быстродействием не должно быть. А по-моему как раз с этим и проблемы или я неправильно понял, но "генерировать" то можно раз и в файл сохранить (об этом уже все сказали), но как выяснилось - этот вариант не подходит в данном случае. Поэтому я и сделал вывод о том, что "генерация" медленная, т.к. ее при старте нужно делать каждый раз. А сам поиск пути по графу достаточно быстр по идее... Но если все таки с поиском проблемы, то можно "волновой" или вообще А* прикрутить, будет весьма быстро
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Пятница, 17 Августа 2012, 19:17 |
|
| |
Saladin | Дата: Пятница, 17 Августа 2012, 21:15 | Сообщение # 26 |
заслуженный участник
Сейчас нет на сайте
| Как вы умудряетесь налить столько воды не сказав ничего по делу?
Анбаннэд. Хэлоу эгин =)
|
|
| |
Нохчи | Дата: Пятница, 17 Августа 2012, 21:17 | Сообщение # 27 |
заслуженный участник
Сейчас нет на сайте
| Saladin, если тс интересовало алго, то он его получил.
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
ЭтоЧудоИзЧудес | Дата: Пятница, 17 Августа 2012, 21:18 | Сообщение # 28 |
заслуженный участник
Сейчас нет на сайте
| Quote (Saladin) Как вы умудряетесь налить столько воды не сказав ничего по делу? Как будто здесь когда-нибудь было иначе.
Велосипед никто не купил. Зол. Скоро начну рвать и метать.
|
|
| |
Archido | Дата: Пятница, 17 Августа 2012, 21:31 | Сообщение # 29 |
Сэнсэй
Сейчас нет на сайте
| Quote (Saladin) Как вы умудряетесь налить столько воды не сказав ничего по делу? Quote (ЭтоЧудоИзЧудес) Как будто здесь когда-нибудь было иначе. Толсто
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Saladin | Дата: Пятница, 17 Августа 2012, 21:48 | Сообщение # 30 |
заслуженный участник
Сейчас нет на сайте
| Quote (ЭтоЧудоИзЧудес) Как будто здесь когда-нибудь было иначе. Ну если мне нужен был ответ на вопрос я всегда получал не мыльные формулировки и размышления на тему. Два Кота, Емсалат, Лунар, Феденко Вадик - вот эти люди тут всегда говорили здраво и по делу. А кто эти набежавшие теоретики я понятия не имею, и что они забыли тут тоже не ясно Quote (Нохчи) Saladin, если тс интересовало алго, то он его получил. Давным давно получил, да. Вы молодцы ребята, помогаете и все такое. Спасибо вам за то что вы есть. Хотите бложек тут завести? Да пожалуйста.
Анбаннэд. Хэлоу эгин =)
|
|
| |
ЭтоЧудоИзЧудес | Дата: Пятница, 17 Августа 2012, 21:50 | Сообщение # 31 |
заслуженный участник
Сейчас нет на сайте
| Quote (Saladin) . Два Кота, Емсалат, Лунар, Феденко Вадик - вот эти люди тут всегда говорили здраво и по делу. Емсалат исчез, Феденко забанен, еще несколько гмлщиков вместе с ним не устояли перед сокрушительной мощью банхаммера. И спасут отечество только два кота и лунный пиксель.
Велосипед никто не купил. Зол. Скоро начну рвать и метать.
|
|
| |
LunarPixel | Дата: Суббота, 18 Августа 2012, 10:41 | Сообщение # 32 |
старожил
Сейчас нет на сайте
| ТС интересовали все возможные варианты... По описанному принципу я сделал изначально, но вопрос вот в чем, есть ли альтернативные решения?!
Saladin, сейчас твой вариант реализовываю, там есть только один минус, с движение сверху вниз, если нужно падать с большой высоты. Но эту проблемку тоже придумал, как решить )
|
|
| |
Maxaon | Дата: Суббота, 18 Августа 2012, 22:45 | Сообщение # 33 |
участник
Сейчас нет на сайте
| Сегодня придумал простенький генератор. Собсно выкладываю код: var x1,x2,y2,y1; globalvar bl; x1=get_integer('x1',''); //отправная точка х x2=get_integer('x2',''); //отправная точка x2 y1=get_integer('y1',''); //конечная точка y y2=get_integer('y2',''); //конечная точка y2 bl=get_integer('bl',''); //бл* ой это кол-во блоков
x=x1; y=y1; if x1<x2 for(a=0;a<=bl;a+=1) { switch(choose(0,1,2)){ case 0: instance_create(x+32*a,y,object0); //создает блок справа break; case 1: instance_create(x+64*a,y-64,object0); создает левый нижний блок break; case 2: instance_create(x+32*a,y-32,object0); //создает правый нижний блок break; } }
Думаю все понятно, поэтому дальше писать не стал, т.к. дальше все идентично. Конечно не супер, но этим я хотел показать логику.Ведь необязательно писать супер сложный код, когда можно сделать просто.
Объяню некоторые тонкости. Я написал, что цикл будет выполняться если x1<x2, потому что чтобы указать явно в какую сторну идти. Можно и сделать наоборот, но как сказал выше не буду повторять код. Можно тут много чего усовершенстовать. Например, начиная от расположение блоков, до детального расположения путем проверок или доделать координату Y. Потому если я ее прикрутил бы стоило делать "ифы" а мне неохота Это можно прикрутить все потом... Еще добавлю, что globalvar bl я написал потому что гм у меня упрямился, мол неизвестная переменная и прочий бред. К примеру, выдал седня такую ошибку Вроде бы смешно, а бывает и убить хочется))
Сообщение отредактировал Maxaon - Суббота, 18 Августа 2012, 22:46 |
|
| |
Saladin | Дата: Суббота, 18 Августа 2012, 23:43 | Сообщение # 34 |
заслуженный участник
Сейчас нет на сайте
| Бывает смешно, когда ты сто раз код перелопатишь из-за этой ошибки, а оказывается что обьект0 на момент выполнения функции просто не существует. И смех и грех, ей богу
Ой, совсем забыл спросить, а генератор то тут зачем?
Анбаннэд. Хэлоу эгин =)
|
|
| |
Maxaon | Дата: Воскресенье, 19 Августа 2012, 00:16 | Сообщение # 35 |
участник
Сейчас нет на сайте
| Saladin, да нет, объект как раз был(куда я его только не вставлял) ) Quote а генератор то тут зачем? это я свой скрипт так назвал) можно канеш полноценный генер закодить так, чтобы по ходу следования рандомно создавались объекты а сзади удалялись, чтобы ресы не жрал, но не в этой сказке
Сообщение отредактировал Maxaon - Воскресенье, 19 Августа 2012, 00:19 |
|
| | |
|