查看完整版本: *******AS3.0 相关代码汇总*******

ycccc8202 2006-10-12 04:00

*******AS3.0 相关代码汇总*******

AS3.0出了也有一段时间了,但是工作原因一直没时间静下来去学学,先发个帖子置顶,大伙儿都贡献出些比较好的

代码,最好加点注释,方便大家一起学习.

本人还是粉稀饭AS3.0代码滴写法

则里先随便些了个代码,这四我as3.0滴起步代码,大家么要笑我,哈~

FPSShow.as//动态显示FPS值[code]package{
        import flash.display.Sprite
                import flash.utils.Timer;
                import flash.events.Event;
        import flash.events.TimerEvent;
        import flash.text.TextField;
                public class FPSShow extends Sprite{
                        private var txt:TextField;
                        private var count:int=0
                        public function FPSShow(){
                                init()
                                }
                        private function init(){
                                        txt=new TextField();//创建文本实例
                                        txt.textColor=0xff0000;//设置文本颜色
                                        addChild(txt)//加载这个文本
                                        var myTimer:Timer = new Timer(1000);//Timer类挺好使,类似于setInterval,参数是循环间隔时间,单位是毫秒
                    myTimer.addEventListener("timer", timerHandler);//注册事件
                                        this.addEventListener("enterFrame",countHandler)//注册事件,这里相当于2.0的onEnterFrame
                                        myTimer.start();//Timer实例需要start来进行启动
                                        }
                        private function timerHandler(event:TimerEvent){//Timer实例调用的方法
                                        txt.text="FPS:"+count
                                        count=0//每隔1秒进行清零
                                        }
                        private function countHandler(event:Event){//真循环调用的方法
                                        count++//数值递加
                                                }

                }
                        
                }[/code]fla:
var f:FPSShow=new FPSShow()
stage.addChild(f)

