今天上海下大暴雨,周末不想出去玩了,在家学习好了额,别人学习写教程都是从001开始,姐喜欢逆学,希望能学到欧阳锋的功夫,但是不要像欧阳锋那样疯癫就好了,哈哈。。。(如果你是高手,那你就随便看看了,如果你是新手那还是等我把001翻译好了再从001开始看吧,姐也是为你好哈)

这个教程大部分从googlecode上翻译过来的,夹杂姐的些许感慨,英文好的还是建议看原文哈,不是姐对姐的英文不自信,而是姐觉得有责任让丫好好学习下英文,o(∩_∩)o 哈哈,英文原文地址:

http://code.google.com/p/as3isolib/wiki/as3isolib_tutorial_009

开发者可以通过工厂类的实例来进行渲染视图,以使api更为灵活。 As3isolib自带默认渲染器,这些渲染器的代码可以在包as3isolib.display.renderers 中找到 值得注意的是IViewRenderer类。 IViewRenderer类旨在协助渲染视图,这个视图在大多数情况下和视图的场景相关。 下面的例子将说明如何使用IViewRenderers。

这第一个例子是没有用到IViewRenderers。 效果就是本来不应该在边界外出现的图像出现了。

第二个例子 展示了默认渲染器DefaultViewRenderer的使用,这东东 遍历 目标视图 场景的 子对象 ,并确定 他们 是否 可见区域,不在可见区域的子对象都被移除掉了。

最后一个例子综合使用DefaultViewRenderer和ViewBoundsRenderer,ViewBoundsRenderer 用于绘制 边界 矩形(可以画边界矩形) ,来限定场景子对象的边界,而不管场景子对象是否在显示列表里出现。

按照google上的例子,姐编译了下,愣是没看出第二个例子和最后一个例子效果上有啥区别,姐只好跑去看了下ViewBoundsRenderer和DefaultViewRenderer的类源码,这才恍然大悟,原来DefaultViewRenderer就是限定显示区域,而ViewBoundsRenderer就是给舞台上的对象画边框,所以姐很勤奋地修改了下google的源码,这样很容易看到区别了,啦啦啦

注:姐列出来的代码在flashdevelop下均编译通过,配置环境:sdk4,flashplay10

package
{
/**
* …
* @author amyflash.com
*/
import as3isolib.core.ClassFactory;
import as3isolib.display.IsoView;
import as3isolib.display.primitive.IsoBox;
import as3isolib.display.renderers.DefaultViewRenderer;
import as3isolib.display.renderers.ViewBoundsRenderer;
import as3isolib.display.scene.IsoGrid;
import as3isolib.display.scene.IsoScene;

import flash.display.Sprite;

public class IsoApplication9 extends Sprite
{
public function IsoApplication9 ():void
{
var box:IsoBox = new IsoBox();
box.moveTo(15, 15, 0);
var box2:IsoBox = new IsoBox();
box2.moveTo(35, 15, 0);

var grid:IsoGrid = new IsoGrid();

var scene:IsoScene = new IsoScene();
scene.addChild(box);
scene.addChild(box2);
scene.addChild(grid);
scene.render();

var view:IsoView = new IsoView();
view.setSize(150, 100);
view.addScene(scene);
/*例子 1
view.clipContent = false;*/
/*例子2
view.clipContent = true;
view.viewRenderers = [new ClassFactory(DefaultViewRenderer)];*/
//例子 3
view.clipContent = true;
var vbr:ClassFactory = new ClassFactory(ViewBoundsRenderer);
var t:ViewBoundsRenderer = vbr.newInstance();
t.renderView(view);
view.viewRenderers = [new ClassFactory(DefaultViewRenderer), vbr];
addChild(view);
}
}
}