CarouselContainer.as
上传用户:chuer333
上传日期:2022-06-13
资源大小:906k
文件大小:3k
源码类别:

FlashMX/Flex源码

开发平台:

Flex

  1. package com.dougmccune.containers
  2. {
  3. import caurina.transitions.Tweener;
  4. import flash.display.DisplayObject;
  5. import flash.events.Event;
  6. import mx.core.EdgeMetrics;
  7. import org.papervision3d.objects.DisplayObject3D;
  8. public class CarouselContainer extends BasePV3DContainer
  9. {
  10. override public function addChild(child:DisplayObject):DisplayObject {
  11. var child:DisplayObject = super.addChild(child);
  12. var plane:DisplayObject3D = lookupPlane(child);
  13. plane.material.doubleSided = true;
  14. var reflection:DisplayObject3D = lookupReflection(child);
  15. reflection.material.doubleSided = true;
  16. return child;
  17. }
  18. private var _angle:Number;
  19. public function set angle(value:Number):void {
  20. _angle = value;
  21. moveCamera();
  22. scene.renderCamera(camera);
  23. }
  24. public function get angle():Number {
  25. return _angle;
  26. }
  27. private function moveCamera():void {
  28. camera.x =  Math.cos(_angle) *(width);
  29.     camera.z =  Math.sin(_angle) *(width);
  30. }
  31. override protected function layoutChildren(unscaledWidth:Number, unscaledHeight:Number):void {
  32. super.layoutChildren(unscaledWidth, unscaledHeight);
  33. var numOfItems:int = this.numChildren;
  34. if(numOfItems == 0) return;
  35. var radius:Number = unscaledWidth-10;
  36. var anglePer:Number = (Math.PI*2) / numOfItems;
  37. for(var i:uint=0; i<numOfItems; i++)
  38. {
  39. //var childIndex:int = (selectedIndex + i) % numOfItems;
  40. var child:DisplayObject = getChildAt(i);
  41. var p:DisplayObject3D = lookupPlane(child);
  42. p.container.visible = true;
  43. var zPosition:Number = Math.sin(i*anglePer) * radius;
  44. var xPosition:Number = Math.cos(i*anglePer) * radius;
  45. var yRotation:Number = (-i*anglePer) * (180/Math.PI) + 270;
  46. p.x = xPosition;
  47. p.z = zPosition;
  48. p.rotationY = yRotation;
  49. if(reflectionEnabled) {
  50. var reflection:DisplayObject3D = lookupReflection(child);
  51. reflection.x = xPosition;
  52. reflection.z = zPosition;
  53. reflection.y = -child.height - 2;
  54. reflection.rotationY = yRotation;
  55. }
  56. }
  57. if(selectedChild) {
  58. var bm:EdgeMetrics = borderMetrics;
  59. selectedChild.x = unscaledWidth/2 - selectedChild.width/2 - bm.top;
  60. selectedChild.y = unscaledHeight/2 - selectedChild.height/2 - bm.left;
  61. selectedChild.visible = false;
  62. }
  63. var cameraAngle:Number = anglePer*selectedIndex;
  64. if(cameraAngle - _angle > Math.PI) {
  65. _angle += Math.PI*2;
  66. moveCamera();
  67. }
  68. else if(_angle - cameraAngle > Math.PI) {
  69. _angle -= Math.PI*2;
  70. moveCamera();
  71. }
  72. camera.zoom = 1 + 20/unscaledWidth;
  73. camera.focus = unscaledWidth/2;
  74. Tweener.addTween(this, {angle:cameraAngle, time:tweenDuration});
  75. }
  76. override protected function enterFrameHandler(event:Event):void {
  77. try {
  78. if(Tweener.isTweening(camera)){
  79. scene.renderCamera(camera);
  80. }
  81. }
  82. catch(e:Error) { }
  83. }
  84. }
  85. }