Здравствуйте! Беспокоит вас опять новичек. Надоели уже? Так вот уше неделю изучаю AF как известно лучшее изучение - это решение задачи. Естественно задача сделать мини игру. Столкнулся с такой проблемой не могу понять как написать код столкновения (или не пропускания) камеры через стену.
package { //импортирование классов (програм обработки)
import flash.events.*; import flash.ui.Keyboard; import flash.display.Bitmap; import flash.net.URLRequest; import flash.net.URLLoader;//вроде можно не писать прога сама находит import org.papervision3d.view.BasicView; import org.papervision3d.objects.primitives.*;//звездочка значит использование всех объектов import org.papervision3d.materials.*;//значит все имеющиеся материалы import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.core.clipping.FrustumClipping;//исправление багов с пропаданием треугольников/ import org.papervision3d.cameras.CameraType;//выбор типа камеры import org.papervision3d.events.InteractiveScene3DEvent;//слушатель событий
//основной класс public class Carusel extends BasicView {
//переменные главные (публичные переменные) public var carusel_container:DisplayObject3D; //переменные клавиатуры public var keyForward:Boolean; public var keyBackward:Boolean; public var keyLeft:Boolean; public var keyRight:Boolean; public var стена:Array = new Array(); public var plane:Plane; //объявление значения для переменной прямоугольника в который и будет загружаться картинка
//НАЧАЛО основная функция public function Carusel() {
//действия с камерой (это её свойства и выбор типа) super(stage.stageWidth,stage.stageHeight,true,false,CameraType.FREE); фукция_создания_контроля_над_камерой();
//делаем окно просмотра интерактивным, чтобы читать нажатия мыши на экран viewport.interactive = true;
//переменные carusel_container = new DisplayObject3D();//контейнер для загрузки аллеи (ряда...) scene.addChild(carusel_container); // добавляю на сцену контейнер
//первая_плоскость plane = new Plane(null, 600, 600, 15, 15);//размеры и разрешение плоскости plane.material.doubleSided = true;//смотреть с обоих сторон.doubleSided = true стена.push(plane);//добавление плоскостей в массив стена[стена.length-1].material.interactive = true;//делаю материал интерактивным стена[стена.length-1].material.name = "первая_плоскость";//присвоение материалу имени стена[стена.length-1].x = 300;//отодвигаю от середины вправо стена[стена.length-1].y = 50;//отодвигаю от середины вверх стена[стена.length-1].z = 500;//отодвигаю от середины вдаль стена[стена.length-1].localRotationY= 180;//поворот carusel_container.addChild(plane);//добавление плоскостей в контейнер
//вторая_плоскость plane = new Plane(null, 600, 600, 15, 15);//размеры и разрешение плоскости plane.material.doubleSided = true;//смотреть с обоих сторон.doubleSided = true стена.push(plane);//добавление плоскостей в массив стена[стена.length-1].material.interactive = true;//делаю материал интерактивным стена[стена.length-1].material.name = "вторая_плоскость";//присвоение материалу имени стена[стена.length-1].x = -300;//отодвигаю от середины вправо стена[стена.length-1].y = 50;//отодвигаю от середины вверх стена[стена.length-1].z = 500;//отодвигаю от середины вдаль стена[стена.length-1].localRotationY= -30;//поворот carusel_container.addChild(plane);//добавление плоскостей в контейнер // camera.z = -600;//приближение камеры renderer.clipping = new FrustumClipping(FrustumClipping.ALL);//устранение бага рисунков возле камеры startRendering();//отрисовка сделанного
}//КОНЕЦ главной функции
//камера: создание_контроля_над_камерой (при нажатии на клавишу клавиатуры) private function фукция_создания_контроля_над_камерой():void {//регистрация слушателей событий: нажатие и отжатие клавиш на клавиатуре stage.addEventListener (KeyboardEvent.KEY_DOWN, клавиша_нажата); stage.addEventListener (KeyboardEvent.KEY_UP, клавиша_отжата); }
//камера: фукция вращения камеры private function вращение_камеры ():void { if (keyForward) { camera.moveForward (30); } else if (keyBackward) { camera.moveBackward (30); } if (keyRight) { camera.localRotationY -= 2; } else if (keyLeft) { camera.localRotationY+=2; } } //фукция нажатия на клавишу private function клавиша_нажата (e:KeyboardEvent):void { switch (e.keyCode)
{ case "W".charCodeAt() : case Keyboard.UP : keyForward = true; break; case "S".charCodeAt() : case Keyboard.DOWN : keyBackward = true; break; case "A".charCodeAt() : case Keyboard.LEFT : keyLeft = true; break; case "D".charCodeAt() : case Keyboard.RIGHT : keyRight = true; break; } } //фукция отжатия клавиши private function клавиша_отжата (e:KeyboardEvent):void {
switch (e.keyCode) { case "W".charCodeAt() : case Keyboard.UP : keyForward = false; break; case "S".charCodeAt() : case Keyboard.DOWN : keyBackward = false; break; case "A".charCodeAt() : case Keyboard.LEFT : keyLeft = false; break; case "D".charCodeAt() : case Keyboard.RIGHT : keyRight = false; break; } } //функция перерисовки каждого кадра + там повороты override protected function onRenderTick(event:Event = null):void { вращение_камеры (); super.onRenderTick (); } } }
Добавлено (04.09.2012, 14:03) --------------------------------------------- вот файлы на всякий случай http://zalil.ru/33725865
Теперь на простом, нет на очень простом застрял просто... Не могу объявить переменную она теряет свое значение, почемуто? Там где в коде написано: проверка1 = значение обнуляется, хотя переменную сделал ПУБЛИК.
package { //импортирование классов (програм обработки) import flash.events.*; … //основной класс public class Класс extends BasicView { //переменные главные (публичные переменные) public var а_было_ли_столкнов:Boolean = false; //для проверки факта столкновения
//НАЧАЛО основная функция public function Класс () {
//функция перерисовки каждого кадра + там повороты override protected function onRenderTick(event:Event = null):void { вращение_камеры (); super.onRenderTick ();
}
} }
package { //импортирование классов (програм обработки) //основной класс public class Класс extends BasicView { public var а_было_ли_столкнов:Boolean = false; //вот эта переменная теряет значение при переходах
mayor1000, чувак, это просто жесть)) во первых я впервые вижу названия функций и переменных на русском языке) надо будет какнить тоже поприкалываться))
а по твоему коду, тут все просто:
Code
//проверка события столкновения со стеной function а_было_ли_столкновение (а_было_ли_столкнов):void { а_было_ли_столкнов=false
где ты передаешь в функцию значение переменной и первым делом устанавливаешь своей переменной значение false
я, если честно наверное не совсем точно понял назначение всего этого)) но тем не менее рискну предположить, что ты наверное хотел сделать так:
потом в функции вращения камеры, поставь вызов функции проверки столкновения в конец, а то получается, ты сперва вызываешь функцию со старым значением, потом меняешь переменную, а снова вызываешь функцию проверки только при следующей итерации.