|
|
|
|
整理AS实例应用教程 |
| 作者:佚名 来源:闪吧 作者: 小角色闪客 更新:2007-1-13 20:48:41 错误报告 我要投稿 |
在Flash中弹出Window窗口
代码分两部分:HTML代码 和 FLASH代码
第一部分 ---FLASH代码 在 actions 选择 GET URL 函数然后粘贴下面的代码: javascript :openNewWindow(''somePage.html'',''thewin'', ''height=100,width=250,toolbar=no,scrollbars=yes'')
somePage.html - 是你需要开启的页面或网站
第二部分 ---HTML代码 在HTML页面的<head>...</head>之间加入下面的Javascript代码. <script language="JavaScript"> function openNewWindow(URLtoOpen, windowName, windowFeatures) { newWindow=window.open(URLtoOpen, windowName, windowFeatures); } </script>
最后将Flash文件插入到HTML文件中就可以使用了!由于有四个文件,其中有调用的网页文件,所以这里无法看到效果,请下载源文件后改就可以了
源文件:
点击浏览该文件
随机播放的电影片段MC
来看这个很简单但是很实用的教程! 在这里我是要给大家展示mc的随机属性. 而大家看到的下面的这个例子是我学习中制作的. 每当MC出现在场景中的时候它会播放一段小动画.附加一点,这里我用了一种延迟的方法来使动画时间长短不一. 如果你点击了下面例子中的next按钮就会出现不同方式的动画.
[全屏欣赏] 我们需要制作出五种不同的动画,然后让它们随机播放. 在上面我的例子里我放置了一个next按钮,但我下面要先讲一下随机播放动画的工作原理. 在第一帧用Ctrl+F8新建一个mc,然后添加如下代码:
gotoAndPlay (random ( 20 )); 然后在第15帧到第20帧添加若干关键帧:
在第十五帧添加代码: gotoAndPlay (1); 在第十六帧添加代码: gotoAndPlay ("anim1"); 在第十七帧添加代码: gotoAndPlay ("anim2"); 在第十八帧添加代码: gotoAndPlay ("anim3"); 一直添加这样的代码到第二十帧.
现在我们来到主场景线,添加一个新的关键帧,在其上建立标签"anim1",然后加上一个你觉得不错的动画. 相同的在另一个关键帧上建立一个标签"anim2",再放上一个与刚才不一样的动画. 重复上面的方法一直到放置了五个动画为止. 在上面我的那个例子里我用了一个"stop"命令在动画的末尾,当然你可以将其修改为gotoAndPlay(1);来让动画循环. 我让动画停止的原因是因为它是我制作的一个游戏里面的一个部分,不停止它会减慢整个影片的播放速度,并且它循环的太多了,也会导致你情绪上的不满.
我在开头用了一个gotoAndPlay(random(20));这样看来动画第一次播放只有四分之一的几率,然后它会接着循环直到执行一个gotoAndPlay("anim?");. 通过这一步,每一个动画都会播放不同的时间使之更具随机性. 最后我也希望大家能利用到这一点
源文件:
点击浏览该文件 密码保护页面
前几天jgw6447给一个网友说过这个相关的东东,我在这里是一点自己的想法,供大家参考
这里要讲的是密码文件,提供给商业中的客户十分理想的,当然也可以用这个来让朋友们看到个人的或非公开的页面. 你可以设定任何数量的密码来打开页面或者是其他的flash电影. 下面这个例子里我设的密码是"jokes","stories"和"pictures",通过输入它们你可以打开一个新的页面,如果你输入"private"可以打开一个电影.你可以先试一下!输入完密码后点击屏幕上的"enter"键或者是你自己键盘上的enter键都可以用来确定.
点击浏览该文件 先做一个mc(用Ctrl+F8)命名为"passwordMC",我们下面就是要在这个mc里面做做文章. : ) 而且这也可以使你在后面的设计变的简单明了. 编辑这个mc并且建两个层,在第一层的第一帧里有: 1. 一个命名为"password"的输入文本变量; 2. 一个enter按钮; 3. 在关键帧上写上代码: stop();
在第二层的第十帧插入一个标签并命名为"error"; 在第一层的第十帧放一个用来返回的按钮"retry".
然后enter按钮上写如下代码: on (release, keyPress "<Enter>") { if (password eq "pictures") { getURL ("pictures.htm", "_blank"); } else if (password eq "jokes") { getURL ("jokes.htm", "_blank"); } else if (password eq "stories") { getURL ("stories.htm", "_blank"); } else if (password eq "private") { tellTarget ("_level0") { gotoAndStop ("private"); } } else { gotoAndStop ("error"); } }
在返回按钮retry上写如下代码: on (release) { gotoAndPlay (1); } 剩下最后一步就是把输入"private"的部分制作出来. 回到主场景1的时间线,也就是放置mc"password"的地方(这里是0级).沿着时间线加一个空白关键帧(比如第十帧吧),给这个关键帧加上一个标签并命名为"private".这里就是你要放你的私人的最高机密文件的地方.当然的,因为在enter按钮上的代码有"gotoAndPlay",所以你要在这里加一个stop命令,或者把按钮上的代码修改为"gotoAndStop".
你也许需要让我来解释一下.流程是这样的,当使用者按"enter"键的时候,代码就会检查输入的密码是不是预定的密码比如"pictures",如果密码正确就执行下一行的"getURL ("pictures.htm", "_blank");"否则的话就继续检查看是否符合其他预定的密码,如果代码执行到else就表明输入的密码没有和任何一个预定密码相符合,然后就会执行最后一个命令-gotoAndStop ("error"); 而对于密码"private",代码通过tell target命令来控制0级上的时间线: tellTarget ("_level0") { gotoAndPlay ("private"); } 很明显,你可以设置许多的密码只要你愿意,或者是打开任何你想打开的页面甚至是你的flash电影的另一个部分. 这些都很简单,但是很有用,好好利用它吧!
对象与变量的路径
我之所以写这篇教程,是因为今天我要回答被问了千百次的问题,而这个问题,只要了解一下路径就会有答案。我们的朋友遇到这样一个麻烦:一个Clip工作得很正常,但是当它被装载到另一个里面,在第一层,在他的按钮指向的那个层,该clip被告知所有文本框都无效。这篇程教里,我们将要讨论Flash如何使用路径。在我们讨论变量时,你无需做任何编程工作来完成这篇教程。这并不是一篇通过路径(或”引导线”)来教你如何做动画的教程,这是完全不同的话题。
“路径”就像它的字面涵义一样:通向一个位置的路线。然而在Flash里,”路径”是告诉电脑如何取到一个对象或一个变量,而不是教你如何进入电子超级市场。对于理解Actionscript(AS)来说,路径是至关重要的,因为如果没有路径,你所有的设计就只能在一个层面上进行进而增加工作难度,这正是热爱幻想的设计师们这些天面临的事。
对象的路径
对像是指任何可视元素,包括图形、影片夹、按钮、声音、文本框或者形状。路径在按钮与影片夹的应用上最多,所以我们将集中讨论这些对象。
假设在主场景中,你有一个叫作”clip1”的影片夹。在这个影片夹里,有另一个叫作”clip2”的影片夹。这种分层目录结构(基于层的)方式相当普遍,对于游戏与导航来说非常重要。同样假设主场景中有一个按钮。你希望在按钮被点击后,会执行”clip2”上的一段action(这段action并不重要,我们在本例中将使用”Visibility”-可见度设置)。选择按钮,并赋予如下action:
on (release) { setProperty ("clip2", _visible, False); } 好,现在测试你的影片,点击按钮,然后……什么事都没发生。
完成最初的影片后,再回头看看你的代码-挠挠你的脑袋-哪错了呢?再返回到我们的例子里:clip1在主场景中,它包含clip2(看图)。
应该就意味着clip2并不真正存在于主场景上。不错,它是存在于clip1这个影片夹的场景上。我们都知道这点,但Flash不知道,所以我们要用语法告诉它使用路径。
下面的表格列出了路径的语法参数,并举例如何使用:
参数 用法 在Flash里的意思
_level0 setProperty("_level0" "我们要返回电影之根本-主场景"
_root setProperty ("_root" 同"_level0"
/ setProperty("_level0/clip" “定义斜杠之后任何东西的路本例 中,clip1是在_level0(主场景上
. (dot) setProperty)("_level0.clip" 同”/”
: (colon) _level0:text “在此冒号之后的任何东西都是变量 名。该量在冒号前面的路径里面”.名 为”text” 变量在主场景中(level0)。 : (colon) _root:text 同上,只是使用”_root”语法
我尽可能让它通俗易懂,但我们还是需要更彻底地理解它。让我们再看一下先前的例子:
1.Clip1在主场景中 2.Clip2在clip1里 3.主场景可以用”_level0”或”_root”来表示。

所以,clip2的路径就是: _level0/clip1/clip2
Flash5支持flash4的路径类型(如上)但也允许你使用新的格式,用_root替换_level0,用”.”(点)替换”/”。这样,clip2的路径就可以这样定义:
_level0.clip1.clip2 或 _root.clip1.clip2
选择哪种格式,决定于你的喜好。因为我学的是Flash4所以我趋向于用”_level0”,但是因为调试环境的原因,我开始使用点来替换斜杠,这样会使问题更容易暴露出来。
无论你对变量和路径使用哪种格式,我都要推荐你使用”完整路径”,这就是说在每一个路径的开头都要使用”_root”或者”_level0”语法。这个方法可以尽可能减少调试中的错误。
在电影中装载一段影片时,使用LoadMovies命令,这时常会发生些问题。这常常是因为他们在_level0或_root上的变量,现在位于_level1或_level2上了(视你要载入的层次而定)。记住,在Flash里,你可以使用Test Movie(测试影片)环境(Ctrl-Enter)来检查你的对象与变量的路径是否正确,只需键入Ctrl-Alt-V(变量)或是Ctrl-L(对象)。如果你想测试其他层次上的变量,也很容易,只要将_level0换成_level1或是_level5或者其他任何你需要的层次。
加载影片
当开始制作一个FLASH站点并将不同的菜单动画载入的时候,我注意到当点击一个菜单按钮时偶尔(但并不是经常性的)会有一点点停滞现象,甚至用预载程序这种现象有时依然存在,我个人认为这种停滞现象(也许是由于网络连接的原因)会导致我们的浏览者,甚至于我们的客户产生这样那样的疑问:“这个站点出什么问题了吗?我点击了按钮但是什么事都没发生?!”然而,假如他们能够等到足够长的时间,也许会发生一些变化,菜单按钮所连接的影片迟早会出现的不是吗?但是我们不能依赖客户的等待,而且我们也没有理由让他们这么做!因此,我构思设计了一个“正在初始化的片段”,无论任何的停滞出现之前,一个小的MOVIECLIP都会呈现在浏览者的面前。这样,观众就可以知道有程序在运行。这并不是笔者原创的意图,而且我也肯定有无数的办法来解决这个问题,但是这至少是目前一种比较简单而且行之有效的途径。
1) 首先,创建主场景影片main,这是基础场景,所有其他的片段都将要被载入到这个主场景的最顶层来,主场景背景色的选择将决定其余片段的背景,就象载入的影片的背景总是取决于主场景的背景色一样。当然你可以在这段影片里放置任何你想要放置的东西,LOGO或其他图片等等,但是现在,只需要打一些字上去即可。
2) 下一步,创建第二个层,在第一帧上点击鼠标右键,从下拉菜单中选择打开Action面板。点击Basic Action,然后双击Load Movie,在URL栏里输入“Interface.swf”,Level里输入3,代码如下: loadMovieNum ("Interface.swf", 3); 代码解释:你正在要求FLASH在深度为3的级别上载入名为Interface的影片(下面我们将制作它),它将是我们这里所制作在最高深度上的影片片段。
3) 现在,用同样大小的尺寸定义并创建一个新的.fla文件,将其命名为Interface.fla,我们将用最高的深度分别创建和载入它,这样它就可以位于载入影片的上方,从而一直会被浏览者看到。首先,创建一个图象面板(就象一个控制台?)使它位于影片的最顶部,如果愿意你可以在上面输入“Interface”几个字,然后给予它一个不同于(Main)主场景的颜色。
4) 创建一个新的层,并命名为“actions”,在第一帧上点击右键打开Action面板,点击Basic Action,然后双击Load Movie,在URL栏里输入“InitializingMovie.swf”,深度为2,代码如下: loadMovieNum ("InitializingMovie.swf", 2); 代码解释:你正在要求FLASH在深度为2的级别上载入名为InitializingMovie的影片(下一步我们将制作它)。
5) 创建一个简单的按钮,这一步里,我们只需要建立一个最简单的按钮,起名为“ONE”;(当然在你创建自己的页面时,你就会建立许多个菜单按钮了)将这个按钮放置到Interface面板上。
6) 在按钮上点击鼠标右键打开Action面板,在Basic Actions里双击''On Mouse Event'',输入下面的代码: on (release) { tellTarget ("_level2"){ gotoAndPlay (2); } } on (release) { loadMovieNum ("MovieOne.swf", 1); } 代码解释:当用户点击这个按钮时(无论哪一个位于level2的影片片段)都将从第二帧播放。就象你会在下面的步骤看到的一样,载入影片(Initializing Movie - 下一步创建它)的第一帧是空帧,所以通过命令它播放第二帧,我们就可以产生并使它可见,请记住,它已经被Interface Movie载入了……
7) 现在我们应该创建载入的影片了,用同样的大小创建第三个.fla文件,将它另存为“InitializingMovie”(注意不要空格)。建立三个层,每个层有两个关键帧。其中两个层用来放置你的图象元素。在底层,空出第一个关键帧,在第二帧里建立一个简单的图象;在中间层,同样空出第一个帧不管它,在第二帧创建文字“INITIALIZING”,如果愿意你可以让它产生一些变化;最顶层(第三层),在两个关键帧里都加入Action -“Stop”。
8) 现在创建一个同样大小的新的.fla文件,这是你的菜单和内容影片,另存为“MovieOne”。当然,实际的页面会包含那些另人激动的画面以及让浏览者赏心悦目的界面,但是这只是个练习,只放入一些图片和文字吧,在让你可以在预览时能马上看到他们的效果。
9) 最重要的步骤是给出关键的action来让Initializing 影片“走开并消失”,因此,在新建的一层中输入以下代码作为第一帧的Action: tellTarget ("_level2") { gotoAndPlay (1); } 当“Movie One” 开始播放时,上面的代码便触发,它告诉载入影片(Initializing Movie - Level 2的唯一影片)回到第一帧,因为Initializing的第一帧是空白的,所以它就变为不可见了!(在示例中,MovieOne中有一个额外附加的Scene,这个场景的作用只是为了模拟网络延时而存在的,在你的正式作业时它并不需要存在!假如真实的环境中没有延时现象的话,那么载入影片在内容影片出现的同时会马上消失。但是如果一直没有内容出现的话,那么你那出色的载入影片将使浏览者确信后台正在运行中)
10) 现在发布你的.swf文件并测试你的成果吧,假如什么地方有差错的话,那么要证实你的.fla文件名以及action scripts里语法的拼写是正确的,假如有一点地方出错误,或者空格不应该出现等,那么整个程序就不会正常运行。同时确认一下所有的文件是否在一个目录或文件夹里。
11) 不要忘记,你的载入影片可以做任何你想让它做的事情,闪动、舞蹈、旋转,甚至可以被拖动。但不要将它做的太大,因为它要马上被载入并显示出来
源文件:
点击浏览该文件
开启全屏的窗口
这个是我无意中在一个网站中收集到的,与大家分享下 我们在这个例子中有很多的需求,但是我不是一个JAVACSCRIPT程序员,所以我请人在网页中实现这一效果。大多数人觉得全屏很烦人,所以我们总结出一条经验:决不 在大家不需要全屏的时候实现它,因为这样做很烦人,不是吗?那好,我们继续。
我们要将这些代码拷贝粘贴到我们的HTML文件中。我对这段代码做了细微的改动以允许我们实现这一功能。
我接到的许多邮件中经常包含以下两个常见的错误:
在FLASH中发布HTML文件的时候,会将之前的HTML文件中的内容覆盖,因此要先发布HMTL文件,再粘贴代码。 如果没有效果,清除一下IE中的临时文件。 如果你使用苹果的浏览器请查看页面最下面的附注。 你需要做两步简单的步骤以实现弹出全屏窗口:
拷贝并粘贴下列代码到HMTL文件中的<head>和</head>标签之间(你FLASH生成的HTML文件)
<script language="JAVASCRIPT"> <!--
function detectVersion() { version = parseInt(navigator.appVersion); return version; }
function detectOS() { if(navigator.userAgent.indexOf(''Win'') == -1) { OS = ''Macintosh''; } else { OS = ''Windows''; } return OS; }
function detectBrowser() { if(navigator.appName.indexOf(''Netscape'') == -1) { browser = ''IE''; } else { browser = ''Netscape''; } return browser; }
function FullScreen(){
var adjWidth; var adjHeight;
if((detectOS() == ''Macintosh'') && (detectBrowser() == ''Netscape'')) { adjWidth = 20; adjHeight = 35; } if((detectOS() == ''Macintosh'') && (detectBrowser() == ''IE'')) { adjWidth = 20; adjHeight = 35; winOptions = ''fullscreen=yes''; } if((detectOS() == ''Windows'') && (detectBrowser() == ''Netscape'')) { adjWidth = 30; adjHeight = 30; } if(detectVersion() < 4) { self.location.href = ''oldbrowser.html''; } else { var winWidth = screen.availWidth - adjWidth; var winHeight = screen.availHeight - adjHeight; var winSize = ''width='' + winWidth + '',height='' + winHeight; var thewindow = window.open(''windowversion.html'', ''WindowName'', winSize); thewindow.moveTo(0,0); } }
function MakeItSo(){ if((detectOS() == ''Windows'') && (detectBrowser() == ''IE'')) { window.open(''thefullscreen.html'',''windowname'',''fullscreen=yes''); } else { onload=FullScreen(); } } // -->
</script>
改变如下两行的HTML文件为你想要弹出的窗口。 var thewindow = window.open(''windowversion.html'', ''WindowName'', winSize); -- line 50 and window.open(''thefullscreen.html'',''windowname'',''fullscreen=yes''); -- line 56 改变下面的文件是提示你浏览器版本过旧的问题。(译者:基本没什么用,不用理它) self.location.href = ''oldbrowser.html''; -- line 46 创建一个按钮在你的FLASH文件中,并加入如下的ACTION: on (release) { getURL ("javascript :MakeItSo()"); }
下面是对上面代码的一些注释,希望对大家有所帮助
<script language="JAVASCRIPT"> <!-- //----------------------------------- // 检测浏览器版本 // 得到版本数字 //-----------------------------------
function detectVersion() { version = parseInt(navigator.appVersion); return version; }
//----------------------------------- // 检测操作系统 // 是苹果系统或是WINDOWS系统 //----------------------------------- function detectOS() { if(navigator.userAgent.indexOf(''Win'') == -1) { OS = ''Macintosh''; } else { OS = ''Windows''; } return OS; }
//----------------------------------- // 检测浏览器为IE或是NETSCAPE //----------------------------------- function detectBrowser() { if(navigator.appName.indexOf(''Netscape'') == -1) { browser = ''IE''; } else { browser = ''Netscape''; } return browser; }
//----------------------------------- // Fullscreen() // 上述功能检测完毕,执行全屏功能 // // // 下面的几个重要文件 // oldbrowser.html - 如果你使用的浏览器版本低于3.0,将会打开这个页面,提示升级等信息。
// windowversion.html - 你可以把它改为想要全屏显示的页面,如果是IE,它将全屏显示,如果是NETSCAPE,它将最大化显示。 // // thefullscreen.html - 如果一切正常,这就是我们要全屏显示的页面。 // // 如何去掉滚动条 //果你测试你的页面时发现有滚动条,那么你将你的页面放进一个框架中,TOP框架设为100%,BOTTOM隐藏,这样就解决了。 // 注意,如果你使用框架,不要忘了HTML中的 javascript :self.close() // FLASH中的按钮改为 target "parent". //----------------------------------- function FullScreen(){
var adjWidth; var adjHeight;
if((detectOS() == ''Macintosh'') && (detectBrowser() == ''Netscape'')) { adjWidth = 20; adjHeight = 35; } if((detectOS() == ''Macintosh'') && (detectBrowser() == ''IE'')) { adjWidth = 20; adjHeight = 35; winOptions = ''fullscreen=yes''; } if((detectOS() == ''Windows'') && (detectBrowser() == ''Netscape'')) { adjWidth = 30; adjHeight = 30; } if(detectVersion() < 4) { self.location.href = ''oldbrowser.html''; } else { var winWidth = screen.availWidth - adjWidth; var winHeight = screen.availHeight - adjHeight; var winSize = ''width='' + winWidth + '',height='' + winHeight; var thewindow = window.open(''windowversion.html'', ''WindowName'', winSize); thewindow.moveTo(0,0); } }
function MakeItSo(){ if((detectOS() == ''Windows'') && (detectBrowser() == ''IE'')) { window.open(''thefullscreen.html'',''windowname'',''fullscreen=yes''); } else { onload=FullScreen(); } } // -->
</script>
如何实现不带卷轴的全屏效果,很简单,将滚动条设置为无,如下:
<body bgcolor="#FFFFFF" text="#000000" scroll=''no''>
在本地保存文件 这个函数使用的是Macromedia Answers Panel 中的升级部分的过程. 该函数用来在本地保存一个.swf文件或文本文件.这个功能和未公布的Flash5中的dashboardSave完全相同.它只能在Flash的运行环境中使用, 因此它只能作为一个在Flash面板中使用的.swf文件显示。由于这个功能的暴露,我们现在可以创建自我不断更新用户界面的组件。 MMSave(target,filename); 该函数具有两个参数,两个都是需要执行的功能.
第一个参数“target”是目标指向一个movieclip 或者一个字符串变量的路径. 如果你确定指向路径的movieclip和这个movieclip包含一个完全加载的影片,使用这些方式和函数中的任何一种载入。 loadMovieNum(url,level,method); loadMovie(url,movieclip,method) movieclip.loadMovie(url,method);
当影片载入后会在用户的硬盘上创建一个文件. 如果你传递的是一个字符串变量作为参数,那么包含这个字符串变量的值的文本文件将创建在用户计算机上,这个参数可以使用绝对路径和相对路径.记住,levels也同样和movieclips一类,因此把_level1作为值传递给"target"参数,将保存一个载入的文件到_level1中.
第二个参数"filename"是输出的.swf文件的文件名。该参数只能使用相对路径。 如果你指定的目录路径是文档根目录(/)那么该函数会将文件创建的FlashMX安装路径的Configuration目录中。
在不同操作系统中, Configuration 目录分别位于: Win98 or ME:C:\Windows\Application Data\Macromedia\Flash MX\Configuration Win2000 or XP:C:\Documents and Settings\Administrator\Application Data\Macromedia\Flash MX\Configuration
因此如果我想创建一个swf文件命名为"guy.swf",使其位于硬盘的根目录我可以使用: Win98 or ME:MMSave(this,"../../../../../guy.swf");Win2000 or XP:MMSave(this,"../../../../../../guy.swf"); 上述代码将保存上述代码行存在的整个文件。
或者如果我想保存一个swf文件在Configuration目录的根目录下,我可以使用下面任何一行代码: MMSave(this,"/guy.swf"); MMSave(this,"guy.swf");
如果一个文件同名或者正在被使用,它会自动覆盖它. 这能引起严重的安全问题,因为它可能被故意使用来覆盖windows系统文件 创建.swf文件的代码:
//create a new movieclipthis.createEmptyMovieClip("holder",1);
//load Macromedia''s site navigation into that movieclipholder.loadMovie("/Upload/2004_Pack/global_home.swf"'' target="_blank" >/Upload/2004_Pack/global_home.swf";);
//check to see if the movie has fully loaded//before outputting the local filethis.onEnterFrame=function(){ if(holder.getBytesLoaded() == holder.getBytesTotal()){
//save the movie loaded into the holder movieclip //as macromedia_navigation.swf in the Configuration //directory on the local computer MMSave(holder,"macromedia_navigation.swf");
//stop checking to see if the movie has fully loaded delete this.onEnterFrame; }}; 创建文本文件的代码: mystring="This is some text that i want to save locally"; MMSave(mystring,"mystring.txt"); 如果文件成功的在用户本地机器上创建,该函数会返回一个真值"true" 如果失败就返回"false"值.
待续.........正在收集中整理中...........
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
|
|
|
|