Flash.as数字拼图游戏代码
flashAS3.0代码

flashAS 3.0 代码(2011-08-09 00:25:34)转载标签:新漫动画代码asf lash杂谈基本Act ion。
包括:- Go to跳转到指定的帧- P lay播放- S top停止- T oggle High Qual ity在高画质和低画质间切换- St op Al l Sou nds停止所有声音的播放- GetURL跳转至某个超联结-FSCom mand发送FSC omman d命令- Load Movi e装载影片- U nload Movi e卸载影片- T ell T arget告知目标- If Fram e IsLoade d..判断帧是否被完全载入- OnMouse Even t鼠标事件<。
其他Act ions。
包括:- b reak跳出循环-call调用指定帧(一般喊有某个特定函数)- co mment注释- c ontin ue继续循环- de lete删除一个对象(Obj ect)中的变量- d o whi le do whil e循环- d uplic ateMo vieCl ip复制MC- el se否则(与if联用)- el se if否则如果(与if联用)- ev aluat e调用自定义函数(Funct ion)-forf or循环-for .. in依次取得对象(Obj ect)中的各个属性或者某个数组中的所有元素- F SComm and发送FSCo mmand命令- fu nctio n声明自定义函数-getUR L跳转至某个超联结- got o跳转到指定的帧-if如果- ifFr ameLo aded..帧是否完全被载入- incl ude读入外部的A ction Scrip t程序文件(.as)- load Movie装载MC- load Varia bles转载外部文件中的数据,这些外部文件可以是文本文件,或者是由A SP/CG I等脚本返回的文本值- on鼠标事件的触发条件- o nClip Event MC的事件触发程序- play播放- p rint输出到打印机- rem oveMo vieCl ip删除MC- re turn在函数(f uncti on)中返回一个值-set v ariab le设定变量值- s etPro perty设定属性- star tDrag开始拖动- stop停止- s topAl lSoun ds停止所有声音的播放- st opDra g停止拖动- swa pDept hs交换两个MC的深度- te llTar get指定Acti on命令生效的目标-toggl eHigh Quali ty在高画质和低画质间切换-trace跟踪调试- unlo adMov ie卸载MC- va r声明局部变量- w hile当..成立时..- w ith对..对象(Objec t)做..<。
Flash_AS2.0代码大全

Flash as2.0代码大全与Flash 制作技巧一、注释// 单行注释符/* */ 多行注释符/*开始,*/结束二、转义字符例1:trace("Hello\n"+"ActionScript"+"2.0") 字符串之间使用运算符+连接 结果输出: HelloActionScript2.0实例:获得系统的事件2:var time = new Date();//创建Date 类的实例(Date 类的实例含系统时间的所有信息);注意var 中的字母v 是小写的。
var yy = time.getFullYear(); var mm = time.getMonth()+1;/*getMonth 比较特殊,它返回的值是0-11之间的数值, 所以必须要加上1*/ var dd = time.getDate();var xq = time.getDay(); //返回值为0,周末 var hh = time.getHours();转义序列\b\f\n\r\t\ " \' \\字符退格符(ASCII8)换页符(ASCII12)换行符(ASCII10)回车符(ASCII13)制表符(ASCII9)双引号 单引号 反斜杠var min = time.getMinutes();var ss = time.getSeconds();trace(yy+"年/\n"+mm+"月\n"+dd+"日\n"+"星期"+xq+"\n"+hh+"点\n"+min+"分\n"+ss+"秒")//换行符号必须在引号里边才可以a=yy+"年"+mm+"月"+dd+"日"+"星期"+xq+hh+"点"+min+"分"+ss+"秒"三、声明方式及获取类型1.变量的声明方式,数字于字符串数字相加的规则数字声明的方式var a:String="12" ; //声明变量a是一个字符串类型,为12var b:Number=34 ; //声明变量b是一个数字字符串类型,为34var c=a+b ; //声明变量c=a+btrace(c); //字符串类型和数字类型的变量相加时,数字型被转换成字符串再相加输出结果:12342.实例:确定变量的数据类型 typeofvar m="12";trace(typeof(m));m=2;trace(typeof(m))输出结果:string number3.改变数据的类型:数字Number()、字符串String()、逻辑是否Boolean、对象数据类Object()、数组Array();var a ="12" ; //声明变量a是一个字符串类型,为12var b=Number(a); //将a转换为数字类型,赋予btrace(typeof(b)+":"+b)输出结果:number:12四、运算符1.点运算符:用来连接对象与嵌套再对象中的子对象,以及访问对象于对象的属性和方法。
FLASH CS4 实战项目——填数字游戏

