Nape Physics.
Discussions and help with Nape physics engine.


Home » Nape Physics » Features/Development » Cutting demo - as3
icon1.gif  Cutting demo - as3 [message #2211] Tue, 06 March 2012 15:23 Go to next message
sokerr  is currently offline sokerr
Messages: 6
Registered: August 2011
Junior Member
Maybe help for someone.
I know english not very well.

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import nape.geom.GeomPoly;
	import nape.geom.GeomPolyList;
	import nape.geom.Vec2;
	import nape.util.BitmapDebug;
	
	/**
	 * use debug_nape_m8.2_r6
	 */
	[Frame(factoryClass="Preloader")]
	[SWF(width="600",height="450",frameRate="31",background="#000000")]
	
	public class Main extends Sprite
	{
		
		public function Main():void
		{
			if (stage)
				init();
			else
				addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			var debug:BitmapDebug = new BitmapDebug(600, 450, 0x333333);
			
			var handlesize:int = 4;
			var segsize:int = 6;
			var subsize:int = 2;
			
			var poly:GeomPoly = new GeomPoly([new Vec2(100, 100), new Vec2(200, 150), new Vec2(300, 100), new Vec2(100, 300), new Vec2(200, 300), new Vec2(300, 300)]);
			var seg0:Vec2 = new Vec2(150, 50);
			var seg1:Vec2 = new Vec2(150, 225);
			
			addChild(debug.display);
			
			function render():void
			{
				debug.clear();
				
				debug.drawFilledPolygon(poly, 0x555555);
				debug.drawPolygon(poly, 0x999999);
				var size:int = poly.size();
				while (size--)
				{
					poly.skip_forward(1);
					var p:Vec2 = poly.current();
					debug.drawFilledCircle(p, handlesize, 0x666666);
					debug.drawCircle(p, handlesize, 0xaaaaaa);
				}
				
				var simples:GeomPolyList = poly.simple_decomposition();
				simples.foreach(function(poly:GeomPoly):void
					{
						var polys:GeomPolyList = poly.cut(seg0, seg1, true, true);
						var sum:Number = 0.0;
						polys.foreach(function(p:GeomPoly):void
							{
								sum += p.area();
								var max:Number = 0.0;
								var size:int = p.size();
								while (size--)
								{
									p.skip_forward(1);
									var q:Vec2 = p.current();
									var dot:Number = q.sub(seg0).cross(seg1.sub(seg0));
									if (dot * dot > max * max)
										max = dot;
								}
								debug.drawFilledPolygon(p, max > 0 ? 0x55aa55 : 0xaa55aa);
								debug.drawPolygon(p, max > 0 ? 0x99ff99 : 0xff99ff);
								size = p.size();
								while (size--)
								{
									p.skip_forward(1);
									q = p.current();
									debug.drawFilledCircle(q, subsize, max > 0 ? 0x66bb66 : 0xbb66bb);
									debug.drawCircle(q, subsize, max > 0 ? 0xaaffaa : 0xffaaff);
								}
							});
					});
				
				debug.drawLine(seg0, seg1, 0xffffff);
				debug.drawFilledCircle(seg0, segsize, 0xcc0000);
				debug.drawCircle(seg0, segsize, 0xff0000);
				debug.drawFilledCircle(seg1, segsize, 0xcc);
				debug.drawCircle(seg1, segsize, 0xff);
				
				debug.flush();
			}
			render();
			
			var mdrag:Function = null;
			stage.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void
				{
					var mp:Vec2 = new Vec2(mouseX, mouseY);
					var s0:Number = mp.sub(seg0).length;
					var s1:Number = mp.sub(seg1).length;
					if (s0 < segsize || s1 < segsize)
					{
						var seg:Vec2 = s0 < segsize ? seg0 : seg1;
						var delta:Vec2 = mp.sub(seg);
						mdrag = function(mp:Vec2):void
						{
							seg.set(mp.sub(delta));
							render();
						};
						return;
					}
					
					var size:int = poly.size();
					while (size--)
					{
						poly.skip_forward(1);
						var p:Vec2 = poly.current();
						if (mp.sub(p).length < handlesize)
						{
							var delta2:Vec2 = mp.sub(p);
							mdrag = function(mp:Vec2):void
							{
								p.set(mp.sub(delta2));
								render();
							}
							return;
						}
					}
				});
			
			stage.addEventListener(MouseEvent.MOUSE_UP, function():void
				{
					mdrag = null
				});
			stage.addEventListener(MouseEvent.MOUSE_MOVE, function():void
				{
					if (mdrag == null)
						return;
					var mp:Vec2 = new Vec2(mouseX, mouseY);
					mdrag(mp);
				});
		}
	
	}
}
Re: Cutting demo - as3 [message #2212 is a reply to message #2211] Tue, 06 March 2012 15:34 Go to previous messageGo to next message
dELtaluca  is currently offline dELtaluca
Messages: 2225
Registered: July 2010
Location: Malden Rushett, Surrey
Senior Member
Administrator
gimme a few mins and i'll translate to AS3 on the demo page.


I created nape!
Re: Cutting demo - as3 [message #2213 is a reply to message #2212] Tue, 06 March 2012 15:53 Go to previous messageGo to next message
dELtaluca  is currently offline dELtaluca
Messages: 2225
Registered: July 2010
Location: Malden Rushett, Surrey
Senior Member
Administrator
done.

I can probably add a GeomPoly::foreach function like the Nape lists to neaten it up a bit in AS3 instead of using the iterator(), or doing it like tried with skip_forward and current()


I created nape!
Re: Cutting demo - as3 [message #2214 is a reply to message #2213] Tue, 06 March 2012 16:01 Go to previous messageGo to next message
sokerr  is currently offline sokerr
Messages: 6
Registered: August 2011
Junior Member
It will be great. thanks
Re: Cutting demo - as3 [message #2410 is a reply to message #2214] Mon, 26 March 2012 20:49 Go to previous messageGo to next message
barliesque  is currently offline barliesque
Messages: 12
Registered: February 2012
Location: Los Angeles
Junior Member
Just tried the cutting demo and got:

Error: Error #3714: ApplicationDomain.domainMemory is not available.
	at flash.system::ApplicationDomain/set domainMemory()
	at zpp_nape.util::ZPP_BitmapDebug/setbg()
	at zpp_nape.util::ZPP_BitmapDebug()
	at nape.util::BitmapDebug()
	at Cutting()
	at Cutting$/main()
	at boot_3c44/init()
	at flash::Boot/start()
	at boot_3c44()
Re: Cutting demo - as3 [message #2413 is a reply to message #2410] Mon, 26 March 2012 23:06 Go to previous messageGo to next message
dELtaluca  is currently offline dELtaluca
Messages: 2225
Registered: July 2010
Location: Malden Rushett, Surrey
Senior Member
Administrator
by tried do you mean the one up on the website, or compiled yourself?

The one on the website is compiled to flash version 10, so even with 11.2 player you would still be able to view it.
On the other hand if your flash player version is so old as to not be able to use alchemy opcodes at all, you might get such an error.


I created nape!
Re: Cutting demo - as3 [message #2531 is a reply to message #2413] Wed, 04 April 2012 19:18 Go to previous messageGo to next message
barliesque  is currently offline barliesque
Messages: 12
Registered: February 2012
Location: Los Angeles
Junior Member
The one up on the website. At the time the error occurred, I had Flash Player 11.2 (debug) installed. I'm not aware that my Flash version will have changed since then, but now when I visit the demo page, it works just fine. Did you make any changes???

My current version: 11.2.202.228
Re: Cutting demo - as3 [message #2539 is a reply to message #2531] Thu, 05 April 2012 22:25 Go to previous messageGo to next message
dELtaluca  is currently offline dELtaluca
Messages: 2225
Registered: July 2010
Location: Malden Rushett, Surrey
Senior Member
Administrator
Yeh, it was changed from swf-version 13 to swf-version 11 now (aka 10.1 i think)


I created nape!
Re: Cutting demo - as3 [message #2555 is a reply to message #2539] Fri, 06 April 2012 19:28 Go to previous messageGo to next message
barliesque  is currently offline barliesque
Messages: 12
Registered: February 2012
Location: Los Angeles
Junior Member
Huh? So you mean, compiling for swf-version 13 and viewing with Flash Player 11.2 throws this error when using BitmapDebug...?
So maybe this is a bug in the current release of Flash Player? Perhaps adding a try...catch in BitmapDebug::setbg() even as a temporary measure?
Re: Cutting demo - as3 [message #2556 is a reply to message #2555] Fri, 06 April 2012 20:40 Go to previous message
dELtaluca  is currently offline dELtaluca
Messages: 2225
Registered: July 2010
Location: Malden Rushett, Surrey
Senior Member
Administrator
Release versions of 11.2 don't have the issue since, they licensing rules regarding alchemy + stage3d have come into effect.


I created nape!
Previous Topic:Article on a memory issue we tracked very recently.
Next Topic:RopeJoint
Goto Forum:
  


Current Time: Sun May 19 01:39:08 BST 2013

Total time taken to generate the page: 0.01845 seconds
.:: Contact :: Home ::.