
在Flash自带的ComboBox组件中,下拉列表部分是被加到主场景(Stage)上的。这就带来一些问题:比如ComboBox放在一个运动着的可视对象上,点开下拉列表后,这部分并不会跟随着父物体运动。如果父物体是三维层,下拉列表也不会继承上层的属性,这就会造成视觉上的问题。
下面的代码演示了一个不修改ComboBox源代码的前提下解决这个问题的小技巧。思路很简单:监听下拉列表的打开和关闭事件,动态改变dropdown对象的parent。
// cb is a ComboBox instance cb.addEventListener(Event.OPEN, openHandler, false, 0, true); cb.addEventListener(Event.CLOSE, closeHandler, false, 0, true); private function openHandler(event : Event) : void { // wait one frame addEventListener(Event.ENTER_FRAME, tick, false, 0, true); } private function closeHandler(event : Event) : void { // hide dropdown cb.dropdown.visible = false; // add dropdown back to stage stage.addChild(cb.dropdown); } private function tick(event : Event) : void { removeEventListener(Event.ENTER_FRAME, tick); // add dropdown to another parent someContainer.addChild(cb.dropdown); // reposition dropdown if needed cb.dropdown.move(cb.x, cb.y + cb.height); // show dropdown cb.dropdown.visible = true; }
https://gist.github.com/721420

在讲技巧前,首先要做好的一个选择是用单点相机还是多点相机,其实就是选择控制相机旋转的方法:到底是用目标点还是用自身的旋转值。比如模拟一个人进入博物馆,左右张望的情形,用自由相机就很合适。模拟 A 盯着 B 看,就把两点相机的目标点绑定在B上。三点相机比两点相机又多了一个自身旋转的控制点,想像一下坐过山车的时候整个人被旋转颠倒的感觉。适当的在动画中加入一些倾斜的感觉会更真实。












