好的,这就去。
我试图让它与 MovieAssetMaterial 一起工作,但没有运气。如果我在 MovieAssetMaterial 中跟踪舞台,则舞台为空,我猜这就是滚动窗格无法正常运行的原因。它是一个容器,因此它需要舞台来正确设置自己。
我已经设法在 papervision 平面上获得了一个 200x200 的滚动窗格,并通过一些变通方法进行交互。这是我的代码:
package{
import org.papervision3d.*;
import org.papervision3d.view.*;
import org.papervision3d.cameras.*;
import org.papervision3d.materials.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.scenes.*;
import org.papervision3d.render.*;
import flash.display.*;
import flash.events.*;
import fl.controls.*;
import fl.containers.*;
public class PV3DScrollPane extends MovieClip{
private var viewport:Viewport3D;
private var camera:Camera3D;
private var scene:Scene3D;
private var renderer:BasicRenderEngine;
private var plane:Plane;
public function PV3DScrollPane(){
init3D();
}
private function init3D():void
{
//setup 3d
viewport = new Viewport3D(1024, 768, false, true);
addChild(viewport);
camera = new Camera3D();
camera.z = -500;
camera.zoom = 1;
camera.focus = 500;
camera.target = DisplayObject3D.ZERO;
scene = new Scene3D();
renderer = new BasicRenderEngine();
//setup plane
plane = makePlane();
stage.addEventListener(Event.ENTER_FRAME, loop);
}
public function makePlane():Plane
{
//setup scroll pane
var sp:ScrollPane = new ScrollPane();
addChild(sp);
sp.x = 1000;//hide it off stage, visible doesn't help much
sp.source = 'http://www.helpexamples.com/flash/images/image1.jpg';
sp.setSize(200, 200);
//setup material & plane
var mat:MovieMaterial = new MovieMaterial(sp, false, true, false);
mat.interactive = true;
var plane:Plane = new Plane(mat, 0, 0, 10, 10);
scene.addChild(plane);
return plane;
}
private function loop(evt:Event):void
{
//plane.rotationY++;
renderer.renderScene(scene, camera, viewport);
}
}
}
以及解释:我尝试过使用 BasicView,但我无法获得相同的结果,所以我使用了创建场景、相机、渲染和视口的老式方法。由于 ScrollPane 需要舞台,因此我已将其添加到舞台然后设置其大小。我使用 ScrollPane 创建了一个 MovieMaterial,并将其交互性设置为 true。我通过放置舞台“隐藏”了组件。将可见设置为 false 让我回到了 100x100 问题。
我用谷歌搜索了一下,因为我记得 UI 组件曾经与 papervision 一起使用。这是真的,他们曾经工作过。这是我记得的帖子。Blitz Agency 不久前也有类似的帖子。你可以找到 InteractiveMovieMaterial.as 如果你用谷歌搜索它,但它不适用于当前的 papervision 版本,因为不再有 drawFace3D 方法,事情发生了一些变化。完成修复后,我在 John Grden 的网站上发现了一篇关于此问题的更新(2008 年)博客文章。这种方法有相似之处,但我还没有经历过所有的麻烦。
希望这可以帮助!