原文地址:http://code.google.com/p/as3isolib/wiki/as3isolib_tutorial_006

ISceneRenderers可以给 IsoScene自定义样式 和布局 ,当前有两种ISceneRenderers,他们能处理场景上子对象的布局,他们能自定义整个场景和子对象的风格(比如设置阴影和别的效果),ISceneRenderer帮助开发者自定义布局 和造型,而不仅限于已有类。

实现作用于场景的 ISceneRenderer类的方式中用到了工厂方法(这个概念借鉴了Flex SDK的工厂接口和类)

以下示例展示了ISceneRenderer如何用作场景的风格的渲染器:

注:google上代码的小小错误被姐修正了,嗯!

package

{

/**

* …

* @author amyflash.com

*/

import as3isolib.core.ClassFactory;

import as3isolib.core.IFactory;

import as3isolib.display.IsoView;

import as3isolib.display.primitive.IsoBox;

import as3isolib.display.renderers.DefaultShadowRenderer;

import as3isolib.display.scene.IsoGrid;

import as3isolib.display.scene.IsoScene;

import flash.display.Sprite;

public class IsoApplication6 extends Sprite

{

public function IsoApplication6 ()

{

var scene:IsoScene = new IsoScene();

scene.hostContainer = this;

var g:IsoGrid = new IsoGrid();

g.showOrigin = false;

scene.addChild(g);

var box:IsoBox = new IsoBox();

box.setSize(25, 25, 25);

box.moveBy(20, 20, 15); //feature request added

scene.addChild(box);

//var factory:IFactory = new ClassFactory(DefaultShadowRenderer);

var factory:as3isolib.core.ClassFactory = new as3isolib.core.ClassFactory(DefaultShadowRenderer);

factory.properties = { shadowColor:0x000000, shadowAlpha:0.15, drawAll:false };

// factory.properties = { shadowColor:0x000000, shadowAlpha:1, drawAll:false };

scene.styleRenderers = [factory];

scene.render();

var view:IsoView = new IsoView();

view.y = 50;

view.setSize(150, 100);

//view.scene = scene; //look in the future to be able to add more scenes

view.addScene(scene);

addChild(view);

}

}

}

如果因为某种原因,你想要不同颜色的阴影,可以简单的修改对应代码如下:

factory.properties = { shadowColor:0x000000, shadowAlpha:1, drawAll:false };

IsoScenes只能有一个ISceneRenderer类型的布局渲染器,但是可以有多个风格渲染器;风格渲染器越多耗cpu资源越大,风格渲染的顺序与它们被添加的顺序一致。