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

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

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

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

добрый день!
Осваиваю новый движок Nape. Возник вопрос, в box2d я создавал дебаг отрисовкe в классе main, а сами body, в других классах, затем просто передавал ссылку на b2world и объекты попадали сами в дебаг отрисовку, а с Nape не прокатывает так? У меня получается дебаг отрисовка только если внутри класс, где создаётся новый body, создать соответствующую функцию

Старый 16.06.2015, 00:08
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 2  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
В нейпе с дебагом всё просто:
- создаётся экземпляр дебаг отрисовщика.
- добавляется на сцену
- обновляется в игровом цикле.
Где именно у вас проблема?

Старый 16.06.2015, 00:25
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 3  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
проблема в том, что я создаю объекты нейпа не в main, по этому отрисовщик работает только именно в этом классе, если делаю в классе main, толку нет, ничего не появляется, если создам объект в body в main, тогда появиться

Старый 16.06.2015, 00:31
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 4  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Может у вас несколько спейсов?
Нет никакой разницы, где находится дебаг. Всё, что есть в спейсе, будет отрисовано.

Старый 16.06.2015, 00:33
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 5  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
нет, спейс только один

Добавлено через 36 секунд
не подскажите, как делать многоугольники? а то только прямоугольники и круги выходят

Добавлено через 5 минут
всё, проблема отрисовки сама решилась, просто ещё раз переписал код и всё заработало нормально, значит где-то напортачил

Добавлено через 2 часа 42 минуты
полигоны пример, оставлю тут
Код AS3:
			bodyShip.shapes.add(new Polygon([new Vec2( -40, 10), new Vec2( -20, -10), new Vec2(20, -10)], Material.rubber()));


Последний раз редактировалось neonoviiwolf; 16.06.2015 в 03:21.
Старый 18.06.2015, 14:21
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 6  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Я бы посоветовал юзать Вам вот этот инструмент , а так же прикладываю вам классы, для генерации тел используя png или альфа канал ( очень полезная штука )

