flash 3d flash3d 研究所 pv3d 共享资源  | 经典范例  | 视频教程  | 友情链接  | 联系我们
登陆 | 注册  flash 3d 研究所
讨论区





最近更新:
● payday loan阁下在教程区里 回复“《pv3d, sandy, away3d...”(05:56:23)
● bad credit payday loan阁下在教程区里 回复“《超简易papervision3D基础 ...”(05:56:13)
● payday loan阁下在教程区里 回复“《超简易papervision3D基础 ...”(05:56:12)
浏览主题:视频面板的问题

视频面板的问题
Jun天子 (2010-02-03 14:50:29)

我FLASH AS3做了一个视频面板类名叫TestVideoMat能够正常用运行,我用一个总类调用这个类,
package {
 import flash.display.Sprite;
 import flash.events.Event;
 
 public class Wang extends Sprite {

  public function Wang() {
   initScenePanel();
  }
  private function initScenePanel():void {
   var tt=new TestVideoMat  ;
   addChild(tt);
   tt.x=200;
   tt.y=200;
  }
 }
}就出现有声音没有视频还有下面的那些错误提示,这是什么原因?实话说我AS3也是刚学的,更别说是PV3D了,这是毕业作品急啊!
TypeError: Error #1009: 无法访问空对象引用的属性或方法。
 at TestVideoMat/addProjector()
 at TestVideoMat/createLight()
 at TestVideoMat/init3D()
 at TestVideoMat()
 at Wang/initScenePanel()
 at Wang()



flash 3d 研究所 guke18410
(2010-02-03 15:11:14)
程序方面的问题我还能提供点帮助
应该是addProjector()方法里某个对象没有获取到或者没有初始化
我不知道你用的是什么开发工具,如果能debug的话,看看出错在哪一行就明白了

flash 3d 研究所 Jun天子
(2010-02-03 15:39:24)
我用的是FLASH AS4

flash 3d 研究所 Jun天子
(2010-02-03 15:43:38)
我是想把这个类放进Wang这个总类里的
package {
     import flash.events.Event;
     import flash.events.MouseEvent;
     import flash.geom.Point;
     import flash.media.SoundTransform;
     import flash.media.Video;
     import flash.net.NetConnection;
     import flash.net.NetStream;

     import org.papervision3d.events.InteractiveScene3DEvent;
     import org.papervision3d.lights.PointLight3D;
     import org.papervision3d.materials.MovieMaterial;
     import org.papervision3d.materials.VideoStreamMaterial;
     import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
     import org.papervision3d.materials.utils.MaterialsList;
     import org.papervision3d.objects.DisplayObject3D;
     import org.papervision3d.objects.primitives.Cube;
     import org.papervision3d.view.BasicView;

     public class TestVideoMat extends BasicView {
           public function TestVideoMat() {
                 super(800,800,true,true);
                 init3D();
           }

           private var video:Video;
           private var light:PointLight3D;
           private var objGroup:DisplayObject3D;
           private var stream:NetStream;
           private var cb:Cube;
           private var prevPoint:Point=new Point(0,0);
           private var _yaw:Number;
           private var _pitch:Number;
           private var aim:DisplayObject3D;
           private var Flag=0;

           private function init3D():void {
                 createVideo();
                 createLight();
                 camera.zoom=2;
                 camera.focus=400;
                 
                 stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
                 stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
                 startRendering();
           }
           override protected function onRenderTick(event:Event=null):void {
                 //cb.rotationY+=1;
                 super.onRenderTick(event);
           }
           
           private function mouseDownHandler(evt:MouseEvent):void {
                 prevPoint=new Point(evt.stageX,evt.stageY);
                 stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
           }
           private function createVideo():void {
                 var nc:NetConnection = new NetConnection();
                 nc.connect(null);
                 stream=new NetStream(nc);
                 stream.client = new Object();
                 video = new Video();
                 stream.play('rabbit.flv');
                 video.attachNetStream(stream);
                 
           }
           private function createLight():void {
                 light = new PointLight3D();
                 light.x=400;
                 light.y=1000;
                 light.z=-400;
                 objGroup = new DisplayObject3D();
                 var _videoMat:VideoStreamMaterial=new VideoStreamMaterial(video,stream,false,true);
                 addProjector(_videoMat);
           }
           private function addProjector( _videoMat:MovieMaterial ):void {
                 
                 var _flat:FlatShadeMaterial=new FlatShadeMaterial(light);
                 _flat.interactive=true;
                 var _matList:MaterialsList = new MaterialsList();
                 _matList.addMaterial(_flat,'all');
                 _matList.addMaterial(_videoMat,'front');
                 _matList.addMaterial(_videoMat,'back');
                 cb=new Cube(_matList,320,20,200);
                 stage.addEventListener(MouseEvent.DOUBLE_CLICK,dClick);
                 stage.doubleClickEnabled=true;
                 cb.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK , clickHandle);
                 
                 scene.addChild(cb);
                 scene.addChild(light);
           }
           
           private function dClick(event){
                 if(Flag==0){
                       Flag=1;
                 cb.scaleX=1.5;
                 cb.scaleY=1.5;
                 }else{
                       Flag=0;
                       cb.scaleX=1;
                 cb.scaleY=1;
                       }}
           private function clickHandle(e:InteractiveScene3DEvent):void {
           }
           
           
           private function mouseUpHandler(evt : MouseEvent):void {
                 stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
           }
           private var cameraPitch:Number=0;
           private var cameraYaw:Number=0;
           private function mouseMoveHandler(evt : MouseEvent):void {
                 var dPitch:Number = (evt.stageY - prevPoint.y) / 2;
                 var dYaw:Number = (evt.stageX - prevPoint.x) / 2;
                 if (cameraPitch==0) {
                       cameraPitch=evt.stageY;
                 }
                 if (cameraYaw==0) {
                       cameraYaw=evt.stageX;
                 }
                 cameraPitch-=dPitch;
                 cameraYaw-=dYaw;
                 prevPoint.x=evt.stageX;
                 prevPoint.y=evt.stageY;
                 trace(cameraPitch,cameraYaw);
                 camera.orbit(cameraPitch, cameraYaw);
           }
           
     }
}

