![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
добрый день!
Осваиваю новый движок Nape. Возник вопрос, в box2d я создавал дебаг отрисовкe в классе main, а сами body, в других классах, затем просто передавал ссылку на b2world и объекты попадали сами в дебаг отрисовку, а с Nape не прокатывает так? У меня получается дебаг отрисовка только если внутри класс, где создаётся новый body, создать соответствующую функцию |
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
В нейпе с дебагом всё просто:
- создаётся экземпляр дебаг отрисовщика. - добавляется на сцену - обновляется в игровом цикле. Где именно у вас проблема? |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
проблема в том, что я создаю объекты нейпа не в main, по этому отрисовщик работает только именно в этом классе, если делаю в классе main, толку нет, ничего не появляется, если создам объект в body в main, тогда появиться
|
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Может у вас несколько спейсов?
Нет никакой разницы, где находится дебаг. Всё, что есть в спейсе, будет отрисовано. |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
нет, спейс только один
Добавлено через 36 секунд не подскажите, как делать многоугольники? а то только прямоугольники и круги выходят Добавлено через 5 минут всё, проблема отрисовки сама решилась, просто ещё раз переписал код и всё заработало нормально, значит где-то напортачил Добавлено через 2 часа 42 минуты полигоны пример, оставлю тут Последний раз редактировалось neonoviiwolf; 16.06.2015 в 03:21. |
|
|||||
|
Я бы посоветовал юзать Вам вот этот инструмент , а так же прикладываю вам классы, для генерации тел используя png или альфа канал ( очень полезная штука )
BitmapDataIso.as 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; } } } 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); } } } 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; } } } // создаем образ из битмапы 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/*фильтр_колизий*/); тело будет иметь информацию, для корректного сдвига графики
__________________
return this... |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
AlexCooper спасибо!
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|