Показать сообщение отдельно
Старый 26.08.2012, 22:47
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 3  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Нет. Этого делать не нужно вообще. Все просто замрет в том состоянии, в котором было на момент остановки.
Ну, это не проблема, я покажу скрин со счетом, а после выставлю все объекты на исходные позиции

Спасибо, интересные варианты
Как раз думал о удалении, но засада получалась с заново созданной шайбой (ошибка)

Код AS3:
// создание шайбы
protected function createWasher():void
		{
			washerBodyDef = new b2BodyDef();
			washerBodyDef.userData="washer";
			washerBodyDef.type = b2Body.b2_dynamicBody;
 
			washerShape = new b2CircleShape(30 / physicsModel.pixelsPerMeter);
			//var circShape:b2CircleShape = new b2CircleShape(3);
			washerFixtureDef = new b2FixtureDef();
			washerFixtureDef.shape = washerShape;
			washerFixtureDef.density = .1;
			washerFixtureDef.friction = .1;
			washerFixtureDef.restitution = .6;
			washerBodyDef.position.Set(PhysicsHelper.stage.stageWidth/2 / physicsModel.pixelsPerMeter, PhysicsHelper.stage.stageHeight/2 / physicsModel.pixelsPerMeter);
			washerBody = world.CreateBody(washerBodyDef);
			washerBody.CreateFixture(washerFixtureDef); // строка 208
		}
// удаление шайбы
protected function removeWasher():void
		{
			bodyesToRemove.push(washerBody);
 
			if(pm.mouseJoint)
			{
				pm.mouseJoint.SetTarget(null);
				world.DestroyJoint(pm.mouseJoint);
				pm.mouseJoint = null;
			}
		}
 
//  --- ГОЛ !!!
[EventHandler(event="PhysicsContactEvent.CONTACT_BEGIN",properties="data")]
		public function contactBeginHandler(data:String):void
		{
			switch(data)
			{
				case "opponentGoal":
					trace("ГОЛ ОППОНЕНТУ - нужно удалить шайбу и заново создать");
					removeWasher();
					createWasher();
					break;
				case "userGoal":
					trace("USER GOAL");
 
					break;
			}
		}
// обновление мира
private function enterFrameHandler(event:Event = null):void
		{
			if(bodyesToRemove.length>0)
			{
				for(i=0;i<bodyesToRemove.length;i++)
				{
					world.DestroyBody(bodyesToRemove[i]);
				}
				for(i=0;i<bodyesToRemove.length;i++)
				{
					bodyesToRemove.pop();
				}
			}
 
			updateMouseJoint();
			world.Step(physicsModel.timestep, physicsModel.velocityIterations, physicsModel.positionIterations);
			world.ClearForces();
			world.DrawDebugData();
 
			updateAssetsPositions();
		}
Вот такая ошибка вылетает
Код:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at swiz.controllers::PhysicsController/createWasher()[D:\flex  4.6\AeroHockey_2\src\swiz\controllers\PhysicsController.as:208]
При новом создании шайбы она возникает
Возможно, после удаления (в обновлении мира) нужно остановить это самое обновление, создать шайбу и заново запустить обновление ?

Я хотел бы еще один вопрос задать как раз про хоккей.
А как Вы двигали биту, при нажатии или нет ?
Я хотел бы чтобы без нажатия бита двигалась за мышкой моментально.
Это мне просто нужно назначать
Код AS3:
pm.mouseXWorldPhys=PhysicsHelper.stage.mouseX/physicsModel.pixelsPerMeter;
pm.mouseYWorldPhys=PhysicsHelper.stage.mouseY/physicsModel.pixelsPerMeter;
var mousePVec:b2Vec2=new b2Vec2(pm.mouseXWorldPhys,pm.mouseYWorldPhys);
userStickBody.SetPosition(mousePVec);
?
или все-таки с джоинтами нужно это делать ?

..............
вот как заработало:
в обновлении мира если есть объекты для уничтожения я удяляю их, останавливаю обновление мира, создаю шайбу и стартую обновление мира


Последний раз редактировалось djyamato; 26.08.2012 в 23:16.