|
|
|||||
Бесконечный мир: как реализовать?
У меня возникла идея создать оригинальную игру на АС3, но пока что не представляю, как это сделать. Нужно создать бесконечный мир, который будет генерироваться на ходу и удаляться сразу предыдущие генерации карты. Я впервые в геймдеве, проходил несколько туториалов по геймдеву для новичков, все понял, но это был простой Арканоид. Если не подскажите с генерацией карты, хоть подскажите - копать куда?
|
|
|||||
А что подсказывать-то? И так же все ясно. Перемещается персонаж. На основе его текущего положения высчитывается какой кусок мира вокруг него должен показываться. Все остальное убирается. Профит.
Какого-то универсального способа это сделать не существует. Все индивидуально. |
|
|||||
Нет, вы не поняли. Карта должна быть случайной и бесконечной.
Я так и не понял насчет создания массивов уровня. Меня особенно интересует этот момент. Ну, допустим, создам я массив уровня из различных цифр, обозначающих бонусы, но вот как превратить этот массив в сетку из мувиклипов - я так и не понял. Сам скопировал, но сколько не сидел, не мог понять работу. |
|
|||||
Цитата:
- Если уровень бесконечный - то массив из различных цифр будет бесконечным, а значит невозможным. Как вы его создали... Один из подходов: - Делим в уме бесконечное пространство на бесконечное число квадратных секторов (размером примерно с экран) - Храним в памяти, рисуем и строим только те сектора, которые попадают в экран - По координатам героя мы можем вычислить индексы сектора, в котором он стоит - Заводим список _видимых_ секторов, с которыми будем работать, в которых будем искать предметы - При появлении нового сектора на экране - заполняем его рандомными предметами с момощью _детерминированного_ рандом-генератора, инициализированного индексом сектора (чтобы сколько человек туда не приходил - сектор не менялся), добавляем его в список - Когда сектор уходит с экрана - убираем его из списка и с экрана предметы сносим. P.S. Скриншот того что пытаетесь реализовать сделайте - разговор предметнее будет |
|
|||||
К посту выше: используйте генераторы псевдослучайных чисел. Например: http://lab.polygonal.de/?p=162
__________________
if (love is true) break my.heart; |
|
|||||
Цитата:
Например, у одного из туториалов по платформеру такой код: //this guy will hold all of the blocks var blockHolder:Sprite = new Sprite(); //then we add him to stage addChild(blockHolder); function createLvl():void { //getting the current level we are on var lvlArray:Array = MovieClip(root)['lvlArray'+lvlCurrent); var lvlColumns:int = Math.ceil(lvlArray.length/16); //now we must create the level for(var i:int = 0; i < lvlArray.length; i++) { //checking if we move onto the next row //this checks if i is divisible by # of columns if(i / lvlColumns == int(i / lvlColumns)) { row ++ } if(lvlArray[i] == 1) { //making a new block var newBlock:Block = new Block(); //drawing the block newBlock.graphics.beginFill(0xFFFFFF, 1); newBlock.graphics.drawRect(0,0,25,25); newBlock.x = (i - (row-1)*lvlColumns)*newBlock.width; newBlock.y = (row-1)*newBlock.height; //then finally adding it to the stage. blockHolder.addChild(newBlock); } else if (lvlArray[i] == 'MAIN') { mcMain.x = (i-(row-1)*lvlColumns)*newBlock.width; mcMain.y = (row-1)*newBlock.height; } } //reset the row for another use row = 0; //then we center the screen on the main character //this variable will tell us how far away we have to move everything //250 is about centered flr mcMain we'll use that number var mainMove:int = 250-mcMain.x; //then we move mcMain and the entire level to center on him mcMain.x += mainMove; } //running the createLvl function createLvl(); Это лишь кусок кода, создающий уровень. До меня трудно доходит чужой код(не знаю, у всех ли так поначалу было...), поэтому не могу понять, что он делает в деталях. |
|
|||||
Цитата:
Насколько я понял - там уровень представлен 1-мерным массивом, в который загнали построчно 2-мерный. row = i / lvlColumns - получается номер строки column = i - (row - 1) * lvlColumns - номер столбца Умножаем на размеры ячейки - получаем координаты Но я бы мозг свой так не мучал, а просто прошёлся бы 2-мя циклами: Или вообще бы 2-мерный массив использовал |
|
|||||
[+1 25.10.13]
[+4 18.03.14] |
Может Openzoom поможет? Сайт сочинской олимпиады вроде использует его. Хотя там все предопределено
|
|
|||||
Цитата:
А теперь вопрос: можно ли, используя класс-генератор псевдослучайных чисел, заполнять массив методом push нужными значениями, под размер сцены и поместить код в функцию, будет ли каждый раз при вызове функции генерировать новый массив, принимая в себя координаты предстоящего куска карты? Сойдет ли данная конструкция для бесконечного игрового мира? |
Часовой пояс GMT +4, время: 11:04. |
|
« Предыдущая тема | Следующая тема » |
|
|