firefox下提示TypeError: Error #1034: 强制转换类型失败:无法将 org.papervision3d.object!!!!!!
本帖最后由 amhoho 于 2010-04-10 02:50:57 编辑 问题:在ie下一切正常,但是在firefox和其它浏览器下会出现下面这提示
TypeError: Error #1034: 强制转换类型失败:无法将 org.papervision3d.objects.primitives::Cube@bfc6859 转换为 org.papervision3d.objects.DisplayObject3D。
请高手帮忙看看,到底哪出问题了, 我分析了半天没明白。
下面是代码
package
{
import __AS3__.vec.*;
import _home.*;
import flash.display.*;
import flash.events.*;
import flash.system.*;
import gs.*;
import gs.easing.*;
import org.papervision3d.lights.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.shadematerials.*;
import org.papervision3d.materials.utils.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.view.*;
public class _home extends BasicView
{
private var cameraYaw:Number = 0;
private var xCube:Cube;
private var light:PointLight3D;
public var homeEnter:MovieClip;
private var cameraPitch:Number = 80;
private var list:Vector.<DisplayObject3D>;
public static const OBJ_MAX:int = 80;
public function _home() : void
{
this.light = new PointLight3D();
this.list = new Vector.<DisplayObject3D>(OBJ_MAX, true);
this.init();
return;
}// end function
override protected function onRenderTick(event:Event = null) : void
{
this.homeEnter.x = viewport.viewportWidth / 2 - this.homeEnter.width / 2;
this.homeEnter.y = viewport.viewportHeight / 2 + 100;
this.cameraYaw = this.cameraYaw + 0.8;
if (this.cameraYaw > 360)
{
this.cameraYaw = 0;
}
if (this.cameraPitch == 180)
{
this.cameraPitch = this.cameraPitch - 0.5;
}
else
{
this.cameraPitch = this.cameraPitch + 0.5;
}
camera.orbit(this.cameraPitch, this.cameraYaw);
renderer.renderScene(scene, camera, viewport);
return;
}// end function
public function delAllEvent()
{
stopRendering();
trace("Delete _home!");
scene.removeChild(this.xCube);
this.xCube = null;
var _loc_1:int = 0;
while (_loc_1 < OBJ_MAX)
{
scene.removeChild(this.list[_loc_1]);
_loc_1++;
}
this.list = null;
this.light = null;
System.gc();
return;
}// end function
private function hideBox()
{
var _loc_2:DisplayObject3D = null;
TweenLite.to(this.xCube, 2.8, {rotationY:1500, rotationX:0});
var _loc_1:int = 0;
while (_loc_1 < OBJ_MAX)
{
_loc_2 = this.list[_loc_1];
TweenLite.to(_loc_2, 0.8, {x:this.xCube.x, y:this.xCube.y, z:this.xCube.z, rotationZ:0, rotationY:0, rotationX:0, delay:_loc_1 * 0.02});
_loc_1++;
}
return;
}// end function
public function ranBox()
{
var _loc_3:DisplayObject3D = null;
TweenLite.to(this.xCube, 0.8, {rotationY:2500, rotationX:80});
var _loc_1:uint = 5000;
var _loc_2:int = 0;
while (_loc_2 < OBJ_MAX)
{
_loc_3 = this.list[_loc_2];
TweenLite.to(_loc_3, 0.6, {x:_loc_1 * Math.random() - _loc_1 / 2, y:_loc_1 * Math.random() - _loc_1 / 2, z:_loc_1 * Math.random() - _loc_1 / 2, rotationX:360 * Math.random(), rotationY:360 * Math.random(), rotationZ:360 * Math.random(), delay:_loc_2 * 0.001});
_loc_2++;
}
return;
}// end function
public function init() : void
{
var _loc_6:Cube = null;
this.homeEnter.alpha = 0;
var _loc_1:* = new FlatShadeMaterial(this.light, 16777215, 6710886);
var _loc_2:uint = 3000;
var _loc_3:int = 0;
while (_loc_3 < OBJ_MAX)
{
_loc_6 = new Cube(new MaterialsList({all:_loc_1}), 30, 30, 30, 1, 1, 1);
_loc_6.x = _loc_2 * Math.random() - _loc_2 / 2;
_loc_6.y = _loc_2 * Math.random() - _loc_2 / 2;
_loc_6.z = _loc_2 * Math.random() - _loc_2 / 2;
_loc_6.rotationX = 360 * Math.random();
_loc_6.rotationY = 360 * Math.random();
_loc_6.rotationZ = 360 * Math.random();
this.list[_loc_3] = scene.addChild(_loc_6);
_loc_3++;
}
var _loc_4:* = this.list[Math.random() * this.list.length | 0];
var _loc_5:* = new BitmapAssetMaterial("map");
new BitmapAssetMaterial("map").smooth = true;
this.xCube = new Cube(new MaterialsList({all:_loc_5}), 200, 200, 200, 1, 1, 1);
this.xCube.rotationX = Math.random() * 180 - 90;
this.xCube.rotationY = Math.random() * 180 - 90;
this.xCube.rotationZ = Math.random() * 180 - 90;
scene.addChild(this.xCube);
this.xCube.x = 1000;
TweenLite.to(this.xCube, 0.6, {x:0, rotationZ:-60, rotationY:-60, rotationX:-60});
TweenLite.to(camera, 0.7, {focus:15, zoom:30});
camera.target = this.xCube;
startRendering();
this.xCube.alpha = 0;
TweenLite.delayedCall(3.5, this.hideBox);
TweenLite.delayedCall(5.5, this.showXbox);
return;
}// end function
private function showXbox()
{
TweenLite.to(this.xCube, 1.2, {rotationY:1900, rotationX:60, overwrite:true});
TweenLite.to(camera, 1, {focus:20, zoom:35, ease:Expo.easeInOut});
TweenLite.to(this.homeEnter, 1, {alpha:1});
return;
}// end function
}
}
[解决办法]
把firefox对应的flash player插件升级成最新再试试。
因为IE和firefox的flash player不是同一个插件,感觉这种问题不像是代码的问题,环境因素可能性更大