/**********************************************/
[b]addEventListener注册事件传递参数的方法[/b]
[url=http://space.flash8.net/bbs/thread-340885-1-1.html]http://space.flash8.net/bbs/thread-340885-1-1.html[/url]

[b]AS3读取外部swf的头文件信息:[/b]
[url=http://space.flash8.net/bbs/view%20...%20=%CD%B7%CE%C4%BC%FE]http://space.flash8.net/bbs/view ... =%CD%B7%CE%C4%BC%FE[/url]

[b]AS3中类似watch的功能(附类文件)[/b]
[url=http://space.flash8.net/bbs/thread-339662-1-2.html]http://space.flash8.net/bbs/thread-339662-1-2.html[/url]

[align=right][float=right][url=http://space.flash8.net/bbs/misc.php?action=viewratings&tid=340429&pid=2046362][img]http://space.flash8.net/bbs/images/default/agree.gif[/img][/url] [/float][/align]画饼图 by AS3
[url=http://space.flash8.net/bbs/thread-340429-1-2.html]http://space.flash8.net/bbs/thread-340429-1-2.html[/url]

寻路组件
[url=http://space.flash8.net/bbs/thread-344034-1-1.html]http://space.flash8.net/bbs/thread-344034-1-1.html[/url]

BitmapData抠图小实验
[url=http://space.flash8.net/bbs/thread-353407-1-4.html]http://space.flash8.net/bbs/thread-353407-1-4.html[/url]

MVC 写窗口缩放控制
[url=http://space.flash8.net/bbs/thread-353919-1-1.html]http://space.flash8.net/bbs/thread-353919-1-1.html[/url]

[[i] 本帖最后由 ycccc8202 于 2008-6-3 09:09 编辑 [/i]]

ycccc8202 2006-10-12 08:49

简单的检测鼠标移动速度:
//as3.0
[code]
import flash.geom.Point
var __pointOld:Point=new Point(mouseX,mouseY)//获取鼠标初始位置
this.addEventListener("enterFrame",enterHandler)//注册真循环事件
function enterHandler(e:Event){
        var pointNew:Point=new Point(mouseX,mouseY)
        var step:Number=Point.distance(pointNew,__pointOld)//求每真移动距离
        trace(step*stage.frameRate)//得出每秒鼠标的移动象素
        __pointOld=pointNew//新值换旧值
}[/code]

zjwps 2006-10-13 11:20

贴一个老外写得FPS,看看有什么不一样

[code]package
{
        import flash.events.Event;
        import flash.text.TextField;
        import flash.text.TextFormat;
        import flash.utils.getTimer;
       
        public class FPS extends TextField
        {
                private var fs: int;
                private var ms: int;
               
                public function FPS()
                {
                        var format: TextFormat = new TextFormat();
                       
                        format.color = 0xffcc00;
                        format.size = 10;
                        format.bold = true;
                        format.font = 'Verdana';
                       
                        textColor = 0xcecece;
                        autoSize = "left";
                        defaultTextFormat = format;
                       
                        ms = getTimer();
                        fs = 0;
                       
                        addEventListener( Event.ADDED, onAdded );       
                        addEventListener( Event.REMOVED, onRemoved );
                }
               
                private function onAdded( event: Event ): void
                {
                        stage.addEventListener( Event.ENTER_FRAME, onEnterFrame );
                }
               
                private function onRemoved( event: Event ): void
                {
                        stage.removeEventListener( Event.ENTER_FRAME, onEnterFrame );
                }
               
                private function onEnterFrame( event: Event ): void
                {
                        if( getTimer() - 1000 > ms )
                        {
                                ms = getTimer();
                                text = fs.toString();
                                fs = 0;
                        }
                        else
                        {
                                ++fs;
                        }
                }
        }
}[/code]

用法
addChild( new FPS() );

[[i] 本帖最后由 zjwps 于 2006-10-13 11:22 编辑 [/i]]

ycccc8202 2006-10-13 12:21

恩,两个类继承的parent类不同,然后是我的方法用的是Timer类(功能类似以前的setinterval)来处理时间间隔,他的方法是用getTimer()来设置时间间隔的,总的的思路都是一样的.

zjwps 2006-10-13 13:59

继续来发吧 PopKeys

[code]
package
{
        import flash.display.Stage;
        import flash.events.KeyboardEvent;
       
        public class PopKeys
        {
                static private var state: Array = new Array();
               
                static public function initStage( stage: Stage ): void
                {
                        stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyDown );
                        stage.addEventListener( KeyboardEvent.KEY_UP, onKeyUp );
                }
               
                static public function isDown( code: uint ): Boolean
                {
                        return state[ code ] == true;
                }
               
                static private function onKeyDown( event: KeyboardEvent ): void
                {
                        state[ event.keyCode ] = true;
                }
               
                static private function onKeyUp( event: KeyboardEvent ): void
                {
                        state[ event.keyCode ] = false;
                }
        }
}
[/code]
应该用来判断键盘按下状态,做键盘控制可以用这个

用法 PopKeys.initStage( stage );指定控制的stage
PopKeys.isDown( Keyboard.LEFT );判断具体按钮的按下状态

[[i] 本帖最后由 zjwps 于 2006-10-13 14:04 编辑 [/i]]

birdliu 2006-10-13 14:01

你学FLASH多久了,感觉最大的难点在哪?

ycccc8202 2006-10-16 09:23

接着再来个关于TextField的,鼠标经过文本变色

[code]
//---------code by ycccc8202----------
var myText:TextField=new TextField()
myText.text="在人生的高速路上已经连续转错了不少弯"
myText.width=myText.height=300
myText.x=myText.y=100
var myTextFormat_old=new TextFormat()
myTextFormat_old.color="0x000000"
myTextFormat_old.size=12
var myTextFormat_new=new TextFormat()
myTextFormat_new.color="0xff0000"
myTextFormat_new.size=24
function enterFrameListener(event:Event) {
myText.setTextFormat(myTextFormat_old);
      var charIndex:int = myText.getCharIndexAtPoint(myText.mouseX,myText.mouseY);//不断取得指定位置的字符索引
     if(charIndex==-1){//如果鼠标移出文本
                return;}
          myText.setTextFormat(myTextFormat_new,charIndex,charIndex+1);
    }

addEventListener(Event.ENTER_FRAME, enterFrameListener);//注册桢循环事件
addChild(myText)
[/code]
//代码复制到真上看效果吧~

liandyii 2006-10-16 15:21

AS3 正式的出了吗? 下一版FLASH还会有中文的吗?

ycccc8202 2006-10-16 18:22

正式版还没出,中文版我相信肯定会有的~

zjwps 2006-10-17 11:22

Control.as

[code]/**
* 键盘控制类
* 把键盘按键动作格式化,一般用于游戏。作者:飞雨影
* 用法:Control.initStage(stage),初始化舞台;Control.addListener(function),添加listener;
* 改变控制设置:Control.changeControl(array);array为设置的keyCode
*/

package
{
        import flash.display.Stage;
        import flash.events.KeyboardEvent;
        import flash.events.EventDispatcher;
        import flash.events.Event;
       
        public class Control
        {
                 /**
                 * state为按钮状态,是否按下 isDown来得到状态
                 * controlKeyCode 为按钮控制设置数组,
                 * 默认为 w=上,s=下,a=左,d=下,u,i,j,k为四个动作按钮
                 */  
                static private var state: Array = new Array(),controlKeyCode:Array=new Array(87,83,65,68,85,73,74,75);
                static private var controlKey:Array=new Array(),controlName:Array=new Array('上','下','左','右','轻拳','重拳','轻脚','重脚');
                static private var eventDispatcher:EventDispatcher=new EventDispatcher();
                static public function initStage( stage:Stage ): void
                {
                        var len:uint=controlKeyCode.length;
                        for(var i:uint=0;i<len;i++)
                        {
                                controlKey[controlKeyCode[i]]=controlName[i];
                        }
                        stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyDown );
                        stage.addEventListener( KeyboardEvent.KEY_UP, onKeyUp );
                }
                static public function isDown( code: uint ): Boolean
                {
                        return state[ code ] == true;
                }
                static public function changeControl(keyCode:Array):void
                {
                        controlKeyCode = keyCode;
                }               
        static public function addListener(listener:Function):void
        {
                var len:uint=controlKeyCode.length;
                for(var i:uint=0;i<len;i++)
                {
                        eventDispatcher.addEventListener(controlName[i],listener);
                        eventDispatcher.addEventListener(controlName[i]+'release',listener);
                }
        }
                static private function onKeyDown( event: KeyboardEvent ): void
                {
                        var code:uint=event.keyCode
                        if(!isDown(code))
                        {
                                state[ code ] = true;
                            //trace( code,"按下");
                           if(controlKey[code])eventDispatcher.dispatchEvent(new Event(controlKey[code]));
                        }
                       
                }
                static private function onKeyUp( event: KeyboardEvent ): void
                {
                        var code:uint=event.keyCode
                                state[ event.keyCode ] = false;
                                //trace(event.keyCode,'释放')
                                if(controlKey[code])eventDispatcher.dispatchEvent(new Event(controlKey[code]+"release"));
                }

        }
}[/code]

zjwps 2006-10-17 18:11

连接flashcomserver,视频聊天

[code]
package {
        import flash.display.Sprite;
        import flash.net.NetConnection;
        import flash.net.NetStream;
        import flash.events.NetStatusEvent;
        import flash.media.Video;
        import flash.media.Camera;
        import flash.events.ActivityEvent;

        public class videoChat extends Sprite
        {
                [ SWF( backgroundColor='0xdedede', frameRate='500', width='512', height='512' ) ]//设置swf参数
                private var conn:connFcs,camera:Camera,videoIn:Video,outStream:NetStream,inStream:NetStream;
                public function videoChat()
                {
                        var url:String="rtmp:/test_chat";//连接地址
                        var conn:connFcs=new connFcs(url);//建立连接,这个类在最下面的
                        this.conn=conn;
                        conn.addEventListener(NetStatusEvent.NET_STATUS,NetStatusEventHandel);//监视连接状态
                }
                private function NetStatusEventHandel(event:NetStatusEvent):void
                {
                        trace(event.info.code);
                        if(event.info.code=="NetConnection.Connect.Success")//如果连接成功
                        {
                                init();//初始化
                                publishStream();//发布视频
                        }
                }
                private function publishStream():void
                {
                        outStream=new NetStream(conn);
                        outStream.publish("test","record");//发布参数,test为视频名,record表示是要保存的,如果不保存用live
                        outStream.attachCamera(camera);
                        inVideo();
                }
                private function inVideo():void
                {//接收视频
                        inStream=new NetStream(conn);
                        inStream.play("test");
                        videoIn.attachNetStream(inStream);
                }
                private function init():void
                {
                        videoIn=new Video();//添加一个视频为了接收
                        addChild(videoIn);
                       
                        camera=Camera.getCamera();//得到摄像头
                        if(camera!=null)//如果有摄像头,添加一个视频到显示
                        {
                                camera.addEventListener(ActivityEvent.ACTIVITY,activityHandler);
                                var video:Video= new Video(camera.width * 2, camera.height * 2);
                                video.x=camera.width;
                                video.y=camera.height;
                                video.attachCamera(camera);
                            addChild(video);
                        }else{trace("you need camera!");}
                       
                }
                private function activityHandler(event:ActivityEvent):void
                {
                        trace('activityHandler'+event);
                }
               
        }
       
}
        import flash.net.NetConnection;
        import flash.net.ObjectEncoding;
       

class connFcs extends NetConnection
{
        private var url:String
        public function connFcs(url:String)
        {
                objectEncoding=ObjectEncoding.AMF0;//连接fcs需要设置这个
                this.url=url;
                connect(url);//开始连接
        }
}[/code]

[[i] 本帖最后由 zjwps 于 2006-10-18 09:27 编辑 [/i]]

ycccc8202 2006-10-18 02:42

希望贴些有适当解释的代码,大家也方便查阅

tommyheng 2006-10-20 11:16

小样的  ycccc8202 你有XP系统很爽 是不是??   我给你加分!!!  你要保证1天2个教程………………挖卡卡

裸奔狂人 2006-11-21 10:11

强人!

江南箭客 2006-11-24 13:09

希望BZ加上注释   好让我们这些菜鸟能看懂!~

Super-Tomato 2006-11-25 13:41

那麽我也來貼個不錯的blog支持ycccc8202

[url=http://www.tink.ws/blog/category/actionscript-30/]http://www.tink.ws/blog/category/actionscript-30/[/url]

[url=http://www.flashsandy.org/sources/1_0/tests/CubicPanoTest/]http://www.flashsandy.org/sources/1_0/tests/CubicPanoTest/[/url] 這個3D engine寫的不錯,可以用方向鍵看看效用
[url=http://www.flashsandy.org/sources/1_1/tests/CubicPanoTest.zip]http://www.flashsandy.org/sources/1_1/tests/CubicPanoTest.zip[/url]

[[i] 本帖最后由 Super-Tomato 于 2006-11-25 13:47 编辑 [/i]]

ycccc8202 2006-11-29 10:24

恩,谢谢 Super-Tomato的支持~

iaipvfhp 2006-12-19 22:02

请问有没有关于xml与as的更详细应用教程.......市面上有很多都很一般...

谢~~

kids 2007-1-30 21:27

能不能发一个载入图片相当于loadMovie()的类?

木落小侠 2007-2-3 01:41

............学ing
不懂

wangpengdb 2007-3-14 17:18

学习中

希望有解释.

zhegebucuo 2007-4-2 16:28

都在胡搞

115673 2007-4-12 12:53

不懂啊,:'(

云羽 2007-4-17 14:19

学习学习

闪诗璇 2007-4-18 09:38

哈哈,as3出来这么久了,我还没有好好看看呢

风逸 2007-4-21 15:40

好贴啊,谢谢楼主.

cyywill 2007-4-29 16:10

那个键盘的很启发啊

haveme51 2007-5-3 00:33

我地妈勒!好多

a3810225 2007-5-15 12:39

不错啊1~~~~谢谢

moonship 2007-5-16 12:13

高薪聘请高手!!

高薪聘请高手!!
本工作室是一家香港公司於深圳新成立的游戏工作室,主要以作flash游戏为主,待遇從優。
要求精通flash, action script,有相当的工作经验,有一定作品。
工作地点:深圳
待遇:面议 只要你有能力,一定会令你满意
联系方式QQ:474903353 / MSN: [email]moonship2004@hotmail.com[/email]

pminma 2007-5-21 09:38

有收获...

yeo529 2007-5-27 19:01

都是高人啊,总想学as,但是总给自己找借口没有时间,哎
要努力了

daly3721 2007-5-27 22:29

请高手为这段音频实时显示内置代码做个能拖动的播放条

请高手为这段音频实时显示内置代码做个能向前拖动,从而能快速向前后播放的播放条好吗?
[url=http://space.flash8.net/bbs/attachment.php?aid=324835]源码[/url]

AS发烧友 2007-6-1 17:43

2.0刚学一半 就出了3.0  哎··  真不知道应该先学那个好 3.0在2.0上 改变了好多!!

pruelove 2007-7-31 10:30

请高手个进度条的类好吗。我以前都是2.0,转到3.0还不太清楚,麻烦高手写个进度条的,好让我这个菜鸟知道如何转换的好吗?

hsyxh 2007-8-5 22:35

慢慢看,要不会难死人的。

blueky 2007-8-21 22:04

变化好大!

相当凑合 2007-8-29 14:27

我学了一年多的FLASH,会做的也就是让图片动起来,加个渐变什么的。但同学们都觉得我很强。
自从暑假开始学AS后,才越发觉得自己还一窍不通。只能算个爱好者。两个月过去了,我觉得自己可以算菜鸟了,但看了以上蝌蚪文后,我觉得我还是初学者。。。。。
学校图书馆没有AS方面太专业的书籍,不知道谁能介绍些可以买到的?有电子版的更好了。。

zjwps 2007-9-7 11:24

好的电子书大多是英文的.

yinvented 2007-9-23 20:31

有没有教做留言系统的啊?

angleverge 2007-10-5 02:15

*** 作者被禁止或删除 内容自动屏蔽 ***

ganylau 2007-10-5 19:29

自己用AS3写的

ganylau 2007-10-5 19:37

还没发上去呢!学AS3 3个月写的东西,很简单的!~

控制舞台上两个MC碰上之后反方向移动效果:
自定义类:
package {
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
//导入要用的类;
[SWF(width="1200", height="600", backgroundColor="#FFFFFF", frameRate="39")];
public class hitTestObjectClass extends Sprite {
  public function hitTestObjectClass(mc:MovieClip,mc1:MovieClip):void {
//构造函数;
   mc.addEventListener(MouseEvent.MOUSE_DOWN,rolloverhandler);
   mc.addEventListener(MouseEvent.MOUSE_UP,rollouthandler);
   mc1.addEventListener(MouseEvent.MOUSE_DOWN,rollover);
   mc1.addEventListener(MouseEvent.MOUSE_UP,rollout);
//将两个MC对象注册到侦听器;
  // trace(mc.hitTestObject(mc1));
  // trace(mc1);
   function rollover(mouseDown:MouseEvent):void {
//自定义函数;
    mc1.startDrag();
    addEventListener(Event.ENTER_FRAME,xuanzhuan1);
//用此(mc1)注册到侦听器;
   }
   function rollout(mouseUp:MouseEvent):void {
//自定义函数;
    mc1.stopDrag();
    removeEventListener(Event.ENTER_FRAME,xuanzhuan1);
   }
   function rolloverhandler(mouseDown:MouseEvent):void {
//自定义函数;
    mc.startDrag();
    addEventListener(Event.ENTER_FRAME,xuanzhuan);
//将mc注册到侦听器;
   }
   function rollouthandler(mouseUp:MouseEvent):void {
//自定义函数;
    mc.stopDrag();
    removeEventListener(Event.ENTER_FRAME,xuanzhuan);
//删除侦听器;
   }
   function xuanzhuan(enterFrame:Event):void {
//进入每帧运行的动作;
    if (mc.hitTestObject(mc1)) {
     mc1.x = mc1.x-(mc.x - mc1.x)/5;
     mc1.y = mc1.y-(mc.y - mc1.y)/5;
    }
   }
   function xuanzhuan1(enterFrame:Event):void {
//进入每帧运行的动作;
    if (mc1.hitTestObject(mc)) {
     mc.x = mc.x - (mc1.x - mc.x)/5;
     mc.y = mc.y - (mc1.y - mc.y)/5;
    }
   }
  }
}
}
FLA文件第一帧:
var mymcmc:hitTestObjectClass = new hitTestObjectClass(mc,mc1);
mc与mc1是舞台上两MC的实例名哦!~
这个主要是控制自制的MC元件,以类来控制;

希望大家多多指点!
我都是自学的,自学要领(每个类认真的看,再实践);

ganylau 2007-10-5 20:12

楼主第一篇程序总是停在FPS:12;

只改了最后一点就OK了;
                private function timerHandler(event:TimerEvent) {//Timer实例调用的方法
                        txt.text="FPS:" + count;
                                                //count = 0;//每隔1秒进行清零;
                        count++;
                                                             //这里把count = 0 改成count++这样就OK了;
                }
                private function countHandler(event:Event) {//真循环调用的方法
                        //count++;//数值递加
                                             //请问楼主,这段自定义函数在这里起什么作用?
                }
  给改了下 不要丢偶石头哦!:lol

chenmkun 2007-10-8 18:24

加点解释嘛,也好让我们这些新手也看的懂:handshake

Squallzero 2007-10-9 11:18

THX...
多少晒.!

weihuan 2007-10-14 22:53

cs3无法将动作应用与按钮?

cs3无法将动作应用与按钮?

magicianlu 2007-10-20 22:11

学不过来~~~~~:L

magicianlu 2007-10-20 22:12

学不过来~~~~~:L

闪之舞 2007-10-26 10:51

不错,非常好,受益非浅啊!

mooka 2007-10-27 19:51

部分连接已失效。期待更新

xr99 2007-11-3 14:25

我是新来的..大家多多指导

chlccc 2007-12-5 14:22

视频的太强了!!!感谢感谢!

loveskc 2007-12-13 04:04

多谢LZ分享哦  :lol

bobytan 2007-12-27 10:54

受益良多!!

za007z 2008-1-8 21:19

好资源!不知LZ能否给个FLASH CS3的下载链接?

hbyswy 2008-1-11 00:36

hao  a

qiangbaor 2008-2-16 11:58

精华就是精华呀~~~~~~~

ghgmxeman 2008-2-20 10:29

请把这篇帖子的回复清空,变成纯技术贴,

欣琪 2008-3-3 21:59

我是新手,学习做动画,但看不懂,楼主可以教教吗?
页: [1] 2
查看完整版本: *******AS3.0 相关代码汇总*******