BitmapDataIso.as
Код AS3:
package net.alexscript.source.nape
{
	import nape.geom.AABB;
 
	import nape.geom.IsoFunction;
 
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
 
	public class BitmapDataIso implements IsoFunction
	{
		public var bitmap:BitmapData;
		public var alphaThreshold:Number;
		public var bounds:AABB;
 
		public function BitmapDataIso(bitmap:BitmapData, alphaThreshold:Number = 0x80):void
		{
			this.bitmap = bitmap;
			this.alphaThreshold = alphaThreshold;
			bounds = new AABB(0, 0, bitmap.width, bitmap.height);
		}
 
		public function graphic():DisplayObject
		{
			return new Bitmap(bitmap);
		}
 
		public function iso(x:Number, y:Number):Number
		{
			// Take 4 nearest pixels to interpolate linearly.
			// This gives us a smooth iso-function for which
			// we can use a lower quality in MarchingSquares for
			// the root finding.
 
			var ix:int = int(x); var iy:int = int(y);
			//clamp in-case of numerical inaccuracies
			//if(ix<0 data-blogger-escaped-if="if" data-blogger-escaped-ix="ix" data-blogger-escaped-iy="0;">=bitmap.width)  ix = bitmap.width-1;
			if(iy>=bitmap.height) iy = bitmap.height-1;
 
			// iso-function values at each pixel centre.
			var a11:Number = alphaThreshold - (bitmap.getPixel32(ix,iy)>>>24);
			var a12:Number = alphaThreshold - (bitmap.getPixel32(ix+1,iy)>>>24);
			var a21:Number = alphaThreshold - (bitmap.getPixel32(ix,iy+1)>>>24);
			var a22:Number = alphaThreshold - (bitmap.getPixel32(ix+1,iy+1)>>>24);
 
			// Bilinear interpolation for sample point (x,y)
			var fx:Number = x - ix; var fy:Number = y - iy;
			return a11*(1-fx)*(1-fy) + a12*fx*(1-fy) + a21*(1-fx)*fy + a22*fx*fy;
		}
	}
}
DisplayObjectIso.as
Код AS3:
package net.alexscript.source.nape
{
	import flash.display.DisplayObject;
 
	import nape.geom.AABB;
	import nape.geom.IsoFunction;
 
	public class DisplayObjectIso implements IsoFunction
	{
		public var displayObject:DisplayObject;
		public var bounds:AABB;
 
		public function DisplayObjectIso(displayObject:DisplayObject):void
		{
			this.displayObject = displayObject;
			this.bounds = AABB.fromRect(displayObject.getBounds(displayObject));
		}
 
		public function iso(x:Number, y:Number):Number
		{
			// Best we can really do with a generic DisplayObject
			// is to return a binary value {-1, 1} depending on
			// if the sample point is in or out side.
 
			return (displayObject.hitTestPoint(x, y, true) ? -1.0 : 1.0);
		}
	}
}
IsoBody.as
Код AS3:
package net.alexscript.source.nape
{
	import nape.dynamics.InteractionFilter;
	import nape.geom.AABB;
	import nape.geom.GeomPoly;
	import nape.geom.GeomPolyList;
	import nape.geom.IsoFunction;
	import nape.geom.MarchingSquares;
	import nape.geom.Vec2;
	import nape.phys.Body;
	import nape.phys.Material;
	import nape.shape.Polygon;
 
	public class IsoBody
	{
		private static var _m:Material = new Material(.2,1,1,.2);
 
		public static function get m():Material
		{
			return _m;
		}
 
		public static function material(m:Material):Class {
			_m = m;
			return IsoBody;
		}
		public static function run(iso:IsoFunction, mass:Number, bounds:AABB, granularity:Vec2 = null, quality:int = 2, simplification:Number = 1.5,filter:InteractionFilter = null):Body
		{
			var body:Body = new Body();
 
			if (granularity == null) granularity = Vec2.weak(8, 8);
			var polys:GeomPolyList = MarchingSquares.run(iso, bounds, granularity, quality);
			for (var i:int = 0; i < polys.length; i++)
			{
				var p:GeomPoly = polys.at(i);
 
				var qolys:GeomPolyList = p.simplify(simplification).convexDecomposition(true);
				for (var j:int = 0; j < qolys.length; j++)
				{
					var q:GeomPoly = qolys.at(j);
				//new Material(elast, dynaf, stat, dens );
					//new Material( 0,1,2,1);
					body.shapes.add(new Polygon(q,IsoBody.m,filter));
 
					// Recycle GeomPoly and its vertices
					q.dispose();
				}
				// Recycle list nodes
				qolys.clear();
 
				// Recycle GeomPoly and its vertices
				p.dispose();
			}
			// Recycle list nodes
			polys.clear();
 
			body.mass = mass;
 
			// Align body with its centre of mass.
			// Keeping track of our required graphic offset.
			var pivot:Vec2 = body.localCOM.mul(-1);
			body.translateShapes(pivot);
 
			//trace( pivot );
 
			body.userData.graphicOffset = pivot;
			return body;
		}
	}
}
Юзается так

Код AS3:
// создаем образ из битмапы
var _iso:BitmapDataIso = new BitmapDataIso(bitmapdata, 0x0);
 
//устанавливаем дефолтный материал			
IsoBody.material( new Material());
 
// получаем тело		
var body:Body = IsoBody.run(_iso, mass/*вес_тела*/, _iso.bounds/*границы*/,null/*зернистость*/,2/*качество*/,1.5/*сглаживание_упрощение*/,filter/*фильтр_колизий*/);
Добавлено через 3 минуты
Код AS3:
body.userData.graphicOffset
тело будет иметь информацию, для корректного сдвига графики
__________________
return this...

Старый 24.06.2015, 04:55
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 7  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
AlexCooper спасибо!

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:38.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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