Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JavaScript. Физика взрыва. (https://javascript.ru/forum/misc/24028-javascript-fizika-vzryva.html)

Isaac 15.12.2011 19:06

JavaScript. Физика взрыва.
 
Здравствуйте.
Подскажите пожалуйста, может, кто-то сталкивался с подобными задачами или знает, как ПРАВИЛЬНЕЕ реализовать.
Реализовать нужно на JavaScript.
Есть земля, в нее попадает снаряд, который разрушает(делает в ней впадину/углубление), все зависит от попавшего в нее снаряда + кроме впадины нужно реализовать осыпание земли.
Я думаю это реализовать следующим способом:
Имеем 2 слоя, один под другим. Верхний слой - картинка земли или гор, второй слой - канвас, который и будет разрушаться. Далее я высчитываю координаты конечной точки снаряда. Сам снаряд имеет радиус поражения, после того, как снаряд достиг конечной точки, я стираю первый слой - тот который канвас - имитирую взрыв(не знаю, как правильнее имитировать, гиф-картинку точно не хочу использовать, скорее всего буду спрайтами делать анимацию) и во время этого взрыва подменяю верхнюю картинку на новую с готовой впадиной.
Но мне этот вариант, мягко говоря, кажется не серьезным. С разработкой игр сталкиваюсь впервые. Подскажите пожалуйста, как правильнее подобное реализовать или может есть какие-то примеры с кодом?
Так же очень важен процесс осыпания земли после взрыва.
Да, и писать всю физику буду сам, без box2d и других подобных движков.
Очень буду признателен.
Спасибо.

melky 15.12.2011 19:12

хм. вы уверены в том, что реализация взрыва на спрайтах будет лучше, чем его реализация на canvas ?

Isaac 15.12.2011 19:14

Цитата:

Сообщение от melky (Сообщение 143231)
хм. вы уверены в том, что реализация взрыва на спрайтах будет лучше, чем его реализация на canvas ?

В том то и дело, что не уверен, поэтому прошу совета...
А как реализовать взрыв в канвасе? Полностью отрисовывать всю анимацию ?

trikadin 15.12.2011 19:21

Таймер уже писали, вот и бомба теперь будет... :D


Цитата:

Сообщение от melky
хм. вы уверены в том, что реализация взрыва на спрайтах будет лучше, чем его реализация на canvas ?

А мне кажется, что будет. Естественно, всё зависит от того, как делать, однако, если просчитывать весь взрыв (соответственно, воронку, разлёт земли, etc), то спрайты будут быстрее.

Isaac 15.12.2011 19:24

[quote=trikadin;143239]Таймер уже писали, вот и бомба теперь будет... :D
бомбу я знаю, как сделать, меня интересует имитация самого взрыва

melky 15.12.2011 19:25

вы могли бы обратиться к solovei95. он вроде людит и активно изучает канвасы и всё, что с ним связано. не обращайте внимания на его репутацию :)

Цитата:

Сообщение от trikadin (Сообщение 143239)
А мне кажется, что будет. Естественно, всё зависит от того, как делать, однако, если просчитывать весь взрыв (соответственно, воронку, разлёт земли, etc), то спрайты будут быстрее.

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

а потом не понравится цвет земли.. поменял. "ну что же, пора бы и спрайт поменять". как-то не очень :) можно для ie оставить.

trikadin 15.12.2011 19:28

Цитата:

Сообщение от Isaac
бомбу я знаю, как сделать

Да ты опасный)

Если вам нужна полная имитация взрыва, то это вам гуглить в сторону физики и читать вот такие умные статьи)

А если нет - то просто рисуете картинку, потом картинку со взрывом, и т.д. В нужный момент просто подставляете нужное.

trikadin 15.12.2011 19:30

Цитата:

Сообщение от melky
удар снарядом по воде - и разлетаются груды земли, благодаря спрайту.

О, а ты предлагаешь считать плотность объекта?) У воды и у земли разная плотность, и будет разный разлёт материала, соответственно. Будет матан)

melky 15.12.2011 19:54

Цитата:

Сообщение от trikadin (Сообщение 143246)
О, а ты предлагаешь считать плотность объекта?) У воды и у земли разная плотность, и будет разный разлёт материала, соответственно. Будет матан)

:D почему же сразу матан ? пара формул и дело в шляпе.

trikadin 15.12.2011 19:55

Цитата:

Сообщение от melky
почему же сразу матан ? пара формул и дело в шляпе.

Да на здоровье) Просто человек про землю спрашивал. В этом уникальном случае быстрее и проще делать через спрайты.

Isaac 15.12.2011 19:56

Цитата:

Сообщение от melky (Сообщение 143255)
:D почему же сразу матан ? пара формул и дело в шляпе.

