![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
Добрый день!
Осваиваю движок, уже делал рабочий вариант, когда всё работало, но решил переделать по потёвому (для себя) т.е. сделать пул, в который будут загоняться все объекты. Так вот, по первой с делал, в варианте, что до добавления в пул указываются все параметры, как ниже код собран примерно, как было, т.к. от этой реализации я отказался, но всё работало 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); } } Добился, что бы объекты выводились на экран, шейпы есть, в мир вроде добавились, при ударе об них (отдельный объект Box2D, которым управляет сам игрок) кораблик отлетает, но сами объекты не двигаются, хотя стоит тип динамический проблема в том, что постоянно ругается, что не создан b2body = null, т.е. хочет, что бы было var body:b2Body = new b2Body(bodyDef, world), тогда стартует, объекты есть, но они не двигаются, но об них можно удариться, а судя по обучение и моему первому варианту достаточно var body:b2Body создание врагов, тут я вызываю этот класс из main и передаю массив из мувиков, здесь в конечном итоге я собираюсь получить массив всех пулов 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); } } } } 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 { //написать!!! } } } 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; } } } Последний раз редактировалось neonoviiwolf; 07.06.2015 в 21:16. |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
я и в первый раз сделал пул, всё работало, но код не универсальный и для каждого типа объектов нужно писать свои параметры при создании и проверять к какому типу он относиться. По этому решил, что пусть сами мувики несут необходимые параметры, как плотность, форму и т.д. Получим универсальный пул, универсальный скелет для мувиков, которым нужно сделать физику. Но пока не получается полностью заставить их работать, т.е. объекты создаются, выводятся на сцену, но не двигаются, об них можно ударить другой физический объект, он оттолкнётся, а они стоят
|
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
к чему этот флуд?
Добавлено через 49 минут в общем переписал, видимо проблема была в очередности, так работате 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.<b2Body> = new Vector.<b2Body>; private var meters:uint = 30; private var body:b2Body; 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; var bodyShapePoligon:b2PolygonShape; var fixtureDef:b2FixtureDef; bodyDef = movieClipView.getBodyDef; bodyDef.position.Set((Math.random() * 1600) / meters, 1050 / meters / 2); bodyDef.userData = movieClipView; body = world.CreateBody(bodyDef); bodyShapePoligon = movieClipView.getBodyShapePoligon; fixtureDef = movieClipView.getFixtureDef; body.CreateFixture(fixtureDef); stage.addChild(movieClipView); } } //******************************************************************************** public function get getVectorPool():Vector.<b2Body> { return vectorPool; } //********************************************************************************* public function transferPool(i:uint):void { //написать!!! } //******************************************************************************* public function increasePool():void { //написать!!! } } } можно закрывать Последний раз редактировалось neonoviiwolf; 08.06.2015 в 02:15. |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|