Показать сообщение отдельно
Старый 10.05.2012, 12:03
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 9  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Цитата:
Сообщение от ЗлОй ПрОграММер Посмотреть сообщение
но если кто решит как дополнить код буду благодарен)
На бокс2Д сделать, пример
Код:
package  
{
	import flash.display.*;import flash.events.*;import flash.ui.*;
	
	// Classes used in this example
	import Box2D.Dynamics.*;import Box2D.Collision.*;import Box2D.Collision.Shapes.*;
	import Box2D.Dynamics.Joints.*;import Box2D.Dynamics.Contacts.*;import Box2D.Common.*;
	import Box2D.Common.Math.*;
	
	/**
	 * ...
	 * @author Lexcuk
	 * 
https://sites.google.com/site/murmadillo/content/TopViewDocBox2_1.swf (в IE че-то не открывается, в опере работает)
	 */
	public class TopViewDocBox2_1 extends Sprite
	{
		private var move:Boolean, revers:Boolean, right:Boolean, left:Boolean;
		
		public var world:b2World;
		
		public var sharaBody:b2Body;
		
		
		public function TopViewDocBox2_1() {
			init();
			stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
			stage.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
			addEventListener(Event.ENTER_FRAME, Update);
		}
		

		private function init():void{
			// Creat world AABB
			var sprite:Sprite = new Sprite();
			addChild(sprite);
			
			world = new b2World(new b2Vec2(0,0), false);
			
			var debugDraw:b2DebugDraw = new b2DebugDraw();
			debugDraw.SetSprite(sprite);
			debugDraw.SetDrawScale(1);
			debugDraw.SetFillAlpha(0.3);
			debugDraw.SetLineThickness(1.0);
			debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
			world.SetDebugDraw(debugDraw);
			
			//начало рамка уровня
			var sD:b2BodyDef = new b2BodyDef();
			var sB:b2PolygonShape = new b2PolygonShape();
			var w:Number = 800, h:Number = 600;
			var wall:Array = [w/2, 0, w/2, 5, w/2, h, w/2, 5, 0, h/2, 5, h/2, w, h/2, 5, h/2];
			var i:int, c:int;
			
			for (i = 0; i < 4;i++){
				sD.position.Set(wall[c++], wall[c++]); sB.SetAsBox(wall[c++], wall[c++]);
				world.CreateBody(sD).CreateFixture2(sB,1);
			}
			//конец рамка уровня
			
			//начало препятствия уровня (рандомно разбросанные квадраты
			for (i = 0; i < 100; i++) {
				sD.position.Set(int(5+Math.random()*75)*10, int(5+Math.random()*55)*10); sB.SetAsBox(5, 5);
				world.CreateBody(sD).CreateFixture2(sB,1);
			}
			//конец прапятствия уровня
			world.DrawDebugData();
			
			
			//начало создание персоонажа
			sD.position.Set(100, 100); sB.SetAsBox(10, 15);
			
			sD.type = b2Body.b2_dynamicBody;
			sD.linearDamping = 1;
			sD.angularDamping = 1;
			
			sharaBody = world.CreateBody(sD);
			
			sharaBody.CreateFixture2(sB, 0);
			sB.SetAsOrientedBox(3, 3, new b2Vec2(0, 6));
			sharaBody.CreateFixture2(sB, 0);
			
			var b2Mass:b2MassData = new b2MassData();
			b2Mass.mass = 1;
			b2Mass.I = 1;
			b2Mass.center = new b2Vec2(0,0);
			sharaBody.SetMassData(b2Mass);
			
			sharaBody.SetSleepingAllowed(false);
			
			//конец создание персоонажа
			
			
		}

		public function Update(e:Event):void {
			world.ClearForces();
			//trace(move);
			var axis:b2Vec2 = sharaBody.GetTransform().R.col2.Copy();
			if (move) axis.Multiply(40)
			if (revers) axis.Multiply(-40)
			if (!move&&!revers) axis.Multiply(0);
			sharaBody.SetLinearVelocity(axis);
			
			if (left) sharaBody.SetAngularVelocity(1);
			if (right) sharaBody.SetAngularVelocity(-1);
			if (!left&&!right) sharaBody.SetAngularVelocity(0);
			
			//if (revers) sharaBody.SetLinearVelocity(new b2Vec2(-1000000000, -1000000));
			
			world.Step ( 1/30, 10, 10 );
			world.DrawDebugData();
			
		}

		private function keyHandler(e:KeyboardEvent):void {
			//trace(e.keyCode); //w - 87 a - 65 d - 68 s - 83
			if (e.type==KeyboardEvent.KEY_DOWN) keyFunc(e.keyCode, true);
			if (e.type==KeyboardEvent.KEY_UP) keyFunc(e.keyCode, false);
		}
 
		private function keyFunc(k:int, t:Boolean):void {
			if (k == Keyboard.UP || k == 87) move = t;
			if (k == Keyboard.DOWN || k == 83) revers = t;
			if (k == Keyboard.RIGHT || k == 68) right = t;
			if (k == Keyboard.LEFT || k == 65) left = t;
		}



	}

}
__________________
Гоночка