Добрый день!
Осваиваю движок, уже делал рабочий вариант, когда всё работало, но решил переделать по потёвому (для себя) т.е. сделать пул, в который будут загоняться все объекты.
Так вот, по первой с делал, в варианте, что до добавления в пул указываются все параметры, как ниже
код собран примерно, как было, т.к. от этой реализации я отказался, но всё работало

Код AS3:
public function B2PoolTemp(_lengthVector:uint,_bodyShapePoligon:b2PolygonShape, _movieClip:MovieClip, _world:b2World, stage:*) //stage для теста
{
lengthVector = _lengthVector;
world = _world;
movieClipDef = MovieClip(_movieClip).constructor;
var bodyDef:b2BodyDef;
var fixture:b2FixtureDef;
var bodyShapePoligon:b2PolygonShape = _bodyShapePoligon;
while (--_lengthVector > -1)
{
var movieClipView:MovieClip = new movieClipDef() as MovieClip;
movieClipView.cacheAsBitmap;
stage.addChild(movieClipView);
bodyDef = new b2BodyDef();
bodyDef.position.Set((Math.random() * 1600) / meters, 1050 / meters / 2);
bodyDef.type = b2Body.b2_dynamicBody;
bodyDef.userData = movieClipView;
//body = movieClipView.getBody;
bodyShapePoligon.SetAsArray([b2Vec2.Make(0.8, 0.7), b2Vec2.Make(-0.7, 0.7), b2Vec2.Make(-0.6, -0.7), b2Vec2.Make(0.8, -0.7)], 4);
body = world.CreateBody(bodyDef);
fixture = new b2FixtureDef();
fixture.density = 10; //плотность
fixture.shape = bodyShapePoligon;
//body.CreateFixture(fixture);
//movieClipView.swopBody(body);
vectorPool.push(body);
}
}
но тут есть недостаток, нужно для разных объектов писать условия if(), т.к. плотность, положение на сцене, и размеры полигонов отличаются, и решил всё переписать, но уже все основные параметры добавить в сам мувик и просто при вызове считывать ljcnfdfnm "get"
Добился, что бы объекты выводились на экран, шейпы есть, в мир вроде добавились, при ударе об них (отдельный объект Box2D, которым управляет сам игрок) кораблик отлетает, но сами объекты не двигаются, хотя стоит тип динамический
проблема в том, что постоянно ругается, что не создан b2body = null, т.е. хочет, что бы было
var body:b2Body = new b2Body(bodyDef, world), тогда стартует, объекты есть, но они не двигаются, но об них можно удариться, а судя по обучение и моему первому варианту достаточно var body:b2Body
создание врагов, тут я вызываю этот класс из main и передаю массив из мувиков, здесь в конечном итоге я собираюсь получить массив всех пулов

Код AS3:
package Enemies
{
import Box2D.Dynamics.b2World;
import Pool.PoolBox2D;
public class CreateEnemy
{
private var world:b2World;
private var poolBox2D:PoolBox2D;
private var lengthPool:uint = 15; //длинна пула
public function CreateEnemy(_world:b2World, tempArrayEnemy:Array, stage:*)//stage для теста
{
world = _world;
for (var i:uint = 0; tempArrayEnemy.length > i; ++i)
{
poolBox2D = new PoolBox2D (tempArrayEnemy[i], lengthPool, world, stage);
}
}
}
}
тут пишу сам пул

Код AS3:
package Pool
{
import Box2D.Collision.Shapes.b2PolygonShape;
import Box2D.Common.Math.b2Vec2;//temp
import Box2D.Dynamics.b2Body;
import Box2D.Dynamics.b2BodyDef;
import Box2D.Dynamics.b2FixtureDef;
import Box2D.Dynamics.b2World; //временно
import flash.display.MovieClip;
public class PoolBox2D //extends MovieClip
{
//*******************************************************************************
private var movieClip:Class;
private var vectorPool:Vector.<MovieClip> = new Vector.<MovieClip>;
private var meters:uint = 30;
public function PoolBox2D(_movieClip:MovieClip, lengthPool:uint, world:b2World, stage:*)//world and stage - temp
{
movieClip = MovieClip(_movieClip).constructor;
for (var i:uint = 0; lengthPool > i; ++i)
{
var movieClipView:MovieClip = new movieClip() as MovieClip;
var bodyDef:b2BodyDef = movieClipView.getBodyDef;
var bodyShapePoligon:b2PolygonShape = movieClipView.getBodyShapePoligon;
var fixtureDef:b2FixtureDef = movieClipView.getFixtureDef;
bodyDef.position.Set((Math.random() * 1600) / meters, 1050 / meters / 2);
bodyDef.userData = movieClipView;
var body:b2Body = new b2Body(bodyDef, world); // вот здесь компилятор написать так, иначе ругается на body.CreateFixture(fixtureDef) - null
body.CreateFixture(fixtureDef);
stage.addChild(movieClipView);
body = world.CreateBody(bodyDef);
}
}
//********************************************************************************
public function get getVectorPool():Vector.<MovieClip>
{
return vectorPool;
}
//*********************************************************************************
public function transferPool(i:uint):void
{
//написать!!!
}
//*******************************************************************************
public function increasePool():void
{
//написать!!!
}
}
}
сам мувик

Код AS3:
package Enemies
{
import Box2D.Collision.Shapes.b2PolygonShape;
import Box2D.Common.Math.b2Vec2;
import Box2D.Dynamics.b2Body;
import Box2D.Dynamics.b2BodyDef;
import Box2D.Dynamics.b2FixtureDef;
import Box2D.Dynamics.b2World;
import flash.events.Event;
public class EnemyOne extends enemyOne_mc
{
//********************************************************************************
public function EnemyOne()
{
scaleX = 0.25;
scaleY = 0.25;
createExhaust();
}
//********************************************************************************
//анимация двигателя
private var exhaustLeft:exhaust_mc;
private var exhaustRight:exhaust_mc;
private function createExhaust():void
{
exhaustLeft = new exhaust_mc();
exhaustLeft.x = 70;
exhaustLeft.y = 130;
this.addChild(exhaustLeft);
exhaustRight = new exhaust_mc();
exhaustRight.x = -70;
exhaustRight.y = 130;
this.addChild(exhaustRight);
create();
}
//********************************************************************************
private var body:b2Body;
private var bodyDef:b2BodyDef;
private var fixtureDef:b2FixtureDef;
private var bodyShapePoligon:b2PolygonShape;
private var world:b2World;
private function create():void
{
//var body:b2Body;
bodyDef = new b2BodyDef();
bodyDef.type = b2Body.b2_dynamicBody;
fixtureDef = new b2FixtureDef();
bodyShapePoligon = new b2PolygonShape();
bodyDef.type = b2Body.b2_dynamicBody;
bodyShapePoligon.SetAsArray([b2Vec2.Make(0.8, 0.7), b2Vec2.Make(-0.7, 0.7), b2Vec2.Make(-0.6, -0.7), b2Vec2.Make(0.8, -0.7)], 4);
fixtureDef.density = 10;
fixtureDef.shape = bodyShapePoligon;
//body.CreateFixture(fixtureDef);
//body = world.CreateBody(bodyDef);
}
public function get getBodyDef():b2BodyDef
{
return bodyDef;
}
public function get getBodyShapePoligon():b2PolygonShape
{
return bodyShapePoligon;
}
public function get getFixtureDef():b2FixtureDef
{
return fixtureDef;
}
}
}