Можно пару ссылок на эту тему?

melky 15.12.2011 20:06

Цитата:

Сообщение от trikadin (Сообщение 143256)
Да на здоровье) Просто человек про землю спрашивал. В этом уникальном случае быстрее и проще делать через спрайты.

согласен. Но, если больше ни для чего не делать.

Цитата:

Сообщение от Isaac (Сообщение 143257)
Можно пару ссылок на эту тему?

к сожалению, не имею. под парой формул я имел в виду формулы физики - свободное падение тел и т.д. их можно найти в интернете.

trikadin 15.12.2011 20:08

Цитата:

Сообщение от Isaac
Можно пару ссылок на эту тему?

Так я же писал выше...

1) Гуглим по фразам "Падение снаряда", "Взрыв снаряда", "Радиус разлёта осколков".
2) Матан.
3) ???
4) PROFIT!

Isaac 15.12.2011 23:05

Ок, формулы нашел.
Спасибо огромное!
Подскажите, как быть с канвасом? Есть такой мтод, который будет стерать слой, на котором взорвалась бомба/снаряд?
Или что можете предложить?

melky 15.12.2011 23:55

Цитата:

Сообщение от Isaac (Сообщение 143325)
Ок, формулы нашел.
Спасибо огромное!
Подскажите, как быть с канвасом? Есть такой мтод, который будет стерать слой, на котором взорвалась бомба/снаряд?
Или что можете предложить?

его придётся стирать и вырисовывать заново 24 раза в секунду (глаз видит 24 фпс максимум). что такое "стирать слой, на котором взорвалась бомба" ? написанный вами код вашей игры должен сам вычислять, куда упадёт бомба, и какой слой она затронет.

trikadin 15.12.2011 23:59

Цитата:

Сообщение от melky
24 раза в секунду

15-20 вполне хватит. Нечего процессорные такты зазря жрать) Глаз перестаёт видеть смену кадра на 14 fps, что ли.

Isaac 16.12.2011 00:05

Цитата:

Сообщение от melky (Сообщение 143330)
его придётся стирать и вырисовывать заново 24 раза в секунду (глаз видит 24 фпс максимум). что такое "стирать слой, на котором взорвалась бомба" ? написанный вами код вашей игры должен сам вычислять, куда упадёт бомба, и какой слой она затронет.

Не подскажете метод в канвасе, который может стереть?
Или ссылку на пример?
Как мне быть, если поверх канваса будет картинка земли, которую нарисовал дизайнер? Или нужно полностью все отрисовывать в канвасе?

trikadin 16.12.2011 00:06

Цитата:

Сообщение от Isaac
Или нужно полностью все отрисовывать в канвасе?

В канвасе нужно отрисовывать только то, что будет изменяться.

Isaac 16.12.2011 00:06

Цитата:

Сообщение от trikadin (Сообщение 143332)
15-20 вполне хватит. Нечего процессорные такты зазря жрать) Глаз перестаёт видеть смену кадра на 14 fps, что ли.

То есть перерисовать мне нужно через 0.5 сек, как упал снаряд?

Isaac 16.12.2011 00:08

Цитата:

Сообщение от trikadin (Сообщение 143335)
В канвасе нужно отрисовывать только то, что будет изменяться.

Это я понял, вопрос в том: как правильнее сделать? Всю картинку/землю рисовать в канвасе или png положить сверху и перерисовывать/стирать его?

melky 16.12.2011 00:10

Цитата:

Сообщение от Isaac (Сообщение 143337)
То есть перерисовать мне нужно через 0.5 сек, как упал снаряд?

нет. через 1/20 секунды минус время выполнения скрипта для поддержания постоянного количества кадров.
setTimeout(repaint_canvas, 1000/20 - script_execution_time);


навскидку - это будет (1000/20-10) = (50-10) = 40.

trikadin, а все ставят 10 мсек :)

Isaac 16.12.2011 00:19

Цитата:

Сообщение от melky (Сообщение 143339)
нет. через 1/20 секунды минус время выполнения скрипта для поддержания постоянного количества кадров.
setTimeout(repaint_canvas, 1000/20 - script_execution_time);


навскидку - это будет (1000/20-10) = (50-10) = 40.

trikadin, а все ставят 10 мсек :)

В єтом промежутке времени я смогу создать новій канвас, но пользователь сразу увидит діру в земле, а мне нужен эффект разрушения, как будто дыра образуется под воздействием взрыва.
То есть мне в цикле нужно перерисовывать несколько раз, с каждым разом делая дыру все больше?

trikadin 16.12.2011 00:21

Цитата:

Сообщение от Isaac
То есть мне в цикле нужно перерисовывать несколько раз, с каждым разом делая дыру все больше?

Браво. Правильно поняли.

Цитата:

