Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   реализовать попадание в цель (https://javascript.ru/forum/misc/43941-realizovat-popadanie-v-cel.html)

cyklop_77 27.12.2013 13:08

реализовать попадание в цель
 
ребят, объясните пожалуйста хотя бы на словах как на этой страничке можно реализовать событие, которое наступает при совпадении координат снаряда(объект bullet) и вражеского корабля(объект ShipEnemy)

хватит ли тех нескольких паттернов, которые я использовал на страничке(factory, observer, singletone) или нужно изучить ещё что-то?

ps
вот то же самое, но на fiddle

ksa 27.12.2013 13:20

Цитата:

Сообщение от cyklop_77
событие, которое наступает при совпадении координат снаряда(объект bullet) и вражеского корабля(объект ShipEnemy)

Снаряд ведь движется... Т.е. наступает момент вычисление его новых координат - вот тут и проверь, не попал ли он в кого-либо.

cyklop_77 27.12.2013 14:17

это всё понятно. но не соображу как проверить

мои мысли по этому поводу были такие:
вражеский корабль это не точечный объект, а прямоугольник. то есть для проверки нужно будет создать массив, каждый элемент которого будет соответствовать определённому вражескому кораблю и в свою очередь будет иметь 4 элемента с индексами top1, top2, left1, left2

непонятно где хранить этот массив

допустим, я создам для этой цели отдельный объект - deathCoords. в нём будут:
1. храниться массив с координатами вражеских кораблей
2. храниться метод, который будет срабатывать при попадании снаряда во вражеский корабль
3. при каждом шаге снаряда в этот объект будут передаваться параметрами: координаты снаряда, id снаряда
4. при каждом шаге вражеского корабля в этот массив будут передаваться: координаты корабля, id корабля

но такой подход мне показался неверным. потому что во-первых это уже напоминает процедурный стиль, а не ООП. во-вторых потому что проверка координат это всё таки не сущность(как например снаряд, звезда, вражеский корабль и т.д.), это скорее логика. и под неё выделять объект мне кажется не правильно

ksa 27.12.2013 14:19

Цитата:

Сообщение от cyklop_77
вражеский корабль это не точечный объект, а прямоугольник. то есть для проверки нужно будет создать массив, каждый элемент которого будет соответствовать определённому вражескому кораблю

Так у тебя уже есть сами корабли. :) Зачем еще какой-то "массив"?

ksa 27.12.2013 14:21

Цитата:

Сообщение от cyklop_77
проверка координат это всё таки не сущность

Таки метод. :D
Например того же "снаряда"... Типа попал/не_попал...

cyklop_77 27.12.2013 16:26

вот сделал как вы советовали. скажите пожалуйста, не слишком ли много ресурсов я использовал для такой простой проверки? дело в том, что если результаты вычислений вывожу в консоль, то браузер почти виснет... может существуют какие-то шаблонные ООП-решения для подобной задачи всё таки?..

ps
то же самое в fiddle

ksa 28.12.2013 14:56

Цитата:

Сообщение от cyklop_77
вот сделал как вы советовали

Как там играть? :D

Цитата:

Сообщение от cyklop_77
не слишком ли много ресурсов я использовал для такой простой проверки?

Х/з какие там ресурсы... Проверить в цикле N кораблей это разве "использование ресурсов"? :blink:

cyklop_77 29.12.2013 13:47

да как ни назови. прогонять несколько циклов при каждом движении наряда это как то не очень хорошо

cyklop_77 30.12.2013 13:06

Цитата:

Сообщение от ksa (Сообщение 289776)
Как там играть? :D

а играть тута :)


Часовой пояс GMT +3, время: 16:03.