在as3项目中使用嵌入字体

by wersling on January 10th, 2007, under Article

为什么要使用嵌入字体的方式来显示Flash中的文本呢?理由很多:

  • 防止用户系统没有指定的字体
  • 使Flash显示效果更好,表现更好
  • 使多语言版本可以方便的根据编码格式更改字体
  • 等等

在AS2和AS1中同样可以嵌入字体,但是对于要支持中文的项目来说,嵌入字体会导致SWF文件编译时间暴长!那么,就只能采用资源共享的变态方式把字体打包在一个外部swf文件中,然后在文件开始加载进来使用。这个方法实在很变态,这里就不多说了。好再AS3提供了一个不错的方式来解决这个问题:Font 对象。

在AS3中,你可以使用 Font.registerFont(fontClass),方法来注册一个字体,只要这样,你就可以使用这个嵌入字体了,这里给出一个代码,将中文字体”微软雅黑”方便载入程序中。

点击下载此文件

4 comments

梵音 – 少林寺音乐佛教

by wersling on January 5th, 2007, under Music

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

佛教音乐源于印度。公元前后,天竺的佛教音乐甚盛。后随佛教传入中国内地。当时称为梵呗。慧皎的《高僧传》云:“天竺方俗,凡歌咏法言,皆称为呗。至于此土,咏经则称为转读,歌赞则号为梵呗。”义争的《南海寄归内法传》云:“初出家者……即须先教颂斯二赞,无问大乘、小乘,咸同遵此。”自佛教开始传入至三国时,来自印度、西域的佛教音乐。其主要代表人物是:竺示兰、迦时摩腾、支娄迦谶、支谦、康僧会、帛尸梨蜜多罗、有“胡呗三契”和“高声梵呗”;支昙有“六言梵呗”;鸠摩罗什作十首偈颂,赠沙门法和。《隋书·音乐志》载:吕光等灭龟兹,因得龟兹乐“于阗佛曲”。赞宁《高僧传·读诵篇》云:“北则竺兰,始直声而宣剖;南惟僧会,扬曲韵以讽通”,慧皎《高僧传》卷十三云:鸠摩罗什“传声则三千有余,在契则四十有二”,把竺法兰、康僧会、鸠摩罗什等奉为梵呗传入中国的代表。
  印度佛教音乐在汉地流传中,因汉、梵语音不同,曲调难以通用和接受,“梵音重复,汉语单奇;若用梵音以咏汉语,则声繁而偈迫;若用汉曲以咏梵文,则韵短而辞长,则韵短而辞长,是故金言有译,梵响无授”。为了便于弘扬佛法,为广大信徒所接受,音乐遂“改梵为秦”,用中国的音调来配唱汉译经文。相传最早改梵为秦的是三国魏曹植。《法苑珠林》言其游鱼山时,闻空中梵天之响而“制转赞七声,升降曲折之响,世之讽诵,咸宪章焉”。魏晋间的佛教出现了与印度佛教音乐相异的形式,由中国人创制的佛教音乐,可视为中国佛教音乐的萌芽。
  南北朝时,随着佛教的传播,民间吟唱赞偈甚为流行。佛教中涌现了一些有民族文化和艺术修养的僧人,在慧皎的《高僧传》和道宣的《续高僧传》等书中,记载了南北朝至唐初的许多擅长佛教音乐的高僧,如道照、慧琚、昙宗、道慧、智周、慧明、法称、真观等。据传,他们皆“尤善唱导,出语成章”,“声韵锤铃”, “唱说之功,独步当世”;其见闻者,莫不惊异。梁武帝箫衍积极倡导师佛教音乐,《隋书·音乐志》云:帝既笃敬佛法,“制《善哉》、《大乐》、《大欢》、《天道》、《仙道》、《神王》、《龙王》、《灭过恶》、《除爱水》、《断苦轮》等十篇,名为正乐”。另外,他还开创了童声演唱佛曲的“法乐童子伎”,让 “童子倚歌梵呗”,又多次举办“无遮大会”,为中国佛教音乐创作、传播,提供了有利的场所和条件。这一时期,各地佛教音乐在创作中,又因方言、地方音乐和风俗习惯的不同而风格各异。道宣在《续高僧传·杂科声德篇》中评论道:佛教音乐“地分郑魏,声亦参差”,“东川诸梵声唱尤多,其中高者,则新声助哀般遮屈势之类也”,“吴越志扬,俗好浮绮,致使音颂所尚唯以纤婉为工”,“江淮之境,偏饶此玩,雕饰文绮,糅以声华”,“秦壤雍冀,音词雄远”。南北朝时代,乐僧辈出,新创作丰富多彩,信众欢迎,加上帝王倡导,这就为佛教音乐的中国化奠定了基础。
  唐代,西域音乐广泛传入中原地区,唐太宗在宫廷欢宴百僚时,经常演奏《燕乐》、《清乐》、《西凉乐》、《天竺乐》、《高丽乐》、《龟兹乐》、《安国乐》、《疏勒乐》、《康国乐》、《高昌乐》等
