原文地址: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资源越大,风格渲染的顺序与它们被添加的顺序一致。