Сообщение от melky
trikadin, а все ставят 10 мсек

Ну и зря, что я могу сказать)

Isaac 16.12.2011 00:26

Цитата:

Сообщение от trikadin (Сообщение 143343)
Браво. Правильно поняли.

Ну и зря, что я могу сказать)

Спасибо, не все так запущенно , как кажется.
Только вот не пойму: ведь дизайн земли будет нарисован дизайнером в фотошопе или еще где и я его запихну в канвас, как мне тогда сделать? Несколько видов дизайна земли нужно и после каждого взрыва подставлять в канвас новую картинку во время перерисовки? Но ведь нужно сделать правдноподобно и чтоб каждая дыра в земле отличалась от предыдущей, не будет же дизайнер рисовать 100 разных дизайнов для всех вариантов взрывов.
Подскажите пожалуйста, как поступить в таком случае?

trikadin 16.12.2011 00:36

Запихнуть картинку в канвас. Ф-цию не подскажу, но так точно можно.

Isaac 16.12.2011 00:46

Цитата:

Сообщение от trikadin (Сообщение 143346)
Запихнуть картинку в канвас. Ф-цию не подскажу, но так точно можно.

Вы имеете в виду, что если картинка будет в канвасе и я буду очищять канвас, то картинка будет очищятся вместе с ним? Я правильно понял?

trikadin 16.12.2011 00:47

Я имею в виду, что вы запихнёте её в канвас и будете перерисовывать те части, которые нужны.

Вы всегда такой паникёр?

Isaac 16.12.2011 00:53

Цитата:

Сообщение от trikadin (Сообщение 143349)
Я имею в виду, что вы запихнёте её в канвас и будете перерисовывать те части, которые нужны.

Вы всегда такой паникёр?

Да, но проблема в том, что у меня каждый раз будет углубление не похожее на предыдущее, которое будет рассчитываться в физике и поэтому подкладывать каждый раз картинку - думаю, что не получится... или я не так понимаю?

trikadin 16.12.2011 00:57

Не так понимаете) Вы меняете только часть холста. Ту, в которой делается углубление. Какие проблемы?)

Isaac 16.12.2011 01:00

Цитата:

Сообщение от trikadin (Сообщение 143354)
Не так понимаете) Вы меняете только часть холста. Ту, в которой делается углубление. Какие проблемы?)

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

trikadin 16.12.2011 01:06

Isaac, я перестал вас понимать. Просто подумайте о том, что будет происходить с картинкой в момент взрыва.

Isaac 16.12.2011 01:10

Цитата:

Сообщение от trikadin (Сообщение 143361)
Isaac, я перестал вас понимать. Просто подумайте о том, что будет происходить с картинкой в момент взрыва.

Я понимаю, что при взрыве, каждый заданный интервал я меняю картинку на которой впадина с каждым разом все больше.
Вопрос: могу ли я каким-то образом "достучаться" до пикселей картинки и удалять те, которые мне необходимы?

trikadin 16.12.2011 01:16

Цитата:

Сообщение от Isaac
могу ли я каким-то образом "достучаться" до пикселей картинки и удалять те, которые мне необходимы?

Ахаха) А что, по вашему, canvas делает? Это же растровая графика, естественно, вы можете "достучаться" до пикселей)

Isaac 16.12.2011 01:17

Цитата:

Сообщение от trikadin (Сообщение 143365)
Ахаха) А что, по вашему, canvas делает? Это же растровая графика, естественно, вы можете "достучаться" до пикселей)

:)
а свойство покажете, которое это реализует?

trikadin 16.12.2011 01:22

Не-а. Гугл в помощь. С канвасом я так и не дошёл поработать.

Isaac 16.12.2011 01:24

Цитата:

Сообщение от trikadin (Сообщение 143367)
Не-а. Гугл в помощь. С канвасом я так и не дошёл поработать.

Понял, но и на том спасибо огромное!
А ві вообще, как считаете, лучше подменять картинку каждій раз при взріве или удалять пиксели на ней?

trikadin 16.12.2011 01:25

Цитата:

Сообщение от Isaac
А ві вообще, как считаете, лучше подменять картинку каждій раз при взріве или удалять пиксели на ней?

Удалять пиксели)

Magneto 16.12.2011 03:01

Обучение canvas

ksa 17.12.2011 12:31

Isaac, есть у нас один местный умелец-физик... Таки он может помочь тебе с формулами по взрыву.
И берёт немного - 100р. Готов ему заплатить?

Isaac 19.12.2011 16:20

Цитата:

Сообщение от ksa (Сообщение 143837)
Isaac, есть у нас один местный умелец-физик... Таки он может помочь тебе с формулами по взрыву.
И берёт немного - 100р. Готов ему заплатить?

100р за все расчеты ?


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