![]() |
|
||||||||||
|
|||||
|
ветеран форума
|
Как то так:
Обновлено в 10:33 package { import flash.display.Bitmap; import flash.events.Event; import flash.events.MouseEvent; import flash.net.navigateToURL; import flash.net.URLRequest; import org.papervision3d.events.InteractiveScene3DEvent; import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.view.BasicView; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="30")] public class CubeWithDifferentSides extends BasicView { [Embed(source='2782350904_dd8b955fb1.jpg')] private var backAsset:Class; [Embed(source='2782350904_dd8b955fb1.jpg')] private var bottomAsset:Class; [Embed(source='2782350904_dd8b955fb1.jpg')] private var frontAsset:Class; [Embed(source='2782350904_dd8b955fb1.jpg')] private var leftAsset:Class; [Embed(source='2782350904_dd8b955fb1.jpg')] private var rightAsset:Class; [Embed(source='2782350904_dd8b955fb1.jpg')] private var topAsset:Class; private var cube:Cube; private var frontMaterial:BitmapMaterial = new BitmapMaterial(new frontAsset().bitmapData, true); private var backMaterial:BitmapMaterial = new BitmapMaterial(new backAsset().bitmapData, true); private var leftMaterial:BitmapMaterial = new BitmapMaterial(new leftAsset().bitmapData, true); private var rightMaterial:BitmapMaterial = new BitmapMaterial(new rightAsset().bitmapData, true); private var topMaterial:BitmapMaterial = new BitmapMaterial(new topAsset().bitmapData, true); private var bottomMaterial:BitmapMaterial = new BitmapMaterial(new bottomAsset().bitmapData, true); public function CubeWithDifferentSides() { var materialsList:MaterialsList = new MaterialsList(); viewport.interactive = true; frontMaterial.interactive = true; frontMaterial.name = "front"; backMaterial.interactive = true; backMaterial.name = "back"; leftMaterial.interactive = true; leftMaterial.name = "left"; rightMaterial.interactive = true; rightMaterial.name = "right"; topMaterial.interactive = true; topMaterial.name = "top"; bottomMaterial.interactive = true; bottomMaterial.name = "bottom"; cube = new Cube(new MaterialsList( {front: frontMaterial, back: backMaterial, left: leftMaterial, right: rightMaterial, top:topMaterial, bottom: bottomMaterial} ), 500, 500, 500, 3, 3, 3); /* // Альтернативный вариант инициализацмм куба materialsList.addMaterial(bottomMaterial, "bottom"); materialsList.addMaterial(backMaterial, "back"); materialsList.addMaterial(frontMaterial, "front"); materialsList.addMaterial(leftMaterial, "left"); materialsList.addMaterial(rightMaterial, "right"); materialsList.addMaterial(topMaterial, "top"); cube = new Cube(materialsList, 500, 500, 500, 3, 3, 3); */ cube.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, onCubeOver); cube.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, onCubeOut); cube.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, onCubeClick); scene.addChild(cube); startRendering(); } private function onCubeOver(event:InteractiveScene3DEvent):void { viewport.buttonMode = true; } private function onCubeOut(event:InteractiveScene3DEvent):void { viewport.buttonMode = false; } override protected function onRenderTick(event:Event=null):void { cube.rotationY += (viewport.containerSprite.mouseX - cube.rotationY) * .1; cube.rotationX += (viewport.containerSprite.mouseY - cube.rotationX) * .1; renderer.renderScene(scene, camera, viewport); } private function onCubeClick(event:InteractiveScene3DEvent):void { switch(event.face3d.material.name) { case 'front': navigateToURL(new URLRequest('http://mySite.com/1')); break; case 'back': navigateToURL(new URLRequest('http://mySite.com/2')); break; case 'left': navigateToURL(new URLRequest('http://mySite.com/3')); break; case 'right': navigateToURL(new URLRequest('http://mySite.com/4')); break; case 'top': navigateToURL(new URLRequest('http://mySite.com/4')); break; case 'bottom': navigateToURL(new URLRequest('http://mySite.com/4')); break; } } } }
__________________
trace("Остановите Землю, я сойду!!!"); Последний раз редактировалось Mur4ik; 21.01.2009 в 11:33. |
|
|||||
|
[+6 04.02.09]
Регистрация: Jan 2009
Сообщений: 54
|
Mur4ik
я твой код испытал Результат: куб есть а клика а нет А со вторым вариантом, который закомментирован фиолетовым цветом, даже куб не появляется.... В первом появляется куб, код отлично компилируется без ошибок, но кликнуть по нему нельзя! Добавлено через 10 минут Бестолку Клика всё равно нет!!! В чём же проблема? |
|
|||||
|
Регистрация: Mar 2006
Сообщений: 141
|
Код последний напиши полностью
![]() |
|
|||||
|
[+6 04.02.09]
Регистрация: Jan 2009
Сообщений: 54
|
написал
Бестолку Клика всё равно нет!!! В чём же проблема? |
|
|||||
|
ветеран форума
|
и куб есть и клик есть (он не может не есть), возможно нужна последняя версия PV3D (тестировал на rev859)
проверил еще раз, работают оба варианта
__________________
trace("Остановите Землю, я сойду!!!"); Последний раз редактировалось Mur4ik; 21.01.2009 в 12:13. |
|
|||||
|
[+6 04.02.09]
Регистрация: Jan 2009
Сообщений: 54
|
А как проверить версию Папера?
Добавлено через 4 минуты Да конечно у меня rev859 я скачал его в формате .zip |
|
|||||
|
Регистрация: Mar 2006
Сообщений: 141
|
Скажем так, а почему собственно он должен срабатывать???? По Вашему коду - не должен!
Я на вскидку про допущенные ошибки, попробуйте: 1. НЕ cube.addEventListener(MouseEvent.CLICK, onCubeClick); А cube.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, onCubeClick); и ещё заменить private function onCubeClick(event:MouseEvent):void { на private function onCubeClick(event:InteractiveScene3DEvent):void { Это сработает при клике на самом кубе, на какой грани - не важно. Чтоб было на каждой отдельной грани, я бы сделал куб не с помощью Cube, а с помощью шести Plane и на каждый бы дал листнер с кликом. Если этот вариант не подходит, то надо как-то по граням разбить сам куб. Не пробовал, не могу сказать как именно. 2. Ещё надо на каждый материал Inteactive=true ============= БРРРР Я же давал ссылку: http://www.gotoandlearn.com/play?id=68 Вот сам пример http://gotoandlearn.com/files/pvcube.zip Последний раз редактировалось Vasik1; 21.01.2009 в 12:43. |
|
|||||
|
[+6 04.02.09]
Регистрация: Jan 2009
Сообщений: 54
|
Vasik1
Во-первых Я делал код в соответствии с кодом Mur4ikа! Результат известен -куб без возможности клика по граням. Во-вторых: Я посмотрел видео куба по твоей ссылки, скачал проект, посмотрел-работает всё чики-пуки. НО!!! Проект сделан с использованием Флеш КС3 и я не могу понять достаточно что там к чему, так как до этого возился долгое время с ФлешДевелоп. Но чувствую надо начинать проект с нуля во Флеш КС3, раз ничего не выходит с этим. Так вот там куб сделан с использованием клипов на гранях!!! Мне вообще не понятно как там автор начудил два слоя, как добавил код папера, как просмотреть структуру файла в удобном вид, как создать проект с нуля и т.д. |
|
|||||
|
ветеран форума
|
2 Vasik1:
Это Вы сейчас о чем вообще, о каких ошибках и о каком коде, вы мой листинг хоть смотрели? ![]() Шесть плейнов конечно хорошо, но для данного случая это гемор расставлять их в куб. На всякий случай прикрепил проект для FD (FD последней сборки) в папке bin есть откомпелированный файл, проверьте его если он работает, значит где то у вас ошибочка в другом, если и он не работает, может браузер блокирует клики...
__________________
trace("Остановите Землю, я сойду!!!"); Последний раз редактировалось Mur4ik; 21.01.2009 в 13:21. |
|
|||||
|
[+6 04.02.09]
Регистрация: Jan 2009
Сообщений: 54
|
Mur4ik
А куда ты его прикрепил? Можно его скачать чтобы проверить вс( последний раз? |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|