flash 3d 研究所 guke18410
(2010-02-03 18:02:05)
你的问题处在stage,这个对象是有些特殊的,在文档类中直接使用没有问题;但是非文档类,如果没有被加入到显示列表中,这个stage是null的,就出现了你碰到的问题。

一个解决办法:如果你的实现一定要用到stage的话,就把初始化动作延迟到构造方法之后,比如像这样:
...
var testVideoMat:TestVideoMat = new TestVideoMat();
addChild(testVideoMat);
testVideoMat.init3D();
...
不过这样并不是好的设计,你可以考虑改变一下当前的实现方式

flash 3d 研究所 DDM君
(2010-02-04 13:54:59)
stage需要侦听是否已经作为父对象存在了。

flash 3d 研究所 Jun天子
(2010-02-04 15:18:15)
正如guke18410前辈就那么样把那么stage去掉就可以调用了,如果把那个鼠标事件用mouseDrager可不可以?不过我试过用了一下mouseDrager做出现下面错误1118: 属于 static 类型 org.papervision3d.core.proto:CameraObject3D 的值的隐式强制指令的目标可能是非相关类型 org.papervision3d.cameras:Camera3D。
不知道是不是和BasicView有关?

flash 3d 研究所 DDM君
(2010-02-04 22:15:18)
mouseDrager有可能是这个问题, 总之,必须保证你用的摄像机参数是一个camera3D

flash 3d 研究所 Jun天子
(2010-02-04 23:03:24)
DDM君能说下BasicView要怎么加入mouseDrager事件?我怎么看也看不出来那里出错了,BasicView不是BasicRenderEngine;Scene3D;Viewport3D;Camera3D这四个的集合吗?怎么我把BasicView变成这四个类,视频反而播放不了了,我本想用这四个类看能不能实现mouseDrager,没想到-_-!


           

flash 3d 研究所 Jun天子
(2010-02-07 17:09:58)
视频面板问题终于解决了太开心了,多谢guke18410和DDM君
前辈的帮助^_^

flash 3d 研究所 DDM君
(2010-02-08 13:28:44)
basic view只要把默认的摄像机等等参数输入后,应该还是能用的。

其实我们研究所不鼓励basic view的原因是比较不容易帮助初学者理解需要生成的最基本的4要素,最好熟悉后,再使用basicview,这样换到其他引擎也很上手。

评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容: (广告和垃圾内容可能会被删除,望理解)
链接地址

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了