вопрос по алгоритму проверки (для игры)
продолжаю писать свою игру, и хотел бы услышать мнение других о том на сколько тот алгоритм проверки что я придумал "адекватный" со стороны производительности.
(не знаю как такая игра называется, но помню принцип, когда то играл в такую) Об игре: есть поле для игры на нем: с верху блоки(который нужно разбить), с низу "доска" которая отбивает мячь, и конечно мячик - самое интересное начинается когда нужно определить когда мяч взаимодействовал с блоком и с каким. структура уровня состоит из многомерной матрицы : ![]() Алгоритм: для каждой строки матрицы создать асоциативный массив в качестве идентификатора будет нижняя граница строки, пример: 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, время: 21:18. |