zoukankan      html  css  js  c++  java
  • as3---3D图片墙

      其实我这人逻辑能力并不强,所以只能在大概了解有些什么类型的项目之后提前把所有需要用到的功能全都写一遍,这样我才能安心。

      这次的事3D图片墙,以前没有写过,只能先写一次了。

      代码如下:

    模型类

    package  {
        import flash.display.Sprite;
        import flash.display.DisplayObject;
        import flash.events.MouseEvent;
        
        public class MyModel extends Sprite{
            private var bricks:Array=[];//brick砖头   储存砖头的数组
            
            private var num:int;
            
            public static const PicWidth:int=180;//单张图片的宽
            public static const PicHeight:int=135;//单张图片的高
            //public static const Radius:int=125;//半径
            public static const Radius:int=120;//半径
            
            public static const ROW:int=2;//两行
            public static const COLUMN:int=15;//每行15个图片
            public static const totalNum:int=ROW*COLUMN;//图片总数量
            public static const Radian:Number=360/COLUMN*Math.PI/180;//弧度
            public function MyModel() {
                // constructor code
                addBrick();
                addChild(addSp(100,100,0.3));
            }
            private function addBrick():void{
                for(var i:int=0;i<30;i++){
                    var sp:Sprite=addSp(PicWidth,PicHeight);
                    pushThumb(sp);
                }
            }
            //载入缩览图后将其压入模型中
            public function pushThumb(obj:DisplayObject):void{
                var i:int=num/COLUMN;
                var j:Number=Radian*(num%COLUMN-COLUMN/2+0.5);
    
                var brick:Sprite=new Sprite();//每一块砖
                brick.rotationY=j*180/Math.PI;
                brick.z=-5.0*Radius*(Math.cos(j));
                brick.x=-5.0*Radius*Math.sin(j);
                brick.y=(i-1.5)*(PicHeight+20);
                brick.name=String(num);
                
                obj.x=-PicWidth/2;
                obj.y=-PicHeight/2;
                brick.addChild(obj);
                bricks[num]=brick;
                num++;
                addChild(brick);
                brick.addEventListener(MouseEvent.CLICK,onC);
            }
            private function onC(e:MouseEvent):void{
                e.target.alpha=0.4;
            }
            private function addSp(w:int=0,h:int=0,alp:Number=1,clr:int=0):Sprite{
                var sp:Sprite=new Sprite()
                sp.graphics.beginFill(clr,alp)
                sp.graphics.drawRect(0,0,w,h)
                sp.graphics.endFill()
                //sp.name=str
                return sp
            }
    
        }
        
    }

    控制类

    package  {
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import com.greensock.TweenLite;
        import com.greensock.easing.Back;
        
        public class MyControl  extends Sprite{
            private var model:MyModel=new MyModel();
            
            private var oldX:Number=0;
            private var oldY:Number=0;
            private var nowX:Number=0;
            private var nowY:Number=0;
            private var isDraging:Boolean=false;//是否按下
            
            
            private var oldRotationY:int=0;
            private var speed:int=0;
            private var acceleration:Number=0.2;//加速度
            public function MyControl() {
                // constructor code
                this.addEventListener(Event.ADDED_TO_STAGE,tos);
            }
            private function tos(e:Event):void{
                this.removeEventListener(Event.ADDED_TO_STAGE,tos);
                
                addChild(model);
                model.x=400;
                model.y=400;
                model.z=-140;
                //stage.addEventListener(MouseEvent.CLICK,onLC);
                //stage.addEventListener(MouseEvent.RIGHT_CLICK,onRC);
                this.addEventListener(Event.ENTER_FRAME,onFrame);
                trace(MyModel.Radian);
                trace(MyModel.Radian*180/Math.PI);
                
                model.addEventListener(MouseEvent.MOUSE_DOWN,onD);
                //stage.addEventListener(MouseEvent.MOUSE_MOVE,onMove);
                stage.addEventListener(MouseEvent.MOUSE_UP,onU);
            }
            //鼠标按下
            private function onD(e:MouseEvent):void{
                nowX=stage.mouseX;
                nowY=stage.mouseY;
                oldX=stage.mouseX;
                oldY=stage.mouseY;
                isDraging=true;
            }
            //鼠标抬起
            private function onU(e:MouseEvent):void{
                isDraging=false;
            }
            //单击鼠标左键顺时针旋转
            private function onLC(e:MouseEvent):void{
                trace("d");
                //TweenLite.to(model,2,{rotationY:model.rotationY+24,ease:Elastic.easeOut});
                TweenLite.to(model,1,{rotationY:model.rotationY+24,ease:Back.easeOut});
            }
            //单机鼠标右键逆时针旋转
            private function onRC(e:MouseEvent):void{
                trace("rd");
                TweenLite.to(model,1,{rotationY:model.rotationY-24,ease:Back.easeOut});
            }
            private function onFrame(e:Event):void{
                //model.rotationY+=1;
                //trace(stage.mouseX,stage.mouseY);
                if(isDraging==true){
                    nowX=stage.mouseX;
                    nowY=stage.mouseY;
                    if(oldX-nowX>5){
                        model.rotationY-=((oldX-nowX)/20);
                    }
                    else if(nowX-oldX>5){
                        model.rotationY+=((nowX-oldX)/20);
                    }
                    oldX=nowX;
                    oldY=nowY;
                    
                    speed=(model.rotationY-oldRotationY)/2;
                    
                    oldRotationY=model.rotationY;
                }
                else{
                    model.rotationY+=speed;
                    
                    var afterSpeed:Number = Math.abs(speed) - acceleration;
                    if (afterSpeed == 0 ){
                        this.removeEventListener(Event.ENTER_FRAME, onFrame);
                    }
                    
                    if(afterSpeed<0){
                        afterSpeed=0;
                    }
                    speed = speed >= 0?afterSpeed: -afterSpeed;
                    trace("s"+speed);
                }
            }
    
        }
        
    }
  • 相关阅读:
    二叉树逻辑结构重点
    循环链表
    数据结构 单链表
    《深入理解计算机系统》第7章:重定位PC相对引用的理解
    一个关于空指针的思考
    简单解决python安装中的Unable to find vcvarsall.bat问题
    解决python本地离线安装requests问题
    使用共享内存和信号量模拟实现多进程会话
    使用openssl演练数字签名
    简单了解C语言内嵌汇编
  • 原文地址:https://www.cnblogs.com/lingLuoChengMi/p/7794159.html
Copyright © 2011-2022 走看看