十部乐。其中《天竺乐》、《西凉乐》、《龟兹乐》等西域音乐和佛教音乐均有密切的关系,也是当时中原最流行的音乐。《旧唐书·音乐志》云:“自周、隋以来,管弦杂曲将数百曲,多用《西凉乐》。”同时,中国佛教音乐在创作和演唱、演奏上均达到很高水平,进入了鼎盛时期。庙会在唐代已成为艺术表演场所,寺院成为保存和传习佛教音乐的中心,僧人中演唱、演奏大师辈出。如《宋高僧传》称少康唱偈赞,“皆附会郑卫之声,变体而作。非哀非乐,不怨不怒,得处中曲韵”,其艺术魅力如“善医以饧蜜涂逆口之药,诱婴儿入口耳”;唐《乐府杂录》和《因话录》说文淑“善吟经,其声宛畅,感动里人”,“听者填咽寺舍”。《太平广记》称唐文宗曾采其讲声成为小管的曲子。又如段善本,贞元年间与有“长安第一手”之称的琵琶演奏家康昆仑比艺,其高超的演奏技术使听众倾倒,康昆仑惊服,后拜其为师。唐代佛教的“俗讲”吸引广大百姓,韩愈诗云:“街东街西讲佛经,撞钟吹螺闹宫廷”;姚合也有“仍闻开讲日,湖上少鱼船”和“酒坊鱼市尽无人”之句。《续高僧传》记载宝巖和尚登座俗讲时,“案几顾望,未及吐言,掷物云崩,须臾坐没”,有的高僧“随物赞祝,其纷若花,士女观听,掷钱如雨”。
  唐代佛曲名目甚多。据近人任二北对敦煌卷子中的500余首曲名进行考证研究,其中佛曲有:《婆罗门》、《悉昙颂》、《佛说楞伽经禅门悉昙章》、《好住娘》、《散花乐》、《归去来》、《太子五更转》、《十二时》、《百岁篇》等281首。在陈旸的《乐书》中,还载有:《普光佛曲》、《弥勒佛曲》、《如来藏佛曲》等几十首。此外,在《羯鼓录》、《食曲》、《唐会要》等书中。也有佛曲名的记载。唐代佛教音乐还吸收和融合了民间音乐和古乐,如佛曲《五更转》、《十二时》、《百岁篇》、《好住娘》等。在历经了600余年发展、变化,经过汉族多代僧人的努力创造,中国佛教音乐在唐代进入了辉煌灿烂时期。
  宋元明清诸代,佛教音乐又经多次的搜集、加工和整理。明永乐二年(1404),成祖搜集唐、宋、元以来通行南北的佛教音乐曲调400余首,编成《诸佛世尊如来菩萨尊者名称歌曲》行世。这本曲集不但影响全国,还流传越南、缅甸一带。
  近代佛教音乐基本上保存了明清的传统。音乐活动较著名的,有常州天宁寺、宁波天童寺、北京智化寺、扬州大明寺以及山西五台山诸博物院。为发掘、整理中国古老的佛教音乐,1986年3月,北京于广化寺成立了北京佛教音乐团,整理、研究智化寺自明正统(1436~1449)年间流传下来的京音乐。
  佛教音乐对于中国民间说唱音乐、音韵学以及乐律、音阶和字谱学的发展,均有重要影响。另外,崇奉佛教的音乐家和民间音乐艺人,还创作过不少宣传佛家思想的非宗教仪式所用的声乐作品和器乐作品,如琴曲《普庵咒》,说唱音乐“宣卷”、“宝卷”的早期作品和现代名僧弘一所作的《三宝歌》等。

更多音乐下载

, , , 2 comments

安装Flash Player 9 Debugger 版本

by wersling on November 17th, 2006, under Article

自从采用Flex来开发后,一直就使用9.0.16.0版本。why?因为我一升级Flash Player,Flex就不能Debug了,很是郁闷,后来才知道有Debug版本的Player可以安装,开始也有人问过这个问题,所以现在贴出来。

下载地址:

Adobe Flash Player 9 — Debugger Versions 9.0.r28 (aka debug players or content debuggers) for Flex Builder 2(Web Link)

Adobe Flash Player 9 for Linux(Web Link)

4 comments

Coding ActionScript 3.0 [4] 外部swf库资源载入及使用

by wersling on September 29th, 2006, under Article

关于 Coding ActionScript 3.0系列


我打算开始转入AS3的开发,之前的AS2代码将逐步转移过来,在编码过程中可能获得一些有价值的信息,我将和大家一起分享和讨论。有更好的建议,也可以在这里提出来。我不保证我采用的方法是最好的,也不保证代码没有任何问题,应此,在使用我的代码产生的任何问题,我都不负责。同时,请注意,不要将这些代码用于商业用途,如果必须,请与我联系。

外部swf库资源载入及使用


