вопрос по алгоритму проверки (для игры)
продолжаю писать свою игру, и хотел бы услышать мнение других о том на сколько тот алгоритм проверки что я придумал "адекватный" со стороны производительности.
(не знаю как такая игра называется, но помню принцип, когда то играл в такую) Об игре: есть поле для игры на нем: с верху блоки(который нужно разбить), с низу "доска" которая отбивает мячь, и конечно мячик - самое интересное начинается когда нужно определить когда мяч взаимодействовал с блоком и с каким. структура уровня состоит из многомерной матрицы : ![]() Алгоритм: для каждой строки матрицы создать асоциативный массив в качестве идентификатора будет нижняя граница строки, пример: strings[250] = 3 // 3й массив по счету и в той строке проверять с каким элементом столкнулся мячик . П.с Хотелось бы услышать мнение и предложения. |
Цитата:
Структуры игру конструировал с учетом этих возможностей. |
Цитата:
|
мячик может ударить по блоку не только снизу, поэтому нужно отслеживать все стороны
я бы хранил блоки примерно так var blocks=[ {top:100,right:600,bottom:120,left:550}, ... ] в зависимости от начального и конечного положения мячика сделал бы поиск по блокам (максимум по двум "границам") на предмет попадания соответствующей "границы" в диапазон перемещения мячика параметров по блокам может быть больше, можно будет отслеживать "падающие" блоки... |
Цитата:
var standart = { width : 50, height : 20, bg : "img.jpg", type : 1 }; function Blocks() { this.x = 20; this.y =50; } Blocks.prototype = standart; var bl = new Blocks(); bl.width = 40; |
Цитата:
если данные для "карты" блоков будут подгружаться отдельным файлом, то проще сразу подгружать готовым объектом (JSON) или использование prototype обязательное условие задания? |
kaf,
данные уровня буду подругажатся одним обьектом и в нем будет и матрица и ссылки на тексктуры. вот так он выглядит пока, для первого уровня var firstLvl = { Number: 1, Texture: { BackgroundImage: "Levels/Level 1/background.jpg", Blocks: {// ðàçìåð óíè÷òîæàåììûõ îáüåêòîâ width: 50, height: 20 }, offset: { left: 0, top: 10 } }, Board: { Color:"Black", //Image:"",// íàéòè êàðòèíêó size: { width: 250, height:15 }, Positions:{ x: "center",// or 'left' or 'right' y:160 // îòñòóï ñ íèçó } }, Ball: { radius: 20, position: "center",//position:[left || right || center] .( position on object Board) color: "green", } } firstLvl.TextureMatrix = createMatrix({ width: firstLvl.Texture.Blocks.width + firstLvl.Texture.offset.left, height: firstLvl.Texture.Blocks.height + firstLvl.Texture.offset.top, fill: { width: "full", height: 300,// â ïèêñåëÿõ(çà÷åííèå "full" íå ïðèíèìàåòñÿ) fnc: structureOne } }); и это не обязательное условие но делать буду так, я уже это продумал просто обьяснять полностью структуру будет долго да и сильно понятно не получиться... |
cyber,
Ваша структура и так понятно! (она почти у всех одинакова). Но вам до этого правильно сказали. "ведь все-равно придется группировать эти блоки для удобства перебора при проверках" Так что желательные не делать такие ссылки ) Просто если несколько ячеек будут иметь одну ссылку на блок, то по вашей логике это будет единый объект, с едиными переменными! |
Цитата:
в матрице буду храниться только типы блоков , а обьекты типов буду храниться в отдельно массиве [0,1,2,0,2,1]//0 - пусто, 1 - тип заданный по умолчанию, 2 - тип из массива "типов" var types = []; types[2] = { width:60, img:"img.jpg" }// если какое то свойство не указанно оно будет браться из типа 1 . как то так. |
вот такая структура объекта уровня в игре, на сколько она удобно?
var firstLvl = { Number: 1, Texture: { BackgroundImage: "Levels/Level_1/background.jpg", Blocks: {// размер уничтожаеммых обьектов width: 50, height: 20, life: 1, color: "black", offset: { left: 10, } }, lineSpacing: 10// меж строчные отступы }, Board: { Color: "Black", //Image:"",// найти картинку size: { width: 250, height: 15 }, Positions: { x: "center",// or 'left' or 'right' y: 20 // отступ с низу }, Offset: { x: 40, y: 0 } }, Ball: { radius: 20, position: "center",//position:[left || right || center] .( position on object Board) color: "green", speed: 5 } } var types = firstLvl.Texture.Blocks.types = []; types[4] = { width: 290, height: 30, color: "yellow", life: 4, offset: { left: 200, top: 100, bottom:20 } }; types[3] = { offset: { left: 200 }, color:"green", inherit: 2 // отсутсвующие свойства наследуються от указанного типа }; types[2] = { width: 50, height: 20, color: "red", life: 2, }; firstLvl.TextureMatrix = [ [4], [3, 2, 2, 2, 2], [3, 2, 2, 2, 2], [3, 2, 2, 2, 2], [3, 1, 1, 1, 1], [3, 1, 1, 1, 1], ]; |
Часовой пояс GMT +3, время: 09:31. |