在keith peters 大师的作品当中,提及到透视的原理,他的文章写的很好,在国内里很难找到像他一样好的书。因为他的书能够将一些应用的数学和原理应用到作品当中,同时说白一点,他提醒了我们一点,不要为做效果和做效果。效果还是来源于我们最初所学的知识,这不可以忘本。
透视一个原理来源在光学里面,透镜原理成像的原理。他的原理也可以跟三角形的相似定理结合使用,的确这样的文章早已很久已经出现过,我再说也不能掩盖他们的光芒,更可况我只是一个无名小辈。关于透视一些说话,我可以说一句简单话,他就是一个区间的变化,区间如在【0,1】之间的变化,简单说就是最大最小值,而正好flash里面scaleX和scaleY的值也介于0,1之间,真的是一个巧合。呵呵
package { import flash.display.Sprite; import flash.events.*; import flash.ui.Keyboard; public class Example extends Sprite { private var ball:Ball; private var fl:Number=250; private var z:Number=0; private var xpos:Number=0; private var ypos:Number=0; private var vpx:Number=stage.stageWidth/2; private var vpy:Number=stage.stageHeight/2; public function Example() { //_sprite=new Sprite(); // addChild(_sprite); // _sprite.graphics.lineStyle(0,0,1); // _sprite.graphics.beginFill(0x000000); // _sprite.graphics.drawCircle(250,200,50); // _sprite.graphics.endFill(); //trace(_sprite.z); //_sprite.z=0; //trace(_sprite.z); ball =new Ball(); addChild(ball); addEventListener(Event.ENTER_FRAME,Run); stage.addEventListener(KeyboardEvent.KEY_DOWN,keydown); } private function Run(e:Event):void { var scale:Number=fl/(fl+z); trace(scale); xpos=mouseX-250; ypos=mouseY-200; ball.scaleX=ball.scaleY=scale; ball.x=vpx+xpos*scale; ball.y=vpy+ypos*scale; } private function keydown(e:KeyboardEvent):void { if (e.keyCode==Keyboard.UP) { z+=5; } else if (e.keyCode==Keyboard.DOWN) { z-=5; } } } }
发一段书的例子:
通过控制上下变化,感觉scale的值会在0--1之间产生一些变化,原型--缩小--原型--放大
至于放大当然上面提到只是说是一个区间变化值.如1就是正常的形态,0.5缩小的比例意思说50%缩放,至于1.5当然是1.5倍的缩放。
了解上面一个公式scale=fl/(fl+zpos) 透视公式,摘录Fundation ActionScript 3Animation一书。
好笔记完毕。。