Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package {
- //импорт пакетов
- import Box2D.Collision.Shapes.b2CircleShape;
- import Box2D.Collision.Shapes.b2PolygonShape;
- import Box2D.Common.Math.b2Vec2;
- import Box2D.Common.Math.b2Vec3;
- import Box2D.Dynamics.b2Body;
- import Box2D.Dynamics.b2BodyDef;
- import Box2D.Dynamics.b2DebugDraw;
- import Box2D.Dynamics.b2FilterData;
- import Box2D.Dynamics.b2FixtureDef;
- import Box2D.Dynamics.b2World;
- import Box2D.Dynamics.Joints.b2DistanceJoint;
- import Box2D.Dynamics.Joints.b2DistanceJointDef;
- import flash.display.MovieClip;
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.events.KeyboardEvent;
- import flash.events.MouseEvent;
- //класс игровой сцены
- public class GameSceneClip extends MovieClip {
- //константы сцены
- const GAME_PLAY:Boolean = true;//состояние сцены "в игре"
- const GAME_PAUSE:Boolean = false;//состояние сцены "в паузе"
- const GAME_INSLEEP:uint = 0;//состояние игры "простой"
- const GAME_INAIR:uint = 1;//состояние игры "в воздухе"
- const GAME_INRUBBER:uint = 2;//состояние игры "на резинке"
- const PIXELS_TO_METRE:Number = 30;//метр в пикселях
- //свойства сценны
- private var sceneWidth:uint = 600;//длина сценны
- private var sceneHeight:uint = 500; //ширина сцены
- private var _sceneState:Boolean;//состояние сцены
- private var _gameState:uint;
- private var _maxDistance:Number = 3;
- private var _maxDistanceForJoint:Number;
- private var _inRubberZone:Boolean = false;
- private var _inRubberJoint:Boolean = false;
- private var _maxRubberDistance:Number;
- private var _thisRubberDistance:Number;
- private var _pointsArray:Array = null;
- private var _playerState:Boolean = false;
- private var _maxDeadDistance:Number = 25;
- private var _cameraPosX:Number = 0;
- private var _cameraPosY:Number = 0;
- private var _cameraMove:Boolean = false;
- //свойства-клипы (графические элементы и т.д)
- private var _bg:MovieClip;//клип заднего фона
- private var _borderClip:MovieClip;//клип рамки
- private var _playerClip:MovieClip;//клип игрока
- private var _rubberClip:MovieClip;//клип резинки
- private var _pointAClip:MovieClip;//клип начальной точки
- private var _pointBClip:MovieClip;//клип конечной точки
- private var _blocksClipsArray:Array = null;
- private var _debugSprite:Sprite;
- //box2d свойства игрока и различные флаги игрока
- private var _blockBodysArray:Array = null;
- private var _world:b2World;//физический мир
- private var _worldGravitation:Number = 10;
- private var _worldSleep:Boolean = true;
- private var _playerBody:b2Body = null;//тело игрока
- private var _playerBodyDef:b2BodyDef = null;//деф для тела игрока
- private var _playerBodyShape:b2CircleShape = null;//фигура тела игрока
- private var _playerBodyFixtureDef:b2FixtureDef = null;//фиксдеф для тела игрока
- private var _playerDistanceJoint:b2DistanceJoint = null;//дистанционное соединие между игроком и точкой
- private var _centerBody:b2Body = null;
- private var _centerBodyDef:b2BodyDef = null;
- private var _centerBodyShape:b2CircleShape = null;
- private var _centerBodyFixture:b2FixtureDef = null;
- /*private var _blockBodyDef:b2BodyDef = null;
- private var _blockBodyShape:b2PolygonShape;
- private var _blockBodyFixture:b2FixtureDef;*/
- private var _thisPoint:b2Vec2 = null;
- private var _nextPoint:b2Vec2 = null;
- private var _oldPoint:b2Vec2;
- public function GameSceneClip() { // конструктор класса
- Init();//инициализируем данные класса
- }
- //методы инициализации данных
- private function Init():void {//метод инициализации данных в конструкторе
- _bg = new GameBgClip();//создаем клип заднего фона
- addChild(_bg);//добавлем его на сцену
- _maxRubberDistance = _maxDistance * 2 * PIXELS_TO_METRE;
- SetPosClipToCustomPoint(_bg);//устанавливаем его в позицию (0,0)
- _rubberClip = new RubberClip;//создвем клип резинки
- addChild(_rubberClip);//добавляем его на сцену
- SetPosClipToOverCamera(_rubberClip);//убираем его из области отображения камеры
- _pointAClip = new PointAClip();//создает клип начальной точки
- addChild(_pointAClip);//добавляем его на сцену
- SetPosClipToOverCamera(_pointAClip);//убираем его из области отображения камеры
- _pointBClip = new PointBClip();//создаем клип конечной точки
- addChild(_pointBClip);//добавляем его на сцену
- SetPosClipToOverCamera(_pointBClip);//убираем его из области отображения камеры
- _playerClip = new PlayerClip();//создаем клип игрока
- addChild(_playerClip);//добавляем его на сцену
- SetPosClipToOverCamera(_playerClip);//убираем его из области отображения камеры
- _world = new b2World(new b2Vec2(0, _worldGravitation), _worldSleep);//создаем физический мир
- addEventListener(Event.ADDED_TO_STAGE, onAddedToStageBehaviour);//добавляем обработчик события ADDED_TO_STAGE
- _blockBodysArray = new Array();
- _blocksClipsArray = new Array();
- addBlockToScene(coordToB2Vec2(300, 1500), 7);
- addBlockToScene(coordToB2Vec2(630, 1700), 7);
- addBlockToScene(coordToB2Vec2(900, 1460), 7);
- addBlockToScene(coordToB2Vec2(540, 960), 7);
- addBlockToScene(coordToB2Vec2(340, 710), 7);
- addBlockToScene(coordToB2Vec2(930, 590), 7);
- addBlockToScene(coordToB2Vec2(1200, 210), 7);
- addBlockToScene(coordToB2Vec2(1460, 400), 7);
- addBlockToScene(coordToB2Vec2(1610, 1040), 7);
- addBlockToScene(coordToB2Vec2(1500, 1440), 7);
- addBlockToScene(coordToB2Vec2(840, 1600), 3);
- addBlockToScene(coordToB2Vec2(1100, 1650), 3);
- addBlockToScene(coordToB2Vec2(1460, 1590), 3);
- addBlockToScene(coordToB2Vec2(1650,1210), 3);
- addBlockToScene(coordToB2Vec2(1610, 1110), 3);
- addBlockToScene(coordToB2Vec2(1720, 820), 3);
- addBlockToScene(coordToB2Vec2(1620, 510), 3);
- addBlockToScene(coordToB2Vec2(920, 540), 3);
- addBlockToScene(coordToB2Vec2(680, 200), 3);
- addBlockToScene(coordToB2Vec2(1170, 1240), 1);
- addBlockToScene(coordToB2Vec2(880, 660), 1);
- addBlockToScene(coordToB2Vec2(470, 850), 1);
- addBlockToScene(coordToB2Vec2(230, 630), 1);
- addBlockToScene(coordToB2Vec2(240, 350), 1);
- addBlockToScene(coordToB2Vec2(330, 100), 1);
- //
- _pointsArray = new Array();
- _pointsArray.push(coordToB2Vec2(640 , 700 ));
- _pointsArray.push(coordToB2Vec2(400 , 500 ));
- _pointsArray.push(coordToB2Vec2(440 , 330 ));
- _pointsArray.push(coordToB2Vec2(690 , 420 ));
- _pointsArray.push(coordToB2Vec2(920 , 320 ));
- _pointsArray.push(coordToB2Vec2(1150 , 420 ));
- _pointsArray.push(coordToB2Vec2(1400 , 620 ));
- _pointsArray.push(coordToB2Vec2(1480 , 820 ));
- _pointsArray.push(coordToB2Vec2(1250 , 640 ));
- _pointsArray.push(coordToB2Vec2(1134 , 830 ));
- _pointsArray.push(coordToB2Vec2(1300 , 1030 ));
- _pointsArray.push(coordToB2Vec2(1370 , 1230 ));
- _pointsArray.push(coordToB2Vec2(1200 , 1430 ));
- _pointsArray.push(coordToB2Vec2(970 , 1250 ));
- _pointsArray.push(coordToB2Vec2(1165 , 1050 ));
- _pointsArray.push(coordToB2Vec2(1000 , 850 ));
- _pointsArray.push(coordToB2Vec2(820 , 1050 ));
- _pointsArray.push(coordToB2Vec2(600 , 1170 ));
- _pointsArray.push(coordToB2Vec2(388 , 1300 ));
- _pointsArray.push(coordToB2Vec2(588 , 1500 ));
- _pointsArray.push(coordToB2Vec2(340 , 1700 ));
- /*_pointsArray.push(coordToB2Vec2(90, 90));
- _pointsArray.push(coordToB2Vec2(sceneWidth / 2, sceneHeight / 2));
- _pointsArray.push(coordToB2Vec2(90, 90));
- _pointsArray.push(coordToB2Vec2(sceneWidth / 2, sceneHeight / 2));
- _pointsArray.push(coordToB2Vec2(90, 90));
- _pointsArray.push(coordToB2Vec2(sceneWidth / 2, sceneHeight / 2));
- _pointsArray.push(coordToB2Vec2(90, 90));
- _pointsArray.push(coordToB2Vec2(sceneWidth / 2, sceneHeight / 2));
- _pointsArray.push(coordToB2Vec2(90, 90));
- _pointsArray.push(coordToB2Vec2(sceneWidth / 2, sceneHeight / 2));
- _pointsArray.push(coordToB2Vec2(90, 90));
- _pointsArray.push(coordToB2Vec2(sceneWidth / 2, sceneHeight / 2));
- _pointsArray.push(coordToB2Vec2(90, 90));
- _pointsArray.push(coordToB2Vec2(sceneWidth / 2, sceneHeight / 2));*/
- //createFloor();
- _debugSprite = new Sprite();
- addChild(_debugSprite);
- var debugDraw:b2DebugDraw = new b2DebugDraw();
- debugDraw.SetSprite(_debugSprite);
- debugDraw.SetDrawScale(PIXELS_TO_METRE);
- debugDraw.SetLineThickness( 1.0);
- debugDraw.SetAlpha(1);
- debugDraw.SetFillAlpha(0.4);
- debugDraw.SetFlags(b2DebugDraw.e_shapeBit);
- _world.SetDebugDraw(debugDraw);
- _borderClip = new GameBorderClip();
- addChild(_borderClip);
- SetPosClipToCustomPoint(_borderClip);
- }
- //методы обработки камеры
- private function cameraSetMove():void {
- _cameraMove = true;
- }
- private function cameraSetPos():void {
- trace("set camera");
- _cameraPosX = _thisPoint.x * PIXELS_TO_METRE - sceneWidth / 2;
- _cameraPosY = _thisPoint.y * PIXELS_TO_METRE - sceneHeight / 2;
- cameraRender();
- }
- private function cameraSetToPos(pos:b2Vec2):void {
- _cameraPosX = pos.x * PIXELS_TO_METRE - sceneWidth / 2;
- _cameraPosY = pos.y * PIXELS_TO_METRE - sceneHeight / 2;
- cameraRender();
- }
- private function cameraMoveTo(x:Number, y:Number):void {
- _cameraPosX += x;
- _cameraPosY += y;
- if (_cameraPosX < 0) {
- _cameraPosX = 0;
- }
- if (_cameraPosY < 0) {
- _cameraPosY = 0;
- }
- cameraRender();
- }
- private function cameraRender(moveX:Number = 0, moveY:Number=0):void {
- //trace("cameraPosX=" + _cameraPosX + ", cameraPosY=" + _cameraPosY);
- //move bg
- _bg.x = -_cameraPosX;
- _bg.y = -_cameraPosY;
- //move debug
- _debugSprite.x = -_cameraPosX;
- _debugSprite.y = -_cameraPosY;
- SetPosClipToVec2(_pointAClip, _thisPoint);
- SetPosClipToVec2(_pointBClip, _nextPoint);
- for (var i:Number = 0; i < _blocksClipsArray.length; i++) {
- SetPosClipToVec2(_blocksClipsArray[i], _blockBodysArray[i].GetWorldCenter());
- }
- }
- //методы обработчики событий
- private function onKeyDownBehaviour(e:KeyboardEvent) {
- if (e.keyCode == 37) {
- cameraMoveTo(-15, 0);
- }
- if (e.keyCode == 39) {
- cameraMoveTo(15, 0);
- }
- if (e.keyCode == 38) {
- cameraMoveTo(0, -15);
- }
- if (e.keyCode == 40) {
- cameraMoveTo(0, 15);
- }
- }
- private function StartBehaviour():void {//метод запускает поведение игровой сцены (использовать только после добавления на сцену)
- _sceneState = GAME_PLAY;//ставим состояние сцены в GAME_PLAY
- _gameState = GAME_INSLEEP;//ставим состояние игры в "простой"
- addEventListener(Event.ENTER_FRAME, onEnterFrameBehaviour);//добавляем обработчик события ENTER_FRAME
- //stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownBehaviour);
- trace("SET");
- //addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownbehaviour);//добавляем обработчик события MOUSE_DOWN
- //cameraSetToPos(coordToB2Vec2(340 , 1700 ));
- _cameraPosX = 36;
- _cameraPosY = 1448;
- setToThisPoint();
- }
- private function onMouseDownbehaviour(e:MouseEvent):void {//обработчик события MOUSE_DOWN
- _gameState = GAME_INAIR;
- //trace(mouseX + " " + mouseY);
- destroyPlayerBody();
- destroyCenterBody();
- createPlayerBody(coordToB2Vec2(mouseX, mouseY));
- }
- private function onAddedToStageBehaviour(e:Event):void {//обработчик события ADDED_TO_STAGE
- removeEventListener(Event.ADDED_TO_STAGE, onAddedToStageBehaviour);//удаляем обработчик
- StartBehaviour();//запускаем сцену
- }
- private function onMouseDownToPlayer(e:MouseEvent):void {
- removeAllDynamicsObject();
- _playerState = true;
- _playerClip.gotoAndStop(2);
- }
- private function onMouseUpToPlayer(e:MouseEvent):void {
- if (!_playerState) {
- return;
- }
- _playerState = false;
- SetPosClipToOverCamera(_rubberClip);
- _playerState = false;
- _oldPoint = _thisPoint;
- //trace("dist ="+_thisRubberDistance + " maxdist=" + _maxDistance);
- if (_thisRubberDistance / PIXELS_TO_METRE < _maxDistance) {
- _pointsArray.push(_thisPoint);
- setToThisPoint(coordToB2Vec2(_playerClip.x,_playerClip.y));
- }else {
- var newx:Number = (_thisPoint.x - ((_cameraPosX + _playerClip.x) / PIXELS_TO_METRE)) * 4;
- var newy:Number = (_thisPoint.y - ((_cameraPosY + _playerClip.y) / PIXELS_TO_METRE)) * 4;
- setToThisPoint(coordToB2Vec2(_playerClip.x, _playerClip.y),new b2Vec2(newx, newy));
- //setToThisPoint(coordToB2Vec2(_playerClip.x, _playerClip.y), new b2Vec2((_thisPoint.x - (_playerClip.x / PIXELS_TO_METRE))* 4, (_thisPoint.y - (_playerClip.y / PIXELS_TO_METRE))*4));//new b2Vec2((_nextPoint.x - _thisPoint.x) * 3, (_nextPoint.y - _thisPoint.y) * 3));
- }
- _gameState = GAME_INAIR;
- removeListenerToPlayerClip();
- }
- private function onMouseMoveToPlayer(e:MouseEvent):void {
- trace("move");
- }
- private function onEnterFrameBehaviour(e:Event):void {//обработчик события ENTER_FRAME
- if (_sceneState) {//если находимся "в игре", то...
- if (_gameState == GAME_INAIR) {
- var point1:b2Vec2 = _playerBody.GetWorldCenter();
- var point2:b2Vec2 = _thisPoint;
- var dx:Number = point2.x - point1.x;
- var dy:Number = point2.y - point1.y;
- var xx:Number = Math.abs(dx);
- var yy:Number = Math.abs(dy);
- var dist:Number = Math.sqrt(xx * xx + yy * yy);
- var radians:Number = Math.atan2(dy, dx);
- var degress:Number = radians / (Math.PI / 180);
- SetPosClipToVec2(_playerClip, point1);
- if (dist < _maxDistance) {
- if(!_inRubberZone){
- _inRubberZone = true;
- if (_pointsArray.length == 0) {
- //gameState = GAME_INSLEEP;
- //_sceneState = GAME_PAUSE;
- var endClip:MovieClip = new EndBorderClip();
- addChild(endClip);
- SetPosClipToCustomPoint(endClip, sceneWidth / 2 ,sceneHeight / 2);
- }else
- {
- addListenerToPlayerClip();
- }
- SetPosPointB();
- cameraSetMove();
- //cameraSetPos();
- }
- /*SetPosClipToVec2(_rubberClip, point2);
- _rubberClip.scaleX = dist/_maxDistance;
- _rubberClip.rotation = degress;*/
- }else {
- if (_inRubberZone) {
- if (!_inRubberJoint) {
- _inRubberJoint = true;
- createCenterBody(point2);
- var distanceJointDef: b2DistanceJointDef = new b2DistanceJointDef();
- distanceJointDef.Initialize(_playerBody, _centerBody, _playerBody.GetWorldCenter(), _centerBody.GetWorldCenter());
- distanceJointDef.frequencyHz = 1;
- distanceJointDef.dampingRatio = 0;
- _playerDistanceJoint = _world.CreateJoint(distanceJointDef) as b2DistanceJoint;
- //trace("dist = " + dist);
- _maxDistanceForJoint = _playerDistanceJoint.GetLength();
- } else {
- //if (point1.y < point2.y) {
- if(dist<_maxDistanceForJoint){
- //trace("dist =" + dist + " maxDis =" + _maxDistanceForJoint);
- destroyCenterBody();
- destroyDistanceJoint();
- //_world.DestroyJoint(_playerDistanceJoint);
- _inRubberJoint = false;
- }
- if (point1.y < point2.y) {
- _playerBody.ApplyForce(new b2Vec2(0, 6), _playerBody.GetWorldCenter());
- //trace("apply");
- }
- //_inRubberZone = false;
- //}
- }
- /*var velocity:b2Vec2 = _playerBody.GetLinearVelocity();
- //velocity.NegativeSelf();
- trace(velocity.Length());
- var add:Number = velocity.Length() / 2 / 1.5;
- _playerBody.SetLinearVelocity(new b2Vec2((point2.x - point1.x) * add, (point2.y - point1.y) * add));*/
- }else {
- if (dist > _maxDeadDistance) {
- deadPlayer();
- }
- }
- }
- if (_inRubberZone) {
- SetPosClipToVec2(_rubberClip, point2);
- _rubberClip.scaleX = dist / _maxDistance;
- _rubberClip.rotation = degress;
- }
- }else {
- if (_gameState == GAME_INRUBBER) {
- var dxr:Number = _pointAClip.x - mouseX;
- var dyr:Number = _pointAClip.y - mouseY;
- var distr:Number = Math.sqrt(dxr * dxr + dyr * dyr);
- //dxr = Math.abs(dxr);
- //dyr = Math.abs(dyr);
- var radians1:Number = Math.atan2(dyr, dxr);
- var degress1:Number = radians1 / (Math.PI / 180);
- _rubberClip.rotation = degress1;
- _rubberClip.x = _pointAClip.x;
- _rubberClip.y = _pointAClip.y;
- if (distr < _maxRubberDistance) {
- _playerClip.x = mouseX;
- _playerClip.y = mouseY;
- _rubberClip.scaleX = (distr / PIXELS_TO_METRE) / (_maxDistance);
- }else {
- distr = _maxRubberDistance;
- _rubberClip.scaleX = 2;
- _playerClip.x = _rubberClip.x - Math.cos(radians1) * _maxRubberDistance;
- _playerClip.y = _rubberClip.y - Math.sin(radians1) * _maxRubberDistance;
- }
- _thisRubberDistance = distr;
- //trace(distr);
- }
- }
- }else {//...иначе (если находимся "в паузе")..
- }
- if (_cameraMove) {
- var smovex:Boolean = false;
- var smovey:Boolean = false;
- var ddx:Number = (_thisPoint.x * PIXELS_TO_METRE - sceneWidth / 2) - _cameraPosX;
- var ddy:Number = (_thisPoint.y * PIXELS_TO_METRE - sceneHeight / 2) - _cameraPosY;
- if(!smovey){
- if (ddy > 4) {
- cameraMoveTo(0, 4);
- }else {
- if (ddy < -4) {
- cameraMoveTo(0, -4);
- }else {
- smovey = true;
- }
- }
- }
- if(!smovex){
- if (ddx > 4) {
- cameraMoveTo(4, 0);
- }else {
- if (ddx < -4) {
- cameraMoveTo(-4, 0);
- }else {
- smovex = true;
- }
- }
- }
- if ((smovey == true) && (smovex == true)) {
- trace(_cameraPosX + " " + _cameraPosY);
- trace("stop move camera");
- cameraSetPos();
- _cameraMove = false;
- }
- }
- var timeStep:Number = 1 / 30;
- var velocityIterations:int = 6;
- var positionIterations:int = 2;
- _world.Step(timeStep,velocityIterations,positionIterations);
- _world.ClearForces();
- //_world.DrawDebugData();
- }
- //методы игрока
- private function deadPlayer():void {
- _pointsArray.push(_thisPoint);
- _pointsArray.push(_oldPoint);
- setToThisPoint();
- }
- private function setToThisPoint(newPoint:b2Vec2 = null, newVelocity:b2Vec2 = null):void {
- _playerClip.gotoAndStop(1);
- _thisPoint = _pointsArray.pop();
- _gameState = GAME_INAIR;
- //trace(mouseX + " " + mouseY);
- destroyPlayerBody();
- destroyCenterBody();
- if(!newPoint){
- createPlayerBody(_thisPoint,newVelocity);
- trace("create array point");
- //cameraSetPos(_thisPoint);
- }else {
- createPlayerBody(newPoint, newVelocity);
- trace("create new point");
- //cameraSetPos(_thisPoint);
- }
- //cameraSetPos();
- setPosPointA();
- }
- private function setPosPointA():void {
- SetPosClipToVec2(_pointAClip, _thisPoint);
- }
- private function SetPosPointB():void {
- _nextPoint = _pointsArray.pop();
- if (_nextPoint) {
- SetPosClipToVec2(_pointBClip,_nextPoint);
- }else
- {
- _nextPoint = _thisPoint;
- }
- _pointsArray.push(_nextPoint);
- }
- private function addListenerToPlayerClip():void {
- _playerClip.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownToPlayer);
- addEventListener(MouseEvent.MOUSE_UP, onMouseUpToPlayer);
- }
- private function removeListenerToPlayerClip():void {
- _playerClip.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDownToPlayer);
- removeEventListener(MouseEvent.MOUSE_UP, onMouseUpToPlayer);
- }
- //методы создания объектов Box2D
- private function createBlockBody(pos:b2Vec2,size:Number):b2Body {
- var _blockBodyDef:b2BodyDef = new b2BodyDef();
- _blockBodyDef.type = b2Body.b2_staticBody;
- _blockBodyDef.position = pos;
- var _blockBody:b2Body = _world.CreateBody(_blockBodyDef);
- var _blockBodyShape:b2PolygonShape = new b2PolygonShape;
- _blockBodyShape.SetAsBox(size / 2, 0.5)
- var _blockBodyFixture:b2FixtureDef = new b2FixtureDef();
- _blockBodyFixture.shape = _blockBodyShape;
- _blockBodyFixture.friction = 1.0;
- _blockBodyFixture.density = 1.0;
- _blockBody.CreateFixture(_blockBodyFixture);
- return _blockBody;
- }
- private function removeAllDynamicsObject():void {
- _gameState = GAME_INRUBBER;
- _inRubberJoint = false;
- _inRubberZone = false;
- destroyDistanceJoint();
- destroyCenterBody();
- destroyPlayerBody();
- }
- private function createPlayerBody(pos:b2Vec2,vel:b2Vec2 = null):void {
- _inRubberZone = false;
- _inRubberJoint = false;
- if(!_playerBodyDef){
- _playerBodyDef = new b2BodyDef();
- _playerBodyDef.type = b2Body.b2_dynamicBody;
- }
- _playerBodyDef.position = pos;
- _playerBody = _world.CreateBody(_playerBodyDef);
- if (!_playerBodyShape) {
- _playerBodyShape = new b2CircleShape(0.5);
- }
- if (!_playerBodyFixtureDef) {
- _playerBodyFixtureDef = new b2FixtureDef();
- _playerBodyFixtureDef.shape = _playerBodyShape;
- _playerBodyFixtureDef.density = 1;
- _playerBodyFixtureDef.friction = 1;
- _playerBodyFixtureDef.restitution = 0.8;
- _playerBodyFixtureDef.filter.groupIndex = -1;
- }
- _playerBody.CreateFixture(_playerBodyFixtureDef);
- if(vel){
- _playerBody.SetLinearVelocity(vel);
- }
- }
- private function createCenterBody(pos:b2Vec2):void {
- if (!_centerBodyDef) {
- _centerBodyDef = new b2BodyDef;
- _centerBodyDef.type = b2Body.b2_staticBody;
- }
- _centerBodyDef.position = pos;
- _centerBody = _world.CreateBody(_centerBodyDef);
- if (!_centerBodyShape) {
- _centerBodyShape = new b2CircleShape(0.1);
- }
- if (!_centerBodyFixture) {
- _centerBodyFixture = new b2FixtureDef();
- _centerBodyFixture.shape = _centerBodyShape;
- _centerBodyFixture.density = 1;
- _centerBodyFixture.friction = 1;
- _centerBodyFixture.restitution = 0.8;
- _centerBodyFixture.filter.groupIndex = -1;
- }
- _centerBody.CreateFixture(_playerBodyFixtureDef);
- }
- private function destroyDistanceJoint():void {
- if (_playerDistanceJoint) {
- _world.DestroyJoint(_playerDistanceJoint);
- }
- _playerDistanceJoint = null;
- }
- private function destroyPlayerBody() {
- if (_playerBody) {
- _world.DestroyBody(_playerBody);
- }
- _playerBody = null;
- }
- private function destroyCenterBody():void {
- if (_centerBody) {
- _world.DestroyBody(_centerBody);
- }
- _centerBody = null;
- }
- //методы для отладки
- private function SetPosClipToVec2(clip:MovieClip, pos:b2Vec2):void {
- clip.x = pos.x * PIXELS_TO_METRE - (_cameraPosX);
- clip.y = pos.y * PIXELS_TO_METRE - (_cameraPosY);
- }
- private function SetPosClipToCameraCenter(clip:MovieClip):void {//метод устанавливает положение клипа за сценной (используется для отладки и для объектов которые уже созданные но не используются в игровом процессе)
- clip.x = sceneWidth / 2;//позиция клипа по оси х
- clip.y = sceneHeight / 2;//позиция клипа по оси у
- }
- private function SetPosClipToOverCamera(clip:MovieClip):void {//метод устанавливает положение клипа за сценной (используется для отладки и для объектов которые уже созданные но не используются в игровом процессе)
- clip.x = -100;//позиция клипа по оси х
- clip.y = -100;//позиция клипа по оси у
- }
- private function SetPosClipToCustomPoint(clip:MovieClip, x:Number=0, y:Number=0):void {//метод устанавливает позицию клипа в зависимости от введенных координат
- clip.x = x;//позиция клипа по оси х
- clip.y = y;//позиция клипа по оси у
- }
- //другие методы
- private function addBlockToScene(pos:b2Vec2, size:Number):void {
- var _blockBody:b2Body = createBlockBody(pos, size);
- var _blockClip:MovieClip = createBlockClip(pos, size);
- _blockBodysArray.push(_blockBody);
- _blocksClipsArray.push(_blockClip);
- }
- private function createBlockClip(pos:b2Vec2, size:Number):BlockClip {
- var newBlock:BlockClip = new BlockClip(size);
- addChild(newBlock);
- SetPosClipToVec2(newBlock,pos);
- return newBlock;
- }
- private function coordToB2Vec2(x:Number, y:Number):b2Vec2 {
- var xx:Number = (_cameraPosX + x) / PIXELS_TO_METRE;
- var yy:Number = (_cameraPosY + y) / PIXELS_TO_METRE;
- //trace("x= " + xx + " y=" + yy);
- return new b2Vec2(xx, yy);
- }
- private function createFloor():void {
- var floorDef:b2BodyDef = new b2BodyDef();
- floorDef.type = b2Body.b2_staticBody;
- floorDef.position.Set((sceneWidth / 2) / PIXELS_TO_METRE, (sceneHeight - 20) / PIXELS_TO_METRE);
- var floorBody = _world.CreateBody(floorDef);
- var floorShape:b2PolygonShape = new b2PolygonShape();
- floorShape.SetAsBox(sceneWidth / PIXELS_TO_METRE, 1);
- var floorFixtureDef:b2FixtureDef = new b2FixtureDef();
- floorFixtureDef.shape = floorShape;
- floorFixtureDef.friction = 1;
- floorFixtureDef.density = 1;
- floorBody.CreateFixture(floorFixtureDef);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement