Pull to refresh

Comments 35

В копилку неточностей, в b2BodyDef для снаряда поставьте потом bullet в true, т.к. сейчас при низком фпс и высокой скорости запуска, он пролетает сквозь объекты.
Для AS3 есть еще шикарный набор видеотуториалов по боксу от Todd'а — www.kerp.net/box2d/
Правда там версия старая и на 2.1а код не взлетит, но для начального понимания — классная штука.
Да, про bullet вот сейчас тоже в мане увидел, спасибо. Обязательно поправлю.
пиши, рассказывай и ни в коем случае не останавливайся :)
Здорово! Очень интересная статья, буду ждать продолжения.
А объясните, пожалуйста, почему координаты мыши считаются таким образом? Откуда деление на 30?

           handleMouse = function(e) {
                    mouseX = (e.clientX - canvasPosition.left) / 30;
                    mouseY = (e.clientY - canvasPosition.top) / 30;
            };

Видимо из-за
«Так же стоит добавить, что Box2d не оперирует пикселями как данными о координатной сетке. Он изначально пректировался под использование стандарной системы Си — поэтому мы имеем метры, килограммы, секунды, и соответствующие преобразования. Сейчас я не буду углубляться подробно в эту область, просто имейте в виду, что 1 метр в представлении Box2d — это примерно 30 пикселей экранного пространства.»
Я выше в статье говорил об этом. 1 метр в координатах Box2d при приотсутствии преобразований — это 30px на мониторе. Отсюда и деление на 30, чтобы преобразовать текущую координату мыши в пикселях в координату мира Box2d в метрах.
Для того, чтобы не появлялось таких вопросов — следует отказаться от магических чисел и присвоить их значение константе. Такой код не вызвал бы вопросов:
handleMouse = function(e) {
   mouseX = (e.clientX - canvasPosition.left) / BOX2D_METER_IN_PIXELS;
   mouseY = (e.clientY - canvasPosition.top ) / BOX2D_METER_IN_PIXELS;
};
Наверное, корректнее всего было бы как-то BOX2D_METER_AS_PIXELS, чтобы без двухсмысленности. Потому что я имел ввиду «метр в пикселях».
Спасибо за статью. Хороший мотиватор самому попробовать, что-нибудь «подвигать» с помощью box2d.
Я тоже в начале перепугался и где-то сутки все переваривал, чтобы себя заставить зарыться в API Box2d. Но потом все оказалось не так страшно, как казалось на первый взгляд. Так что, это все-таки не Rocket Science, осилить можно.
Хочу заметить, что иногда резинка не исчезает, и птица, улетев, оттягивается и улетает назад. В чем может быть причина?
Да, есть такая проблема, я говорил о ней в статье — птица «пролетает» центр сцепки, в итоге сцепка (MouseJoint т.е.) не исчезает и птицу тянет назад. В следующей статье я эту багу надеюсь побороть.
Спасибо, очень даже не плохо. Кстати, как с производительностью, например, если сравнивать с Flash-платформой? Порт и для нее есть. Проводили stress-тесты?
Не за что, рад, что вам понравилось. Нет, до стресс-тестов руки еще не дошли. Как только кристаллизуется хоть какой-то более вменяемый результат с меньшим количеством граблей и большим количеством фич, графикой, кешированием — попробую сделать тестовое сравнение.
А можно еще вопрос вот такой: почему доски не проходят «сквозь» игровой мир, а птица может вылетать за него?
На самом деле она не пролетает — она исчезает, как другие свиньи на экране. Птица же в примере — это просто летающая свинья, а обработчику соприкосновений в принципе все равно, хоть свинья летит, хоть стоит на месте — он будет обрабатывать ее контакт с кем-то. Значит, при ударе нашей птицесвиньи об стену возникает импульс, явно больший тройки — ну и ее удаляют с поля как взорвавшуюся. Вот и вся магия.
Интересная статья, спасибо
А var при объявлении переменных специально не используете?
Не за что на самом деле, очень рад, что такие заметки приветствуются.
Var ограничивает область видимости создаваемого объекта, это первое. Второе — нужен был работающий пример, который после можно приводить в чувства. Я обязательно займусь правильным, с точки зрения написания кода на javascript, оформлением — просто в этом случае хотелось чего-то рабочего и побыстрее ^_^
Ну, что сказать? Мужик! Я бы тебе даже денег дал, только бы ты закончил эту серию рассказов :)
И все потому, что самому очень руки чешутся создать свою, пускай не интересную другим, игру. Но времени на это катастрофически не хватает.
А вот почитать и посмотреть код — будет очень интересно.
А там, глядишь, и на свою время найдется.
У Вас не времени нет, а желания.
Как, впрочем, и у меня
Желание есть и я на самом деле почти каждый день немного читаю и что-то делаю по теме.
Просто решил быть скромнее, написав коммент, но меня, вижу, тут же за это наказали ;)
Очень интересно. Спасибо за хороший пост. Буду применять в своих наработках ;)
UFO landed and left these words here
Only those users with full accounts are able to leave comments. Log in, please.