![]() |
Ответ: Vivo
Цитата:
|
Ответ: Vivo
Мне не то, не другое, не о чем не говорит. Моя фраза:" я в этом не разбираюсь" значит что я в этом не разбираюсь.
|
Ответ: Vivo
http://rghost.ru/36781753
Вот новая версия с музыкой. Отпишитесь, пожалуйста, мне важно знать ваше мнение. |
Ответ: Vivo
Я поиграл. Заставка понравилась, правда смазалась из-за масштабирования под 1280х1024. Несколько раз не было "тумана войны" (наверное это был день, или глюк?)
вот откуда такой размер архива (>20мб): \vivo\music\day1.wav 27,5 мб [Сдыхаю быстро, но пару крабов завалил] |
Ответ: Vivo
скорее всего это был день. Сколько времени было? Тот трек действительно весит много, из-за того что качество очень хорошое. Но меня больше интересует мнение о музыке:)
|
Ответ: Vivo
Новая версия:
-Новая мелодия( проигрывается днем) -Молоток(палка+камень+лиана) -Изменены рецепты крафта каменной и деревянной кирки(теперь нужен молоток) http://rghost.ru/36821364 P.S. в папке с игрой в "music" новый трек называется day2. Откомментируйте его, пожалуйста:) . |
Ответ: Vivo
нужен сайт? запили прототип на юкозе
|
Ответ: Vivo
Цитата:
|
Ответ: Vivo
Чёрный экран при запуске. Музыка играет. Win7 64bit, ноут с Nvidia ION
|
Ответ: Vivo
Возможно что-то из-за винды, я точно сказать не могу:)
Кстати, появился новый вопрос. Дабы улучшить геймплей, было принято решение сделать так, чтобы персонаж был в центре экрана все время. То есть не комнатная система как сейчас, а как в большинстве TDS. Ну, надеюсь вы поняли:) Так вот, как лучше всего это сделать? Я думал сделать так, чтобы не герой ходил, а все вокруг него двигалось. Но я уверен что есть способы получше. В общем, мне интересны ваши соображения на эту тему. |
Ответ: Vivo
Цитата:
Цитата:
|
Ответ: Vivo
Я же про это и говорил
Цитата:
|
Ответ: Vivo
Цитата:
|
Ответ: Vivo
А-а-а понял. Так в crimsonland вроде было.
Но я где-то слышал, что можно как-то с камерой делать, или что-то такое. Ах да, мне говорили что в zombieblast(стандатный пример на BlitzMax) что-то такое сделано. Просто меня очень сильно смущает что приходится двигать всю карту. Точно должен быть какой-то другой вариант. |
Ответ: Vivo
Живой пруф того что это делают по-другому - terraria. Если бы там двигали все блоки, это было бы очень медленно. Значит, какой-то другой способ есть. Такжем, хороший пруф Diablo 2(не играл в первую часть, так что говорить не могу). Вряд ли в то время многие потянули бы передвижение каждого тайла на карте.
Но все же подумав что выбора нет, попробывал двигать все блоки, и появился новый вопрос( но старый еще вполне актуален - можно ли сделать тип, у которого поля были бы другими типами? То есть, как бы материнский тип. И если да, то как? |
Ответ: Vivo
Разработку не смотрел..
Но, лучше двигать игрока и смещать камеру. При обработке блоков (на видимость и т.п.) учитывать позицию игрока. Плюс на "запас", принимать в счёт смещение камеры. Намного легче ведь когда всё стоит на своих местах и лишь игрок перемещается, чем рассчитывать позиции блоков: их фактическая позиция на карте +/- смещение игрока. Если ещё будут пули - то это вообще геморрой. |
Ответ: Vivo
игра в 2Д ведь, никаких камер нету:)
|
Ответ: Vivo
Значит ее надо вообразить. Заведи пременные вроде camx, camy и обрабатывай на экране не те блоки, что вокруг (0, 0) координат, а те, что вокруг (camx, camy).
|
Ответ: Vivo
Я все же решил сделать по-другому. Переделаю игру в 3D, и вместо картинок будут спрайты, чтобы не изобретать велосипед.
|
Ответ: Vivo
Nikich, всегда в таких случаях двигается камера(точнее - это манипуляции с матрицами). В 2D камерах ортогональная проекция.(в Blitz3D вроде тоже есть ортогональный режим.).Вот и все различия. Как раз и спрайты пригодятся.
|
Ответ: Vivo
ну не знаю, ничего о камерах в 2Д в блитце я не слышал. Может есть сторонние библиотеки, но я ими не пользуюсь.
|
Ответ: Vivo
есть origin x,y или как то так команда попробуй ее
но в этом случае гуи и персонаж надо ценровать отсноительно сдвига ) |
Ответ: Vivo
Цитата:
Это реализуется двумя-тремя операторами. Дано: -блоки, каждый имеет свои координаты относительно точки отсчета (0,0). Эти координаты изменяться НЕ БУДУТ. -игрок, который тоже имеет координаты, относительно точки отсчета (0,0). -воображаемая камера которая должна: --висеть над тем местом, которое задано ее координатами (относительно точки отсчета (0,0)) --показывать соответствующие блоки Координаты игрока будут совпадать с координатами камеры, в случае жесткой привязки (тогда игрок будет всегда по центру экрана) Или немного плавать относительно координат камеры, если нужна плавная смена направления (камера "летает" за игроком). Заводим две переменные: camera_x, camera_y Все, осталось последнее - модифицировать то место программы, которое отвечает за рисование блоков на экране. Ты ведь не рисуешь все блоки подряд? Ты наверняка рисуешь только те, которые должны быть видны на экране. Вроде: Код:
If block.x>0 and block.x<640 then Код:
If block.x>camera_x and block.x<(camera_x+640) then |
Ответ: Vivo
Гм. А какой способ лучше? Через origin короче, но двигать начало системы координат подозрительно.
Хотя команды "БыстроМнеКамеруЗапилил()" явно не хватает. UPD И почему координаты ГГ должны совпадать с координатами камеры? Ведь тогда игрок за экран сможет убежать. |
Ответ: Vivo
Цитата:
|
Ответ: Vivo
Кстати, все еще требуется помощь в создании сайта.
|
Ответ: Vivo
Самое простое делать через Origin. Делаешь для карты Origin(scrollX, scrollY), а для гуи возвращаешь в начало Origin(0,0).
|
Ответ: Vivo
Вложений: 1
Опять проблемы. Что-то они зачастили. Возможно, вы слышали о такой игре ProjectZomboid, если инет, скачайте и поиграйте она того стоит. Но не в этом дело. Поговорив с геймдизайнером, мы пришли к мнению, что графику стоит сделать изометрическую. И сразу же возник вопрос. Это довольно трудно объяснить тем кто не играл, но я попробую. У нас есть одна стена, через неё пройти мы не можем. Если мы расположим ее на одном тайле, то всё прекрасно и понятно, но тогда она будет уж слишком толстой. Разработчики этой игры думали также, и сделали стены идеально плоскими, разместив их между(!) тайлами. То есть их ширина равна одному пикселю. В этом и есть вопрос: как же тогда делать коллизию, если она не занимает не один тайл? Если я не смог объяснить, поиграйте в эту игру и попробуйте обойти стены домов, тогда станет понятно.
|
Ответ: Vivo
ну сделать проверку пересечений линия :) если правильно понял
(про стенки) ? |
Ответ: Vivo
Не, это муторно. Тогда придется в основании каждой стенки рисовать еще линии. Должно быть что-то проще.
|
Ответ: Vivo
Мне такой вариант подумался.
Сделать плитки объектами (Type), задать им свойства "наличие стенки на краю плитки" по четерём направлениям. (id тайла тоже сюда, если уместно) Field walls%[4] ;0 - нет стены, 1 - есть А потом, когда игрок решит покинуть текущую плитку (curCell), делать проверку стенки в нужном направлении (direction). if(curCell\walls[direction]<>0) Return ;есть стена, никуда не двигаемся direction = {0,1,2,3} - заранее заданные константы направления, 0 например вверх и далее по часовой стрелке (как уж условишься сам). |
Ответ: Vivo
Так тоже не катит. Этот способ хорош, если ГГ пытается перейти с клетки со стенкой на свободную клетку. А если наоборот то фиг. Тогда придется еще просчитывать какая у него следующая клетка.
|
Ответ: Vivo
Ну так у клетки на которой стоит человечек тоже можно прописать этот параметр для той же стенки. Только надо еще отдельно хранить где-то массив этих стенок, ведь они могут быть разных типов (камень, кирпич, дерео, дверь, окно и т.д.)
|
Ответ: Vivo
Цитата:
Цитата:
Код:
;если инфа о стенках только в 1 клетке хранится, а не в обеих смежных, то две проверки рубишь фишку? :) |
Ответ: Vivo
Изометрическая графика? лолчто? как будут выглядеть блоки и их копание? придется переделывать всю графу и крабов!
|
Ответ: Vivo
ну да, я начинаю все заново.
|
Ответ: Vivo
если бы я мог использовать массивы, то твой способ хорош. Но из-за большого мира я не могу массивы двухмерные исользовать - RАМ уйдет слищком много.
|
Ответ: Vivo
|
Ответ: Vivo
Все, проблема со стенками ушла. Но сразу за ней появилась новая. Вот я на радостях создал 9000(это не мем, а настоящее количество) тайлов земли. Рисую я, как образованный человек, лишь те что рядом с игроком. А результат то - 20 fps от силы. Так в чем же дело? Тайлы земельки - элементы типа, то есть создается 9000 элементов. И пожалуйста, мне интересно решение без использование чанков. Мне нужны эти 9000 тайлов сразу вместе. Потребуете код - кину. Но думаю можно и без него справится, доходчиво изъяснился я.
|
Ответ: Vivo
А вот и код:
Напомню, проблема в том, что при создании больше 9000 тайлов начинаются лаги, хотя они даже не рисуются, так что непонятно и почему так происходит. |
Ответ: Vivo
For перебор, степени и корни в цикле.
Игрок может и не видит, но эвм о них всех думает с заботой. |
Ответ: Vivo
1. Переходи на блитцмакс:)
2. Сам цикл с большим числом проходов напрягающ для слабых тачек. Извлечение корня выкинуть можно, оперируя везде квадратами расстояний. На счёт занимания массивом слишком большого объёма памяти: где у тебя хранятся экземпляры тайлов? в списке. а что такое список? это хрень, состоящая из узлов, каждый из которых хранит указатель на данные и на следующие за ними данные. А в массиве что хранится? те же самые указатели. Так что жрать памяти должно примерно одинаково (поправьте знающие люди, если не прав), но работать с массивами в разы удобнее. :) 3. R1 R2 для размеров экрана не информативно (для меня) 4. Для поля 1000х1000 твоя прога заняла 42 мб оперативки. |
Ответ: Vivo
а на сколько макс сильнее в плане перебора For each? Я и сам об этом думал, он как ни как и на ОП язык тянет, но классы меня сильно пугают:)
Но точно как-то делают без чанков. В Террарии чанков нету вроде, а там значительно больше чем 9000 блоков(в 50 раз как минимум). Также старушка Diablo 2 скорее всего без чанков была, тоже с огромными картами. Видимо у них есть тайные знания... |
Ответ: Vivo
Возможно, большие поля делят на сектора, и далёкие сектора отсекают. И подгружают их по мере надобности. Это мои догадки лишь.
Про блитцмакс: как только ты поймёшь что такое класс, уже не захочешь без них программить.:) Вот ссылка на мануал по максу на русском, почитай на досуге, проведи аналогии с блитц3д: Wave’s~ BlitzMax Tutorial ~ 2004 - 7 Jan ~ Version 5 |
Ответ: Vivo
А и почему R1 и R2 не информативны? Вторая и третья строчка описывают что это за переменные. Я решил не делать меню с выбором разрешений, потому что всегда найдутся люди разрешения которых в списке нету, так что пусть пока играют с максимальным разрешением монитора.
Кстати, чанк и значит сектор:) |
Ответ: Vivo
> А и почему R1 и R2 не информативны?
х их з. не бери в голову. а что если делать поля 100х100, но не склеивать их на лету, а делать переход "на новый экран", как у тебя было изначально? |
Ответ: Vivo
Да, наверное это единственный выход. Но пример Diablo 2 меня насторожил. Карты там большие, особенно на те времена, а ведь игра шла и не лагала. Может блитц3Д безнадежен?
|
Ответ: Vivo
Цитата:
Для 2д блитцмакс лучше, это всё что я могу сказать про средство. Почитай в инете на счёт больших карт, и выбери решение подходящее; ну или сам придумай. |
Ответ: Vivo
Кажется понял почему есть проблемы. Оказывается я до сих пор ничего не знал о банках, а они как оказалось полезны.
|
Ответ: Vivo
Код:
Global rc=CountGfxModes() |
Ответ: Vivo
Вы это, бросайте там перемножать =) зачем эти коды выкладывать, у тебя массив в минуса уходит =))
Код:
For i=0 To Int((R1/2-cx+R1/2+32)/32) |
Ответ: Vivo
Код:
Global rc=CountGfxModes() |
Ответ: Vivo
В тайловой карте вычислять индексы по координатам нет надобности; вот если наоборот то можно.
Всем объектам карты задай индексы cellX, cellX. Игроку конечно тоже. При перемещении игрока изменяй индексы, пошел вверх - сделал cellY = cellY-1 и т.д. Сейчас ты проходишь по всему массиву, как делал в for each, но можно только ближние к игроку клетки брать Local startX% = player\cellX-viewCountX If(startX < 0) startX = 0 Local endX% = player\cellX+viewCountX If(endX >= fieldDimX) endX = fieldDimX-1 Local startY% = player\cellY-viewCountY If(startY < 0) startY = 0 Local endY% = player\cellY+viewCountY If(endY >= fieldDimY) endY = fieldDimY-1 Local xx%, yy% For xx=startX to endX For yy=startY to endY ; здесь только ближние к игроку Next Next |
Ответ: Vivo
только viewcount_x и viewcount_y еще на два поделить нужно. Большое спасибо!
|
Ответ: Vivo
Вложений: 1
Сейчас со мной произошла довольно странная вещь. Решив ещё потренироваться в работе с камерой, решил сделать 2D платформер с скроллингом. Возникли трудности, но когда я написал код, я ВНЕЗАПНО задумался, а почему он работает?:) Это повергло меня в шок: я не понял как работает мой же код. Когда я его писал, всё выходило машинально и я даже не думал что я делаю, просто делал и всё.
Код:
Function UpdWorld() |
Ответ: Vivo
Используй TAB, Люк!
|
Ответ: Vivo
Игрок рисуется в центре экрана; пол рисуется в cx,cy; нижний кубик в px,py.
Названия переменных "человеческие" сделай, и яснее станет что и как у тебя. |
Ответ: Vivo
я знаю где что рисуется и что эти переменные значат( cx - camera_x, px - player_x), но я не знаю почему так происходит, что квадрат в рх ру быстрее игрока:(
|
Ответ: Vivo
Rect R1/2-(200),R2/2+(200),10,10,1 ne? =)) вот а так Rect px/5,py/2,10,10,1=) ) медленнее :ok: а что нужно получить:dontknow:
|
Ответ: Vivo
ничего получать не нужно, все хорошо работает, но я не понимаю как:)
|
Ответ: Vivo
Ну так дело не в квадрате, а в плеере, который привязан к курсору то есть стоящему в середине экрана DrawImage player_image,R1/2,R2/2 =) ) DrawImage player_image,R1/2+px,R2/2+py/3
|
Ответ: Vivo
Я не понимаю почему px,py двигается быстрее чем игрок( если можно так выразится).
|
Ответ: Vivo
Пока моделлер работает, заняться мне нечем, поэтому решил-ка я позаниматься этим проектам. По-сколько кроме быдлокода я ничего в исходниках не нашёл, решил писать всё заново, отказавшись от экранов. Они были удобны, но многие говорили что это убивает геймлей. В общем, помогите с выбором:
1). Делать 9 чанков размером с экран, чтобы они окружали текущий экран. 2). Делать уйму маленьких чанков. 3). Послать всех и оставить экраны:) P.S. в первых двух случаях игрок находится всегда в центре экрана. И ещё, вдруг у кого завалялась инфа по данной теме, поделитесь, буду признателен( тоже к двум первым случаям относится). |
Ответ: Vivo
Где ссылка на скачку демки? (в первом посту искал не нашел)
|
Часовой пояс GMT +4, время: 23:45. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot