Подскажите, пожалуйста, как сделать так что бы box при столкновении с box2 останавливался, у меня получается, что при box сразу же попадает на место столкновения, я пробовал конструкцию
Код AS3:
if(box.x<destination.x;){box.x=destination.x;}
но тут получается как-то однобоко, то есть если box будет с права то ничего не выйдет, во общем подскажите пожалуйста !!!
Код AS3:
package {
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.Object3D;
import alternativa.engine3d.core.Resource;
import alternativa.engine3d.core.View;
import flash.display.Sprite;
import flash.display.Stage3D;
import flash.events.Event;
import flash.geom.Vector3D;
import alternativa.engine3d.materials.FillMaterial;
import alternativa.engine3d.primitives.Box;
import alternativa.engine3d.collisions.EllipsoidCollider;
public class TestEllipsoidCollider extends Sprite
{
private var rootContainer:Object3D = new Object3D();//создаем контейнер в который всё помещаем
private var camera:Camera3D;//создаем камеру
private var stage3D:Stage3D;//создаем сцену
private var box:Box; //создаем куб
private var box2:Box; //создаем куб2
private var collider:EllipsoidCollider = new EllipsoidCollider(10, 10, 10);
public function TestEllipsoidCollider()
{
//камера
camera = new Camera3D(0.1, 10000);//инициализируем камеру
camera.view= new View (stage.stageWidth, stage.stageHeight);//инициализируем вьюпорт
camera.rotationX = -120 * Math.PI / 180; // меняем координати
camera.y = -800;
camera.z = 400;
addChild(camera.view);//добавляем вьпорт
rootContainer.addChild(camera);//добавляем камеру в наш контейнер
//обьект - куб
box = new Box(100, 100, 100, 4, 4, 4); //инициализируем куб(ширина-х, глубина-z,висота-у,кол семент)
var material:FillMaterial = new FillMaterial(0xFF7700); //создаем материал и задаем цвет
box.setMaterialToAllSurfaces(material); //на все сторони добавляем материал
rootContainer.addChild(box); //добавляем обьект в наш контейнер
box2 = new Box(100, 100, 100, 4, 4, 4); //инициализируем куб(ширина-х, глубина-z,висота-у,кол семент)
var material2:FillMaterial = new FillMaterial(0xAF0836); //создаем материал и задаем цвет
box2.setMaterialToAllSurfaces(material2); //на все сторони добавляем материал
box2.x = 400;
rootContainer.addChild(box2); //добавляем обьект в наш контейнер
//сцена
stage3D = stage.stage3Ds[0];// Запрашиваем stage3D[0]
stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate);//Назначаем слушатель на событие возникающее когда Context3D создан.
stage3D.requestContext3D();//запрашиваем его в нашу stage3D
}
private function onContextCreate(e:Event):void //
{
for each (var resource:Resource in rootContainer.getResources(true)) //перебираем все ресурсы созданные нами в rootContainer и добавляем в stage3D.context3D
{
resource.upload(stage3D.context3D);
}
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);//когда все выполненно
}
private function onEnterFrame(e:Event):void
{
box.rotationZ -= 0.01; // вертим куб
var position:Vector3D = new Vector3D(box.x, box.y, box.z);
box.x += 2;
var delta:Vector3D = new Vector3D(box.x, box.y, box.z);
// проверка на столкновения камеры с box2
var destination:Vector3D = collider.calculateDestination(position, delta, box2);
box.x = destination.x;
camera.render(stage3D);//рендерим каждий кадр
}
}
}