Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 07.06.2015, 20:58
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 1  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
По умолчанию частично не работает физика после разброса по классам

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

код собран примерно, как было, т.к. от этой реализации я отказался, но всё работало
Код 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;
		}
	}
}


Последний раз редактировалось neonoviiwolf; 07.06.2015 в 21:16.
Создать новую тему   Часовой пояс GMT +4, время: 14:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:07.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.