VCoverFlowContainer.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.geom.ColorTransform;
  6. import mx.core.EdgeMetrics;
  7. import org.papervision3d.objects.DisplayObject3D;
  8. public class VCoverFlowContainer extends CoverFlowContainer
  9. {
  10. /**
  11.  * @private
  12.  * 
  13.  * For the vertical coverflow container we don't want to ever show reflections. Where would we put them?
  14.  */
  15. override public function set reflectionEnabled(value:Boolean):void {
  16. super.reflectionEnabled = false;
  17. }
  18. override protected function layoutCoverflow(unscaledWidth:Number, unscaledHeight:Number):void {
  19. var n:int = numChildren;
  20. for(var i:int=0; i<n; i++) {
  21. var child:DisplayObject = getChildAt(i);
  22. var plane:DisplayObject3D = lookupPlane(child);
  23. plane.container.visible = true;
  24. var abs:Number = Math.abs(selectedIndex - i);
  25. var horizontalGap:Number = getStyle("horizontalSpacing");
  26. if(isNaN(horizontalGap)) {
  27. horizontalGap = 10;
  28. }
  29. var verticalGap:Number = getStyle("verticalSpacing");
  30. if(isNaN(verticalGap)) {
  31. verticalGap = maxChildHeight/3;;
  32. }
  33. var yPosition:Number = selectedChild.height + ((abs-1) * verticalGap);
  34. var xPosition:Number = 0;
  35. var zPosition:Number = camera.z/2 + selectedChild.height + abs * horizontalGap;
  36. var zRotation:Number = rotationAngle;
  37. //some kinda fuzzy math here, I dunno, I was just playing with values
  38. //note that this only gets used if fadeEdges is true below
  39. var alpha:Number = (unscaledHeight/2 - yPosition) / (unscaledHeight/2);
  40. alpha  = Math.max(Math.min(alpha*2, 1), 0);
  41. if(i < selectedIndex) {
  42. yPosition *= -1;
  43. zRotation *= -1;
  44. }
  45. else if(i==selectedIndex) {
  46. yPosition = 0;
  47. zPosition = camera.z/2;
  48. zRotation = 0;
  49. alpha = 1;
  50. }
  51. if(fadeEdges) {
  52. //here's something sneaky. PV3D applies the colorTransform of the source movie clip to the
  53. //bitmapData that's created. So if we adjust the colorTransform that will be shown in the
  54. //3D plane as well. Cool, huh?
  55. var colorTransform:ColorTransform  = child.transform.colorTransform;
  56. colorTransform.alphaMultiplier = alpha;
  57. child.transform.colorTransform = colorTransform;
  58. plane.material.updateBitmap();
  59. }
  60. if(i!=selectedIndex) {
  61. Tweener.addTween(plane, {z:zPosition, time:tweenDuration/3});
  62. Tweener.addTween(plane, {x:xPosition, y:yPosition, rotationX:zRotation, time:tweenDuration});
  63. }
  64. else {
  65. Tweener.addTween(plane, {x:xPosition, y:yPosition, z:zPosition, rotationX:zRotation, time:tweenDuration});
  66. }
  67. if(i == selectedIndex) {
  68. var bm:EdgeMetrics = borderMetrics;
  69. //We need to adjust the location of the selected child so
  70. //it exactly lines up with where our 3D plane will be. 
  71. child.x = unscaledWidth/2 - child.width/2 - bm.top;
  72. child.y = unscaledHeight/2 - child.height/2 - yPosition - bm.left;
  73. //the normal ViewStack sets the visibility of the selectedChild. That's no good for us,
  74. //so we just reset it back. 
  75. child.visible = false;
  76. }
  77. }
  78. }
  79. }
  80. }