|
|
|||||
[+3 31.07.12]
[+1 27.08.13] |
Нужна литература о Box2D на русском
Встречали ли вы литературу о Box2D на русском языке с примерами, если да, скиньте пожалуйста ссылку, желательно бесплатный источник...
П.С. Решил занятся изучением Box2D вплотную, но с английским не так хорошо как хотелось бы. Если были уже посты на эту тему, пожалуйста не злитесь? лучше скиньте ссылку на пост)
__________________
Хоть ты эту красоту не назовёшь граблями, всё равно никогда не наступай на них. |
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Есть серия уроков
http://demiart.ru/forum/index.php?showtopic=181251 |
|
|||||
Заняться вплотную это прочитать и понять исходник. Про nape на http://flashgameblogs.ru/ писали, по box2d тоже что-то было, можете поискать там.
__________________
:) |
|
|||||
Регистрация: Sep 2006
Сообщений: 453
|
http://redefy.net/category/box2dflash/ здесь хорошие уроки
|
|
|||||
Регистрация: Jun 2012
Сообщений: 70
|
Лучше немного подучить английский и больше не будет возникать проблем.
На будущее, хороший блог(на английском) http://www.emanueleferonato.com/ Есть куча демок/примеров работы с box2d и еще куча всего. Код в демках ужасный, но все же кое-чему можно научится.
__________________
Блог: http://devizgl.blogspot.com/ |
|
|||||
Цитата:
PS: Так как информация осваивается слишком быстро, то свойственно скоро забывать пройденное. Поэтому сразу советую написать небольшую утилитку, обобщающую некоторые методы. Вот, например, моя. Прошу не судить строго - я к этому классу еще не возвращался. Писал в первый день во время изучения box2D: package { import Box2D.Collision.Shapes.*; import Box2D.Common.Math.*; import Box2D.Dynamics.*; import flash.display.*; import game.subjects.*; /** * Box2D basic transformations * @author HardCoder */ public class B2Transformer { /** * Constant of transformation pixels/meters */ public static const METERS:int = 30; /** * Constant to update world */ public static const TIMES_STEP:Number = 1 / 60; /** * Constant to update world */ public static const VELOCITY_ITERATIONS:int = 10; /** * Constant to update world */ public static const POSITION_ITERATIONS:int = 10; public function B2Transformer() { } /** * Converts meters to pixels * @param meters - number of meters * @return number of pixels */ public static function metersTopixels(meters:Number):Number { return METERS * meters; } /** * Converts pixels to meters * @param pixels - number of pixels * @return number of meters */ public static function pixelsToMeters(pixels:Number):Number { return pixels / METERS; } /** * Create Box2D world * @param gravity - world gravity * @return Box2D world */ public static function createWorld(gravity:b2Vec2 = null):b2World { if (!gravity) gravity = b2Vec2.Make(0, 0); return new b2World(gravity, true); } /** * Adds the debug drawing to b2World * @param world - b2World * @param sprite - sprite, where graphics will be displayed */ public static function addDebugDraw(world:b2World, sprite:Sprite):void { var debugDraw:b2DebugDraw = new b2DebugDraw(); debugDraw.SetSprite(sprite); debugDraw.SetDrawScale(30); debugDraw.SetFillAlpha(0.5); debugDraw.SetLineThickness(1); debugDraw.SetFlags(b2DebugDraw.e_jointBit | b2DebugDraw.e_shapeBit); world.SetDebugDraw(debugDraw); } /** * Creates circle body to b2World * @param world - b2World * @param type - (b2Body.b2_staticBody:uint = 0, b2Body.b2_kinematicBody:uint = 1, b2Body.b2_dynamicBody:uint = 2) * @param x - position in the world in pixels * @param y - position in the world in pixels * @param radius - circle radius in pixels * @param userData - data that is linked to this body * @param allowSleep - will the body be automaticly deactivated * @return b2Body */ public static function createCircleBody(world:b2World, type:uint, x:Number, y:Number, radius:Number, userData:* = null, allowSleep:Boolean = true):b2Body { var bodyDef:b2BodyDef = new b2BodyDef(); bodyDef.type = type; bodyDef.allowSleep = allowSleep; bodyDef.userData = userData; bodyDef.position.Set(B2Transformer.pixelsToMeters(x), B2Transformer.pixelsToMeters(y)); var body:b2Body = world.CreateBody(bodyDef); var circleShape:b2CircleShape = new b2CircleShape(B2Transformer.pixelsToMeters(radius)) var fixture:b2FixtureDef = new b2FixtureDef(); fixture.density = 1000; fixture.friction = 0; fixture.restitution = 0; fixture.shape = circleShape; body.CreateFixture(fixture); return body; } /** * Creates polygon body to b2World * @param world - b2World * @param type - (b2Body.b2_staticBody = 0, b2Body.b2_kinematicBody = 1, b2Body.b2_dynamicBody = 2) * @param x - position in the world in pixels * @param y - position in the world in pixels * @param width - poligon width in pixels * @param height - poligon height in pixels * @param userData - data that is linked to this body * @param allowSleep - will the body be automaticly deactivated * @return b2Body */ public static function createPolygonBody(world:b2World, type:uint, x:Number, y:Number, width:Number, height:Number, userData:* = null, allowSleep:Boolean = true):b2Body { var bodyDef:b2BodyDef = new b2BodyDef(); bodyDef.type = type; bodyDef.allowSleep = allowSleep; bodyDef.userData = userData; bodyDef.position.Set(B2Transformer.pixelsToMeters(x), B2Transformer.pixelsToMeters(y)); var body:b2Body = world.CreateBody(bodyDef); var polygonShape:b2PolygonShape = b2PolygonShape.AsBox(B2Transformer.pixelsToMeters(width) / 2, B2Transformer.pixelsToMeters(height) / 2); var fixture:b2FixtureDef = new b2FixtureDef(); fixture.density = 2; fixture.friction = 0; fixture.restitution = 0; fixture.shape = polygonShape; body.CreateFixture(fixture); return body; } } } Ну и, конечно, в методах можно по своему настроить density, friction и restitution. Я писал под конкретную игру, поэтому эти свойства фиксированы. Добавлено через 11 минут раз уж начал, то и пример использования: package { import Box2D.Common.Math.b2Vec2; import Box2D.Dynamics.b2World; import flash.display.Sprite; import flash.events.Event; /** * ... * @author HardCoder */ public class Main extends Sprite { private var _world:b2World; public function Main() { this._world = B2Transformer.createWorld(new b2Vec2(0, 10)); B2Transformer.addDebugDraw(this._world, this); B2Transformer.createCircleBody(this._world, 2, 100, 20, 20); B2Transformer.createPolygonBody(this._world, 0, 0, 300, 600, 30); this.addEventListener(Event.ENTER_FRAME, loop); } private function loop(e:Event):void { this._world.Step(B2Transformer.TIMES_STEP, B2Transformer.VELOCITY_ITERATIONS, B2Transformer.POSITION_ITERATIONS); this._world.ClearForces(); this._world.DrawDebugData(); } } }
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
[+3 31.07.12]
[+1 27.08.13] |
Спасибо всем за информацию...
__________________
Хоть ты эту красоту не назовёшь граблями, всё равно никогда не наступай на них. |
Часовой пояс GMT +4, время: 10:35. |
|
« Предыдущая тема | Следующая тема » |
Теги |
box2d |
|
|