FLASH CS4 实战项目——填数字游戏在具有交互效果的动画中,一般是通过使用Flash组件与ActionScript来实现的。
本实例首先通过随机生成两个文本框中的数值,然后运用ActionScript中的加减运算、赋值语句和条件语句进行判断所输入的结果是否正确来实现的,如图3-8所示。
图3-8 填数字游戏效果图(1)新建一个520×367像素的空白文档,并创建“背景”层,导入素材图像。
然后新建“填数字游戏”图层,添加“填数字游戏”文本并设置属性,如图3-9所示。
图3-9 导入素材并输入文本(2)新建box1影片剪辑元件。
在创建的“文本”图层中,选择第1帧并添加文本。
然后分别在第2帧和第3帧插入空白关键帧并添加内容,如图3-10所示。
图3-10编辑图层内容(3)新建“输入框”图层,选择其第1帧,执行【窗口】|【组件】命令,从【组件】面板中拖入舞台三个文本框,设置其属性,并将其分别实例化。
然后删除后两帧,如图3-11所示。
图3-11 添加实例化对象(4)新建“按钮”图层,分别在第和第2帧插入按钮组件。
然后在【属性】检查器中,分别设置其实例化名称为okbtnt和backbtn,如图3-12所示。
图3-12 添加实例化对象(5)新建as图层,分别将前3帧转换为关键帧,执行【窗口】|【动作】命令,为各帧添加停止播放代码“stop();”,如图3-13所示。
图3-13 为as图层各帧添加代码(6)单击“场景1”,返回舞台。
新建“组件”图层。
然后把box1元件拖至舞台,并设置其实例化名称为boxContent,如图3-14所示。
图3-14 导入元件并将其实例化(7)新建“动作脚本”图层。
按F9快捷键,打开【动作】面板。
创建输入文本框和按钮中文本样式的变量分别为styl和btnst yle,并设置样式属性。
代码如下:var styl:TextFormat=new TextFormat();//创建输入文本框组件的文本样式styl.size=35;//定义文本的字体大小styl.color=0x000000;//定义文本的字体颜色styl.align=TextFormatAlign.CENTER;//定义文本的对齐方式为居中对齐var btnstyle:TextFormat=new TextFormat();//创建按钮组件的文本样式btnstyle.size=14;//定义文本的字体大小(8)用ActionScript代码定义输入文本框和按钮的样式,并设置输入文本框的编辑方式和初始值等属性。
FLASH CS4 设计拼图游戏

FLASH CS4 设计拼图游戏在本例拼图游戏中,如果拖动的小图片处于正确位置的附近时,释放鼠标即会将图片吸附到该位置上。
当所有的小图片都放置在正确位置时(即拼合成为一张完整的图像),就会提示游戏胜利。
另外,本游戏采用的是外部图片,游戏者可以自定义所要进行拼图的图片,以增强游戏的可玩性。
Flash拼图游戏如图13-24所示。
图13-24 Flash拼图游戏设计过程:(1)新建588×442像素的空白文档,在舞台中制作开始游戏界面,如图13-25所示。
图13-25 制作开始游戏界面(2)新建“猴子”影片剪辑元件,在舞台中制作两只猴子,并将其转换为影片剪辑。
然后,制作猴子上下飘动的动画,如图13-26所示。
图13-26 制作猴子上下飘动动画(3)返回场景,将“猴子”影片剪辑元件拖至舞台中,并为其绘制阴影,如图16-27所示。
图13-27 拖入猴子影片剪辑(4)新建“开始游戏”按钮元件,在舞台中制作按钮弹起、经过和按下的形状,并分别将其转换为影片剪辑元件,如图13-28所示。
图13-28 制作开始游戏按钮(5)返回场景,将“开始游戏”按钮元件拖至舞台的右下角,并设置其【实例名称】为Play_Btn,如图13-29所示。
图13-30 拖入开始游戏按钮(6)新建“背景”影片剪辑元件,在舞台中绘制一个渐变矩形,并在其左上角输入puzzleGame文字。
然后,将该影片剪辑元件导出为bg自定义类,如图13-31所示。
图13-31 制作游戏背景(7)新建“计时器”影片剪辑,在舞台中制作计时器界面,并设置“时间进度条”影片剪辑和动态文本的【实例名称】分别为timebar和Time_txt。
然后,将该影片剪辑导出为time_mc类,如图13-32所示。
图13-32 制作计时器(8)新建“计分器”影片剪辑,在舞台中制作计分器背景,并在其上插入一个动态文本,设置其【实例名称】为Score_txt。
然后,将该影片剪辑元件导出为score_mc,如图13-33所示。
flash as3.0 常用代码

