Большой Воронежский Форум
» Программирование>Где взять Box2D для flash?
DeniSS1 10:29 13.06.2010
Везде попадается только версия 2.1 или 2.1а, в то время как уроки (и на русском, и на английском) только по версии 2.0 или 2.01. Не знаю, сильно ли они различаются по функционалу, но имена функций изменены существенно. [Ответ]
-=QWERTY=- 11:12 13.06.2010
гугл решает
http://www.box2dflash.org/docs/2.1a/updating [Ответ]
DeniSS1 11:26 13.06.2010
-=QWERTY=-, спасибо, буду разбираться [Ответ]
DeniSS1 16:40 13.06.2010
Вопрос людям, которые знакомы с разработкой 2D-игр.
Сейчас делаю 2D-слешер на ActionScript3. Дело в том, что в играх,которые я делал раньше, никогда не было персонажей - делал крестики-нолики, шашки, танчики, змейку и т.д. А теперь появился вопрос - персонажей нужно анимировать отдельно и просто проигрывать в игре анимации или всё делать через физ. движок (т.е. делать персонажа составным и вместо анимации прикладывать к рукам/ногам силы в определённых направлениях)? Первый способ проще, конечно, но у меня хардкорный слешер - почти имитация фехтования. Т.е., например, бьёт игрок противника рубящим ударом в голову - NPC заблокировал удар, и мечи скрестились. Анимация здесь не подойдёт, похоже.
Я правильно мыслю? [Ответ]
DeniSS1 10:24 14.06.2010
В общем, написал я что-то вроде Hello, world! в Box2D с учётом изменений в новой версии - но оно не работает. Т.е. ошибок и креша нет, но выводит чистый экран и не меняет координаты. Если кто-нибудь умеет работать с этим движком, объясните, что я делаю неправильно.
Код:
package {
 
	import Box2D.Collision.Shapes.b2CircleShape;
	import Box2D.Collision.Shapes.b2MassData;
	import Box2D.Collision.b2AABB;
	import Box2D.Common.Math.b2Vec2;
	import Box2D.Dynamics.b2Body;
	import Box2D.Dynamics.b2BodyDef;
	import Box2D.Dynamics.b2Fixture;
	import Box2D.Dynamics.b2FixtureDef;
	import Box2D.Dynamics.b2World;
 
	import flash.display.Sprite;
	public class TestBox2D extends Sprite
	{
		public function TestBox2D()
		{
			var worldb2AABB:b2AABB = new b2AABB();
			worldb2AABB.lowerBound.Set(-100.0, -100.0);
			worldb2AABB.upperBound.Set(100.0, 100.0);
			var gravity:b2Vec2=new b2Vec2(0.0, -10.0);
			var doSleep:Boolean=true;
			var world:b2World=new b2World(gravity, doSleep);
 
			var groundBodyDef:b2BodyDef=new b2BodyDef();
			groundBodyDef.position.Set(0.0, -10.0);
			var groundBody:b2Body  =  
                        world.CreateBody(groundBodyDef);			
			var fd:b2FixtureDef = new b2FixtureDef();
	                fd.density = 1.0;
	                fd.shape = new b2CircleShape(5.0);
        	        var fixture:b2Fixture = groundBody.CreateFixture(fd);
        	        var bodyDef:b2BodyDef = new b2BodyDef();
                        bodyDef.position.Set(0.0, 4.0);
                        var body:b2Body = world.CreateBody(bodyDef);
                        var bodyFD:b2FixtureDef=new b2FixtureDef();
                        bodyFD.density=1.0;
                        bodyFD.friction=0.3;
                        bodyFD.shape=new b2CircleShape(1.0);
                        var bodyFixture:b2Fixture = body.CreateFixture(bodyFD);
                        var bodyMD:b2MassData = new b2MassData();
                        bodyMD.mass=0.2;
                        var massCenter:b2Vec2=new b2Vec2();
                        massCenter.x=0; massCenter.y=0;
                        bodyMD.center=massCenter;
                        body.SetMassData(bodyMD);
 
 
                        var timeStep:Number = 1.0 / 60.0;
                        var iterations:Number = 10;
                        for (var i:Number = 0; i < 60; ++i)
	                {
	                   world.Step(timeStep, iterations, 20);
	                   var position:b2Vec2 = body.GetPosition();
	                   var angle:Number = body.GetAngle();
	                   trace(position.x +','+ position.y +','+ angle);
	                }
 
	         }
       }
}
[Ответ]
Вверх