我在Papervision3D中遇到了ScrollPane组件的主要问题。这个问题已在几个不同的论坛上提出,但尚未解决:
我尝试过动态创建ScrollPane,并将其拖到舞台上,当它添加到PaperVision3D环境中的MovieClip时,它总是以默认大小(100,100)显示。我甚至无法让Tween处理它的大小。
答案 0 :(得分:1)
好的,这就是。
我试图让它与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,但是我无法得到相同的结果,因此我使用oldschool创建场景,相机,渲染和视口的方式。 由于ScrollPane需要舞台,我已将它添加到舞台然后设置其大小。 我使用ScrollPane创建了一个MovieMaterial,并将其交互性设置为true。 我通过放置舞台'隐藏'组件。将visible设置为false会让我回到100x100问题。
我有点谷歌因为我记得曾经使用过papervision的UI组件。这是事实,他们使用来工作。 Here是我记得的帖子。 Blitz Agency也有类似的帖子。你可以找到InteractiveMovieMaterial.as,如果你谷歌它,但它不适用于当前的papervision版本,因为没有drawFace3D方法,事情已经改变了一点。在我做了修复后,我发现了一个关于这个问题的更新的(2008)blog post on John Grden's website。这种方法有相似之处,但我还没有遇到所有麻烦。
希望这有帮助!