flash as3.0 常用代码1.全屏播放fscommand("fullscreen",true);2.打开时全屏,在该帧停止fscommand("fullscreen",true);stop();3.跳帧播放(从第几针开始播放后)on (press) {gotoAndPlay(?);}4.点击时开始播放on (press) {play();}5.退出语句如果是FLASH自带的控件on (click){ fscommand("quit",""); } 自已做的按钮on (release){ fscommand("quit",""); }6、当鼠标滑过影片剪辑时,停止播放时间轴。
on (rollOver) {_root.stop();}7、当在影片剪辑上按下鼠标时,停止播放影片剪辑。
on (press) {stop();}8、当影片剪辑上松开鼠标时,播放影片剪辑。
on (release) {play();}9、当鼠标滑离影片剪辑时,播放当前时间轴。
on (rollOut) {_root.play();}10、Goto:跳到一个指定的帧(Frame)Scene: 指定SceneFrame:Number,Label,Expression,Next Frame,Previous Frame 可以选择Frame 的编号,标号,通过表达式,下一帧,前一帧Expression: 定义表达式Control:Go to and Play,Go to and Stop 经过选择这个项目来确定到达指定的帧以后是继续播放还是停止例:Go to and Play (1) 跳到第一帧播放Go to Next Frame 跳到下一帧播放Go to and Stop ("intro") 跳到标号为intro 的帧播11、Play:播放Stop:停止Toggle High Quality:切换画面的细节程度Stop All Sounds:停止所有声音Get URL:打开指定的网址URL: 网址Windows:_self,_blank,_parent,_top 打开网址时使用的目标Variables on’t Send,Send use GET,Send use POST 变量的传递方式例:Get URL ("next.asp", window="_blank", vars=POST) 在新窗口中打开next.asp,并且传递参数12、FScommand:调用命令Command: 命令Arguments: 参数For standalone player:fullscreen,allowscale,showmenu,exec,quit 播放器使用的固定命令和参数例:FS Command ("fullscreen", "true") 设置全屏幕播放13、Load/Unload Movie:调入/释放外部的影片Action:Load movie into location,Unload movie from location,Load variables into location: 可以选择是否调入新影片,释放已经调入的影片,调入变量URL:影片的网址Location:Level,Target: 调入的层,或者是某一目标对象的位置Variables on’t Send,Send use GET,Send use POST: 变量的传递方式例子:Load Movie ("test.swf", 1): 把test.swf 调入到第一层Load Movie ("test.swf", "loadit", vars=GET): 把test.swf 调入到loadit 目标对象的位置Unload Movie ("loadit"): 把loadit 目标对象处的影片释放Load Variables ("makeit.asp", 2, vars=GET): 调用makeit.asp 并接收返回的变量14、Tell Target:指定目标对象Target: 目标对象例:Begin Tell Target ("obj") 指定目标对象objEnd Tell Target15、If Frame is Loaded:判断某帧是否调入Scene: 指定场景Frame:Number,Label,Expression: 指定帧,标号或者表达式Expression: 表达式例:If Frame Is Loaded (Scene 1, "end")End Frame Loaded:判断场景一的标号为end 的帧是否调入16、On MouseEvent 鼠标时间响应Event ress,Release,Release Outside,Roll Over,Roll Out,Drag Over,Drag Out,Key Press 各种事件:按下,放开,在外面放开,焦点移入,移出,拖过,拖出,按键按下例:On (Press) 鼠标按下的时候End OnOn (Key: s) 键盘上s 按下的时候End On17、If 判断条件是否成立Condition: 条件Add Else/Else If clause: 加入Else 再次判断例:If (a=10) 如果a=10 那么……End IfIf (a=10) 如果a=10 那么……不然……ElseEnd If18、Loop 循环Condition: 条件例:Loop While (a=10) 如果a=10 那么循环End Loop19、Call 调用函数帧或对象Frame: 函数帧例:Call ("make") 调用make 帧程序20、Set Property 设置属性Set:Y Positon,X Position,Y Scale,XScale,Alpha,Visibility,Rotation,Name,High quality,Show focus rectangle,Sound buffer time 设置y 坐标,x坐标,y 放大倍数,x 放大倍数,透明度,可视否,旋转角度,名称,精细度,焦点矩形框否是显示,声音缓冲的时间(默认5秒)Target: 目标对象value: 值例:Set Property ("aoe", X Position) = "12" 设置目标对象aoe 的x 坐标为12Set Property (Show focus rectangle) = "0" 取消焦点框21、Set Variable 设置变量Variable: 变量value: 值例:Set Variable: "test" = 10 设置test=1022、Duplicate/Remove Movie Clip 复制对象Action uplicate movie clip,Remove duplicate movie clip 可选择是复制还是删除Target: 目标对象New name: 新目标对象的名字Depth: 深度例:Duplicate Movie Clip ("aoe", "aoe2", 1) 复制aoe 一个新的动画,名字叫aoe2Remove Movie Clip ("aoe2") 删除目标对象aoe223、Drag Movie Clip 拖动影片片段Start drag operation: 开始拖动Target: 目标对象Constrain to rectangle:Left,Top,Right,Bottom 鼠标的位置,左上右下Lock mouse to center: 鼠标放置在中心Stop drag operation 停止拖动例:Start Drag ("aoe", L=2, T=3, R=4, B=5) 拖动目标对象aoe,位置在L=2, T=3, R=4, B=5Start Drag ("aoe", lockcenter) 拖动目标对象aoe,位置是在中心Stop Drag 停止拖动24、Trace 跟踪Message: 信息例:Trace ("aoe") 显示aoeTrace (aoe) 显示aoe 的值25、Comment 注释Comment: 注释例子:Comment ("计算") 注释:计算box_btn.onPress=function(){trace("ok");};按钮实例名称.事件处理方法=function(){ //处理程序};例如:n=1box_btn.onRelease=function(){n=n+1trace("n="+n);}当按钮被点一下的时候,Output窗口会输出:"n=2"onClipEvent(load){stop();}上面是影片剪辑的事件处理函数。
Flash as2.0代码大全(最全合集)

Flash as2.0代码大全与Flash制作技巧Flash as2.0代码大全与Flash制作技巧外部调用swfon (release) {loadMovieNum("service.swf", 1);}外部调用数据loadVariablesNum("about.txt", 0);eCodepage = true;//中文音乐加入mySound = new Sound();mySound.attachSound("1");mySound.start();关闭指定音乐mySound.stop("1");外部调用音乐mySound=new Sound();mySound.loadSound("music.mp3",true); mySound.start(0,100)关闭音乐mySound.stop();链接场景:on (release) {gotoAndStop("猫的历史",1);}外部调用on (release) {loadmovienum("a.swf",1)}清空文本框_root.text=""On(Release)Set Variable:"input" = ""Set Variable:"output" = ""End On轻松实现Flash的全屏播放许多人都看过这样的效果:把光盘放入光驱后,光盘自动运行,接着便是一段Flash制作的开场动画,动画是全屏播放的,且右键点击无效,动画播放结束后,出现“关闭”按钮,单击该按钮后,全屏动画关闭。
其实上面提到的全屏播放以及取消右键菜单等效果都是靠Fscommand指令在发挥作用。
Fscommand指令主要是用来控制Flash影片播放器的,但也可以用来打开其它的应用程序。
Flash.as数字拼图游戏代码

Flash.as数字拼图游戏代码Flash .as数字拼图游戏Main.as⽂件package {import flash.display.Sprite;import com.RectShape;import flash.events.MouseEvent;public class Main extends Sprite {private var indexshape:Array =new Array(1,2,3,4,5,6,7,8);private var ditu:Array =new Array(new Array(3),new Array(3),new Array(3));private var pailie:Array =new Array(new Array(0,0),new Array(40,0),new Array(80,0),new Array(0,40),new Array(40,40),new Array(80,40),new Array(0,80),new Array(40,80),new Array(80,80));//将⼀个120的正⽅形切割成9份;public function Main():void {init();}private function init():void {var kuang:Sprite=new Sprite();kuang.graphics.lineStyle(3,0xff000ff);//笔触为3的紫⾊矩形kuang.graphics.drawRect(0,0,120,120);//画边框;kuang.graphics.endFill();kuang.x=215;kuang.y=140;addChild(kuang);for (var i:uint=0; i<3; i++) {//如果这个位置没有⼩⽅块则值设为1;for (var t:uint=0; t<3; t++){ditu[i][t]=1;}}for (var n:uint=1; n<=8; n++) {//制作⼩⽅块;var hao:uint=Math.floor(Math.random()*indexshape.length);//取下限值,hao是下标var bianhao:uint=indexshape[hao];indexshape.splice(hao,1);//删除下标;var rect:RectShape=new RectShape(bianhao);rect.mouseChildren=false;//⼩⽅块中的⽂本不再接收事件:对象的⼦容器为falsevar weizhi:uint=Math.floor(Math.random()*pailie.length);var dui:Array=pailie[weizhi];pailie.splice(weizhi,1);rect.x=dui[0];rect.y=dui[1];rect.X=dui[0]/40;rect.Y=dui[1]/40;kuang.addChild(rect);ditu[dui[0]/40][dui[1]/40]=0;rect.addEventListener(MouseEvent.CLICK,dong);}}private function dong(evt:MouseEvent):void {var left:uint=evt.target.X-1;var right:uint=evt.target.X+1;var up:uint=evt.target.Y-1;var down:uint=evt.target.Y+1;if (left!=4294967295 && ditu[left][evt.target.Y]==1) {//向左移动ditu[evt.target.X][evt.target.Y]=1;ditu[left][evt.target.Y]=0;evt.target.X=left;evt.target.x-=40;//被点击的⽅块像素向左移40;} else if (right!=3 && ditu[right][evt.target.Y]==1) {//向右移动ditu[evt.target.X][evt.target.Y]=1;ditu[right][evt.target.Y]=0;evt.target.X=right;evt.target.x+=40;} else if (up!=4294967295 && ditu[evt.target.X][up]==1) {//向上移动ditu[evt.target.X][evt.target.Y]=1; ditu[evt.target.X][up]=0;evt.target.Y=up;evt.target.y-=40;} else if (down!=3&&ditu[evt.target.X][down]==1) {//向下移动ditu[evt.target.X][evt.target.Y]=1;ditu[evt.target.Y][down]=0;evt.target.Y=down;evt.target.y+=40; }}}}结果:。
用Flash制作拼图游戏,制作flash拼图游戏

用Flash制作拼图游戏,制作flash拼图游戏首先,让我们来构思一下游戏的大致样子:画面上散落着N多块碎图片,透过这些碎图片我们可以隐约看到后面的一块方形的区域,然后在屏幕的右边赫然写着几个大字——简易拼图游戏。
OK,构思完毕,下面我们就开做吧。
一、制作图块1(拼图拼图,没图怎么做拼图呢,所以,我们得先找张图片过来,并将其导入到Flash中。
选择File>Import,导入要做为拼图素材的图片。
2(选中刚刚导入的图片,选择Modify>Transform>Scale,将图片的大小重新进行调整。
3(调整完图片大小后,按Ctrl+B将其打散。
4(选择直线工具,在图片上画个十字,将图片分为四块。
因为本例只是要介绍制作拼图的原理,所以这里就只做四个图块。
5(按Ctrl+Alt+Shift+R,显示标尺,然后从标尺上拉出线重合。
6(按Ctrl+Alt+;锁定引导线。
接着按住Ctrl键然后用鼠标在四条黑线边界的中间拉出一个拐点。
7(再次按住Ctrl键将突起的两端拉回,形成一个小三角(如图1)。
8(使用鼠标将小三角变形成小圆弧(如图2)。
图29(单击选中左上角的那块图片,按F8弹出元件属性对话框。
在Name中输入g1,然后将Behavior选为Graphic,单击OK后将所选图片转化为图形元件g1。
同样地,将剩下的另外三块图片使用同样的方法分别转化为图形元件g2、g3、g4。
然后将刚才用来分割图片的黑线删除。
10(选中g1、g2、g3、g4四个元件,按Ctrl+C拷贝一份。
11(按Ctrl+V将刚才复制的元件粘贴上来。
12(单击选中g1,按F8弹出元件属性对话框。
在Name中输入b将Behavior选为Button,单击OK后将所选元件g1转化为按钮元件b1。
同样地,将剩下的另外三块图片使用同样的方法分别转化为按钮元件b2、b3、b4。
13(单击选中b1,按F8弹出元件属性对话框。
在Name中输入m1,然后将Behavior选为Movie Clip,单击OK后将所选元件b1转化为影片剪辑m1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Flash .as数字拼图游戏
Main.as文件
package {
import flash.display.Sprite;
import com.RectShape;
import flash.events.MouseEvent;
public class Main extends Sprite {
private var indexshape:Array =new Array(1,2,3,4,5,6,7,8);
private var ditu:Array =new Array(new Array(3),new Array(3),new Array(3));
private var pailie:Array =new Array(new Array(0,0),new Array(40,0),new Array(80,0),new Array(0,40),new Array(40,40),new Array(80,40),new Array(0,80),new Array(40,80),new Array(80,80));
//将一个120的正方形切割成9份;
public function Main():void {
init();
}
private function init():void {
var kuang:Sprite=new Sprite();
kuang.graphics.lineStyle(3,0xff000ff);//笔触为3的紫色矩形
kuang.graphics.drawRect(0,0,120,120);//画边框;
kuang.graphics.endFill();
kuang.x=215;
kuang.y=140;
addChild(kuang);
for (var i:uint=0; i<3; i++) {//如果这个位置没有小方块则值设为1;
for (var t:uint=0; t<3; t++){
ditu[i][t]=1;
}
}
for (var n:uint=1; n<=8; n++) {//制作小方块;
var hao:uint=Math.floor(Math.random()*indexshape.length);//取下限值,hao是下标
var bianhao:uint=indexshape[hao];
indexshape.splice(hao,1);//删除下标;
var rect:RectShape=new RectShape(bianhao);
rect.mouseChildren=false;//小方块中的文本不再接收事件:对象的子容器为false
var weizhi:uint=Math.floor(Math.random()*pailie.length);
var dui:Array=pailie[weizhi];
pailie.splice(weizhi,1);
rect.x=dui[0];
rect.y=dui[1];
rect.X=dui[0]/40;
rect.Y=dui[1]/40;
kuang.addChild(rect);
ditu[dui[0]/40][dui[1]/40]=0;
rect.addEventListener(MouseEvent.CLICK,dong);
}
}
private function dong(evt:MouseEvent):void {
var left:uint=evt.target.X-1;
var right:uint=evt.target.X+1;
var up:uint=evt.target.Y-1;
var down:uint=evt.target.Y+1;
if (left!=4294967295 && ditu[left][evt.target.Y]==1) {//向左移动
ditu[evt.target.X][evt.target.Y]=1;
ditu[left][evt.target.Y]=0;
evt.target.X=left;
evt.target.x-=40;//被点击的方块像素向左移40;
} else if (right!=3 && ditu[right][evt.target.Y]==1) {//向右移动
ditu[evt.target.X][evt.target.Y]=1;
ditu[right][evt.target.Y]=0;
evt.target.X=right;
evt.target.x+=40;
} else if (up!=4294967295 && ditu[evt.target.X][up]==1) {//向上移动ditu[evt.target.X][evt.target.Y]=1;
ditu[evt.target.X][up]=0;
evt.target.Y=up;
evt.target.y-=40;
} else if (down!=3&&ditu[evt.target.X][down]==1) {//向下移动
ditu[evt.target.X][evt.target.Y]=1;
ditu[evt.target.Y][down]=0;
evt.target.Y=down;
evt.target.y+=40;
}
}
}
}
结果:。