如果不知道怎么载入swf文件,请先看 Coding ActionScript 3.0 [3] 外部swf文件载入。
很多的时候我们并不希望我们的项目就是一个超级大的swf文件,尤其是在as3中,你可以做到代码与界面的分离,所以,将资源放在一个一个的swf文件中成为必要。那么如果载入和使用这些外部的swf资源呢?不要着急,先喝口水。。。。
在as2中你可以在加载完swf库文件后使用attachMovie将元件添加进来,看上去很方便,其实,as3提供了更方便的方式来,下面请听我慢满道来。。。。
————————————–传说中最优美的分割线————————————–

首先我们要来了解一下as3的一个新特性,那就是attachMovie这个方法没有了(废话),取代它的是addChild。任何的MC我们都需要new 出来,然后addChild另一个MC中,所以,你加载进来的swf文件事实上也是一个mc(实际是DisplayObject,DisplayObject是什么,你得看帮助了。),对于一个DisplayObject,你可以做什么?attachMovie?不,这个方法没有了!那么。。。new ?,对了!首先,你可以在库文件中(我这里把它叫:lib.fla),建立一个元件,class名称为Lib,至于里面的动画什么的,你自己做。然后在主场景第一帧写这样的代码:

function getMC(id:String):MovieClip{
try{
var ClassReference:Class = getDefinitionByName(id) as Class;
}catch(e:Error){
trace(e);
return new MovieClip();
}
var instance:Object = new ClassReference();
return instance;
}

完了一可以测试一下:

var mc:MovieClip = getMC(“Lib”);
this.addChild(mc);

如果你可以看到你的元件被加载,那么恭喜你,你成功跨出第一步了。这里需要提到的是getDefinitionByName方法,他是as3的一个新方法,你可以通过ClassName来获得Class对象。
OK,你可以建立你的主程序了,我这里建立了一个main.fla文件,在第一帧加入这样的代码:

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHanlder);
loader.load(new URLRequest(“lib.swf”));
//资源加载完成
function loadCompleteHanlder(e:Event):void{
var lib:MovieClip = e.target.content.getMC(“Lib”);
this.addChild(lib);
lib.x = lib.y = 100;
}

然后,发布!

如果你没有成功,你可以下载我的原代码看看。看有什么地方不对。点击下载原文件
这里需要注意的是e.target.content,有关这个部分,你可以去看看事件对象相关的内容。还有,如果你getMC是一个不存在的,在这个例子中程序会返回一个新的mc,其实,你也可以不这样,让程序出错,你去捕获。好了,这个部分就到这里,由于问的人很多,我只好写出来了,呵呵。希望对你有点帮助。

2 comments

Coding ActionScript 3.0 [3] 外部swf文件载入

by wersling on September 19th, 2006, under Article

关于 Coding ActionScript 3.0系列


我打算开始转入AS3的开发,之前的AS2代码将逐步转移过来,在编码过程中可能获得一些有价值的信息,我将和大家一起分享和讨论。有更好的建议,也可以在这里提出来。我不保证我采用的方法是最好的,也不保证代码没有任何问题,应此,在使用我的代码产生的任何问题,我都不负责。同时,请注意,不要将这些代码用于商业用途,如果必须,请与我联系。

Loader


在AS2中加载外部swf文件一般都用MovieClipLoader对象,在as3中则需要采用Loader比较方便。Loader继承DisplayObject,因此,你可以直接在一个DisplayObject中采用addChild方法加载进来:

var loader:Loader = new Loader();
this.addChild(loader);

但是,这样你加载进来的是一个Loader,而不是Loader对象Load进来的swf,因此,你需要采用这样的方式:

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest(“lib.swf”));
function completeHandler(event:Event){
var _content:DisplayObject = event.target.content;
this.addChild(loader);
}

此外,需要注意,你无法直接监听loader对象来获取文件是否加载完毕。需要采用loader.contentLoaderInfo。

点击下载原文件

PS.
做人要厚道,看完日志记得给我女朋友投上一票我投

3 comments

Coding ActionScript 3.0 [2] 简单的DeBug对象

by wersling on September 19th, 2006, under Article

关于 Coding ActionScript 3.0系列


我打算开始转入AS3的开发,之前的AS2代码将逐步转移过来,在编码过程中可能获得一些有价值的信息,我将和大家一起分享和讨论。有更好的建议,也可以在这里提出来。我不保证我采用的方法是最好的,也不保证代码没有任何问题,应此,在使用我的代码产生的任何问题,我都不负责。同时,请注意,不要将这些代码用于商业用途,如果必须,请与我联系。

Tracer


在很多的时候,我们需要测试代码,那么我们可以采用trace结果出来。对于一个小的应用可以这样,但是,如果这样的trace很多的时候,你显示出来的信息就会很多,而且,很多时候,你不希望删除这些测试代码,因为你怕再出现问题。这个时候,你有必要建立一个DeBug对象。这个对象可以做这样的事情:

  1. 根据需要,显示不同级别的信息
  2. 可以设置是否显示DeBug信息
  3. 对信息进行分类

解决方案:

  1. 定义不同级别的信息的值,建立序列
  2. 正对不同级别信息采用不同的方法抛出
  3. 建立一个接口用于设置信息显示级别

点击下载源代码

No comments