pv3d自从添加了VirtualMouse以后,MovieMaterial就可以用基于flash的方式,通过assets.addEventListener来增加鼠标事件。不过一路过来bug重重...这次又发现一个。
![]()
点击打开
1
package
2
{
3
import flash.display.Sprite;
4
import flash.events.Event;
5
import flash.events.MouseEvent;
6
import flash.filters.DropShadowFilter;
7
import org.papervision3d.cameras.Camera3D;
8
import org.papervision3d.objects.primitives.Plane;
9
import org.papervision3d.materials.MovieMaterial;
10
import org.papervision3d.render.BasicRenderEngine;
11
import org.papervision3d.scenes.Scene3D;
12
import org.papervision3d.view.Viewport3D;
13
14
public class TestPV3D extends Sprite
15
{
16
private var viewport:Viewport3D;
17
private var scene:Scene3D;
18
private var camera:Camera3D;
19
private var renderer:BasicRenderEngine;
20
21
private var plane:Plane;
22
private var material:MovieMaterial;
23
24
public function TestPV3D()
25
{
26
init();
27
}
28
29
private function init():void
30
{
31
initPv3d();
32
createMaterials();
33
createObjects();
34
addListeners();
35
}
36
37
private function initPv3d():void
38
{
39
viewport = new Viewport3D( 640, 480, false, true );
40
addChild( viewport );
41
scene = new Scene3D();
42
camera = new Camera3D();
43
renderer = new BasicRenderEngine();
44
}
45
46
private function createMaterials():void
47
{
48
var spr:Sprite = new Sprite();
49
spr.graphics.beginFill(0xFF0000);
50
spr.graphics.drawRect(0, 0, 100, 100);
51
spr.graphics.endFill();
52
53
spr.filters = [new DropShadowFilter()];
54
addChild(spr);
55
56
material = new MovieMaterial(spr);
57
material.interactive = true;
58
}
59
60
private function createObjects():void
61
{
62
plane = new Plane(material, 100, 100);
63
scene.addChild( plane, 'plane' );
64
}
65
66
private function addListeners():void
67
{
68
material.movie.addEventListener( MouseEvent.CLICK, handleClick );
69
addEventListener( Event.ENTER_FRAME, handleEnterFrame );
70
}
71
72
private function handleClick( e:MouseEvent ):void
73
{
74
trace('click', e);
75
}
76
77
private function handleEnterFrame( e:Event ):void
78
{
79
renderer.renderScene( scene, camera, viewport );
80
}
81
}
82
}
光看里面函数createMaterials,设置滤镜那两句
spr.filters = [new DropShadowFilter()];
addChild(spr);
屏蔽这两句一切正常,但是设了filters,不addChild,鼠标交互就不行了。
加了addChild倒是可以了,但是场景上多出个没用的东西,删除的话至少得“等一帧”,这种flash典型的渲染问题在这儿也能碰上...
问题是,等一帧就删,没用的东西还会在画面上闪一下,为了防止闪,必须在addChild时候,spr.visible = false;然而一false,鼠标交互又不行了...
还得再删掉之前spr.visible = true 一下,这样就行了。
不知道是不是因为设置了滤镜造成对象位置上的偏差...目前不理解ing
情况我已经反应给pv3d他们了,不过英文实在是鸟.....哪位好心人看着能帮忙解释下,免得pv3d的高手脑死在我的鸟语手里orz
http://code.google.com/p/papervision3d/issues/detail?id=92