Recent Articles
两个翻转BitmapData的函数
一 15, 2010 FLASH/FLEX开发 Leave a comment
这几天一直在烦恼图片的旋转啦,切割啦,对座标啦,等等等……
贴几个函数.
//向右旋转90度 public function scaleRight(bmp:BitmapData):BitmapData{ var m:Matrix = new Matrix(); m.rotate(Math.PI/2); m.translate(bmp.height,0); var bd:BitmapData = new BitmapData(bmp.height, bmp.width,false); bd.draw(bmp,m); return bd; } //向左旋转90度 public function scaleLeft(bmp:BitmapData):BitmapData{ var m:Matrix = new Matrix(); m.rotate(-Math.PI/2); m.translate(0,bmp.width); var bd:BitmapData = new BitmapData(bmp.height, bmp.width,false); bd.draw(bmp,m); return bd; }
ZamfBrowser:不错的ZendAMF调试工具
一 13, 2010 FLASH/FLEX开发, 资源下载 Leave a comment
事实证明,经常看看那些开源项目的网站,总是会好处的.我今天逛puremvc的网站就有了一个惊喜,发现了一个基于puremvc的开源东东叫:ZamfBrowser.用这个工具,可以方便的对ZendAMF的php端程序进行测试和调试.
官方网站:http://www.zamfbrowser.org/
项目的SVN地址:http://svn.riaforge.org/zamfbrowser/
从SVN当下来的代码有两个部分,air和php.
air部分的代码,需要在flex中建一个air项目,把puremvc的代码链进来,就可以进行编译了.可以release一个版本出来,自个安装一下.注意:要air运行环境哦.
php部分的代码里面有个示例代码的zip包,实际上用到的只是sourse目录中的ZendAmfServiceBrowser.php文件.
具体使用方法如下:
1)rowser拷到你的项目中.
2)修改你的gateway.php文件.添加如下代码
require_once( "browser/ZendAmfServiceBrowser.php" ); $server->setClass( "ZendAmfServiceBrowser" ); ZendAmfServiceBrowser::$ZEND_AMF_SERVER = $server;
下面就是启动你刚刚装好的的air程序,添加一个服务,第一个框中随便填个名称,第二个框中填gateway.php的地址,就OK了.
下面你就可以对你项目中各个类中的各个方法进行测试了,设定传入的参数,查看传回的结果.
爽吧?
具体的使用帮助,请看官网的:
http://www.zamfbrowser.org/documentation.html
转7yue一篇吹牛文
一 8, 2010 业界新闻 Leave a comment
转一篇7yue博客上的一篇吹牛文.名曰:2010,Flash走在social的路上
当全国乃至全球网民都在挖菜和钓鱼的时候,当人们对于social网络的热情直接从flickr等应用转向facebook和twitter的时候,众多的市场分析机构大声疾呼,social化的网络时代已经到来(尽管这与翻墙没什么本质联系)。的确,当你上班打开电脑的第一件事是去看看菜地里的菜是否还在,是打开新浪围脖看看姚晨童鞋有没有新的唠叨出来的时候,你还没有out。扯远了,让我们回到Flash上,Flash在我眼里绝对是互联网的一个幸运鸟,有哪个基于浏览器插件才能播放的技术能像Flash这么幸运,在互联网过去潮起潮落的10多年里,依然是各位专注前端技术的geek与务实派们争论的核心,依然是众多网络social应用的首选技术。当然,前端的geek们关注的永远是Ajax和flash之间的开放和功能性的争斗,在他们眼里,Flash可能就是一堆自私的,封闭的,邪恶的XX,只有万能的Ajax编写出来的贝泽尔曲线和A寻路算法才是王道,而在务实派的眼中,Flash只是帮助他们的点子得以赚钱的工具而已,事实上是他们根本不关心这个玩意的名字。但是Flash的确有她的粉丝,是一群独立而敏感的设计师,是一群希望在大众化下寻求优雅的前端开发者。我想一定是Flash帮助他们实现了什么别的玩意实现不了的东西,才成为他们心中又爱又恨的伙伴。
Flash已经13岁了,经历了10个版本的进化,在这10多年的互联网汪洋中,就像一个老水手一样,经历过太多。Flash第一次的崛起是在1999年到2000年,当时连邻家小妹都想用Flash做个属于自己的MTV动画,平均每个月就有若干个Flash动画制作大赛,你要用Flash做几个圆飞来飞去,你都不好意思说你是搞程序或搞互动设计的。全民玩Flash成就了它的第一次。这是一个偶然么,我想这是一个偶然之上的必然。如果哪天Silverlight也来一次全民都玩Silverlight,那么微软的人一定是当年macromedia跳槽过去的,请记住我的话。Flash的第二次崛起是在当时已经挤得没有任何空间的媒体播放器市场里插了一腿,突然间,所有Flash爱好者都发现它里面有了个Sorenson Spark H.263的FLV编码。“这玩意播放视频简直就像一堆X”,来自某著名软件公司媒体播放器部门的产品经理“客观”评价到。之后,你知道的,12月内,从国外到国内,大家都喜欢上了网络视频,只不过是83版射雕被人传到了网络上,一大堆人又为翁美玲的绝唱而内牛满面;只不过是小布什的众多搞笑视频被大家从harddisk里翻出来传到了网络上,一大堆人围着这些视频瞎扯淡;只不过是谁家的儿子去公园玩,发生了巨可爱的草根故事,被某人传到了网络上,一堆人跟着争相去把儿子闺女的视频拿出来品评而已,是的,这就是Flash第二次涅槃,它真的很幸运,也让别人眼红,但是为什么别的什么媒体播放器没有做到第一个吃螃蟹的呢?那个产品经理又要说“Flash实在是太TM走运了”。2009年,大伙都变成了菜农,谁都可以去别人农场里挤奶牛,谁都可以随时凑一起打打牌,钓钓鱼,2009年,social网络的真正崛起,我已经闭着眼睛都能说,只有草根化的网络应用才能带动互联网的应用革命,老百姓都喜欢挖菜,所以挖菜火了,你可以随便在什么场合说,这种游戏太那啥了,简直是侮辱我的的智商,但是事实是它的确火了。Flash可不管这一套,它不是面向geek的技术,随你怎么说,它有一个太出色的产品团队和决策团队(微软真正的应该考虑去把这些人挖来了,但是很抱歉,我不会透露任何他们的联系信息),经过了数轮圆桌会议后(可能实际过程比这个复杂),Facebook上的前10的应用有8个游戏,其中7个游戏是用Flash做的,国内的social化应用的情况也差不多。Flash第三次崛起。
于是我想,2010到2012年(如果2012之后地球还在的话),Flash是走在Social的道路上,可能座驾是smartphone。
一个声音光谱效果的源码
一 7, 2010 FLASH/FLEX开发, 资源下载 Leave a comment
偶然发现了这个效果,只有一个类,效果狂好.奉上源码
点击下面的[flash]开始欣赏.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.ColorTransform; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.media.Microphone; import flash.media.Sound; import flash.media.SoundMixer; import flash.utils.ByteArray; [SWF( backgroundColor='0', frameRate='35', height='400', width='400')] public class Main extends Sprite { private var mic: Microphone; private var sound: Sound; private var bytes: ByteArray; private var output: BitmapData; private var peaks: BitmapData; private var displace: Matrix; private var rect: Rectangle; private var gradient: Array; private var darken: ColorTransform; [Embed(source="song.mp3")] public var soundClass:Class; public function Main() { sound = new soundClass as Sound; stage.addEventListener(MouseEvent.CLICK,onStageClicked); bytes = new ByteArray(); output = new BitmapData( stage.stageWidth, stage.stageHeight, true, 0 ); peaks = new BitmapData( stage.stageWidth, stage.stageHeight, true, 0 ); displace = new Matrix(); displace.tx = 2; displace.ty = -1; darken = new ColorTransform( 1, 1, 1, 1, -2, -2, -2, 0 ); rect = new Rectangle( 0, 0, 1, 0 ); addChild( new Bitmap( output ) ); addChild( new Bitmap( peaks ) ); stage.addEventListener( Event.ENTER_FRAME, onEnterFrame ); graphics.beginFill( 0 ); graphics.drawRect( 0, 0, stage.stageWidth, stage.stageHeight ); graphics.endFill(); gradient = createRainbowGradientArray(); } private function onStageClicked( event:MouseEvent ): void { sound.play(); stage.removeEventListener(MouseEvent.CLICK,onStageClicked); } private function onEnterFrame( event: Event ): void { peaks.fillRect( peaks.rect, 0 ); SoundMixer.computeSpectrum( bytes, true, 0 ); var value: Number; var height: Number; var smooth: Number; for( var i: int = 0 ; i < 256 ; i++ ) { value = bytes.readFloat(); if( i == 0 ) smooth = value; else smooth += ( value - smooth ) / 8; height = 2 + smooth * 0xf0; rect.x = 8 + i; rect.y = 320 + ( i >> 2 ) - height; rect.height = height; peaks.setPixel32( rect.x, rect.y, 0xffffffff ); output.fillRect( rect, 0xff000000 | gradient[i] ); } output.draw( output, displace, darken, null, null, true ); } private function createRainbowGradientArray(): Array { var gradient: Array = new Array(); var shape: Shape = new Shape(); var bmp: BitmapData = new BitmapData( 256, 1, false, 0 ); var colors: Array = [ 0, 0xff0000, 0xffff00, 0x00ff00, 0x00ffff ]; var alphas: Array = [ 100, 100, 100, 100, 100 ]; var ratios: Array = [ 0, 16, 128, 192, 255 ]; var matrix: Matrix = new Matrix(); matrix.createGradientBox( 256, 1, 0, 0, 0 ); shape.graphics.beginGradientFill( 'linear', colors, alphas, ratios, matrix ); shape.graphics.drawRect( 0, 0, 256, 1 ); shape.graphics.endFill(); bmp.draw( shape ); for( var i: int = 0 ; i < 256 ; i++ ) { gradient[i] = bmp.getPixel( i, 0 ); } return gradient; } } } |
电子乐的波形图
一 5, 2010 FLASH/FLEX开发 Leave a comment
这几天一直在想着怎么把nes游戏里的音频调制出来,于是想起来以前见过的一个8位机音乐demo,稍稍改了一下,把声音波形图打印出来,恍然大悟。原来各种声音就是各种不同的方波,正弦波,三角波的叠加啊。
点击下面的演示程序,开始播放演示音乐,黑线是左声道,白线是右声道。
aminNES一个开源的Flash的FC模拟器
十二 31, 2009 FLASH/FLEX开发, 业界新闻 Leave a comment
最近在网上发现一个很牛的东东,一个牛人用flash做出了FC游戏模拟器,并且是开源的。唯一不爽的地方就是声音问题没解决,但fp10开始,flash的sound对象开始支持模拟发声了,估计不远的将来也不什么大问题了。
这个项目的googleCode地址:http://code.google.com/p/aminnes/
我用这个模拟器依样做了一个魂斗罗的flash游戏,效果很好!点一下下面的flash,就可以游戏了。
按键:W:上,A左,S下,D右,H开始,J子弹,H跳
一个一百多行代码的开关灯游戏
十二 24, 2009 FLASH/FLEX开发, 资源下载 Leave a comment
试着关闭所有的灯:
今天在flashandmath.com上闲逛,发现了这个小游戏,前前后后只有一百多行代码.蛮有意思.
用flash cs3创建一个fla文件,然后在场景上放个按钮,起名:btnNewGame
然后贴入下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | function setupGame():void { tbDoneText.text = ""; addGameBoard(); drawBoxes(); } function newGame(evt:MouseEvent):void { removeGameBoard(); setupGame(); } // add a listener for the "New Game" button btnNewGame.addEventListener(MouseEvent.CLICK,newGame); var boxHeight:int = 40; var boxWidth:int = 40; var boxXSpace:int = 10; var boxYSpace:int = 10; function addGameBoard():void { // create a board to display all of the square buttons on var gb:Sprite = new Sprite(); gb.graphics.beginFill(0xFFFFFF); // since the entire grid is at most 6x6, make enough room gb.graphics.drawRect(0,0,6*boxWidth+7*boxXSpace,6*boxHeight+7*boxYSpace); gb.graphics.endFill(); gb.name = "gameBoard" gb.x = 20; gb.y = 20; this.addChild(gb); } function removeGameBoard():void { // remove the game board and all of the squares on it var gb:Sprite=Sprite(this.getChildByName("gameBoard")); var thisClip:Sprite; while(gb.numChildren>0){ thisClip=Sprite(gb.getChildAt(0)); thisClip.graphics.clear(); gb.removeChild(thisClip); } gb.graphics.clear(); this.removeChild(gb); } var onColor = 0xFF3333; var offColor = 0x333333; var numberOfRows:int; var numberOfColumns:int; var states:Array; function drawBoxes():void { // create the squares on the game board var gb:Sprite = Sprite(this.getChildByName("gameBoard")); var square:Sprite; // create 3 to 6 rows and 3 to 6 columns numberOfRows = Math.floor(Math.random()*4+3); numberOfColumns = Math.floor(Math.random()*4+3); //create the states array, which has the same number of //"rows" and "columns" as our grid of squares states = new Array(numberOfRows); for (var i:int = 0; i < numberOfRows; i++) { // i = row number states[i] = new Array(numberOfColumns); for (var j:int = 0; j < numberOfColumns; j++) { // j = column number // create a square, which is by default 'off' square = new Sprite(); square.graphics.lineStyle(2, 0x000000); square.graphics.beginFill(offColor); square.graphics.drawRect(0,0,boxWidth,boxHeight); square.graphics.endFill(); states[i][j] = false; gb.addChild(square); // position the square in the correct location square.x = (j+1)*boxXSpace + j*boxWidth; square.y = (i+1)*boxYSpace + i*boxHeight; square.name = "square" + String(i) + String(j); // add a dynamically created listener for this square square.addEventListener(MouseEvent.CLICK,createListener(i,j)); } } randomizeGameBoard(); } function createListener(a:int, b:int):Function { // dynamically create a listener for the square in position (a,b) // that switches the box at (a,b) and the adjacent boxes, and // then checks to see if you are done var foo:Function = function (evt:MouseEvent):void { switchAt(a,b); if (checkDone()) { tbDoneText.text = "Good job!"; } } return foo; } function invertState(row:int, col:int):void { // lookup the square located at (row, col) var gb:Sprite = Sprite(this.getChildByName("gameBoard")); var thisClip:Sprite = Sprite(gb.getChildByName(("square" + row) + col)); // if the square is off, turn it on, and vice versa if (states[row][col]) { thisClip.graphics.beginFill(offColor); thisClip.graphics.drawRect(0,0,boxWidth,boxHeight); thisClip.graphics.endFill(); } else { thisClip.graphics.beginFill(onColor); thisClip.graphics.drawRect(0,0,boxWidth,boxHeight); thisClip.graphics.endFill(); } // reverse the state of the square states[row][col] = !states[row][col]; } function switchAt(row:int, col:int):void { // switch the square that was clicked on invertState(row,col); // switch the squares adjacent to the clicked square if (row > 0) { invertState(row-1,col); } if (row < numberOfRows - 1) { invertState(row+1,col); } if (col > 0) { invertState(row,col-1); } if (col < numberOfColumns - 1) { invertState(row,col+1); } } function checkDone():Boolean { // check to see if all the lights are off var bool:Boolean = true; var i,j:int; for (i = 0; i < numberOfRows; i++) { for (j = 0; j < numberOfColumns; j++) { bool = bool && !states[i][j]; } } return(bool); } function randomizeGameBoard():void { // randomly click the game board a random number of times // this ensures the game is solvable var r:int = Math.floor(Math.random()*5+5); var row:int, col:int, i:int; for (i = 0; i < r; i++) { row = Math.floor(Math.random() * numberOfRows); col = Math.floor(Math.random() * numberOfColumns); switchAt(row,col); } } setupGame(); |
带拼音的汉语拼音程序源码共享
十一 19, 2009 FLASH/FLEX开发, 资源下载 2 Comments
最近总是有朋友询问我在flash中实现自动识别汉字发音的发音的方法。
我想了想,还是把以前写的那个demo的源码共享出来吧,供大家交流。
源码下载地址:e5a3b0e8b083e6b189e8afade68bbce99fb3e6ba90e7a081
DEMO演示地址:/index.php/archives/181
在Flex Builder 3正常使用Flex SDK 4.0的方法
十 30, 2009 FLASH/FLEX开发 1 Comment
新出来的Flash Builder的两个beta版本都是Bug一堆,实用性和以往的Flex Builder 3完全不能比。使支持flash player 10的FLEX SDK 4.0中许多新的实用的东西又让人心动不已。
怎么办?如果要做as3项目,最好的方法是在flex builder 3中使用SDK 4.0。
具体使用方法如下:
1、下载Flex SDK 4.0
http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4
上面这个网址中可以下载到最近的SDK 4的所有版本,最好选择稳定版本(Stable Builds->Adobe Flex SDK)下载,以防有什么问题.
2.将下载下来的sdk包下载解压到flex安装目录中的sdks目录中。
3.在flex中对sdk进行配置,添加新的sdk进来。
具体的操作方法是:Window->Preferences->Flex选项卡->Installed Flex SDK.点击add,选择新加进来的那个sdk目录即可。
4.对新建的as3项目,添加参数,重要!!!!!
做了上面的步骤后,新建的项目,即使指定了使用SDK 4.0,还是不能正常使用的。SDK 4.0中新的API还是使用不了,这是因为还需要对项目的编译fp版本做手动指定。
在项目属性的ActionScript Complier选项卡中complier arguments添加编译参数:-target-player=10.0.22
大功告成!!