无聊时候的的flash8 as 复习.跑回家洗了个热水澡,家里真爽阿

一个人在外面飘的感觉不错,可以每天吃快餐面和盒饭,在家也不错,可以每天洗热水澡

昨天晚上车上熬了一夜,坐了800多公里的车,回家奢侈几天也不错.公司还在装修,可能要到十号才可以上班,渐觉无聊,于是把flash8的帮助又看了一遍,感觉还不错哈,把一些自己的总结贴出来 以后备用

这里记录一个无敌得网站,弹了这么多年琴,玩了几年得flash觉得都白玩了 http://guitarshredshow.com/

xml得简单知识
—————————————————————————————————-
Xml的内容.
<data1 name="imagebear_one">
<data2 name="mariger_two" name_2="hantu">这里是第一个节点地内容</data2>
<data3 name="mariger_three" name_2="xiaoan">第二个节点地内容</data3>
</data1>

读取xml得基本语句
System.useCodepage = true;
var myXML = new XML();
//引用XML文件:
myXML.load("city_menu.xml");
//忽略空格:
myXML.ignoreWhite = true;
//默认的为false
//处理XML对象的函数:
myXML.onLoad = function(success) {
    if (success) {
        trace("读取成功");//注意!!,赋值的句子一定要写在这里

    } else {
        trace("读取失败");
    }
};

分析xml的层级关系

myXML.firstChild  //通常是整个xml数据都存贮在这里了
<data1 name="imagebear_one">
<data2 name="mariger_two" name_2="hantu">这里是第一个节点地内容</data2>
<data3 name="mariger_three" name_2="xiaoan">第二个节点地内容</data3>
</data1>
myXML.firstChild.firstChild   //第一个节点下的第一个节点内容
<data2 name="mariger_two">这里是第一个节点地内容</data2>
myXML.firstChild.firstChild.nodeName  //第一个节点下的第一个节点的节点头
data2            
myXML.firstChild.firstChild.attributes.name  //第一个节点下的第一个节点的属性为name的值
mariger_two
myXML.firstChild.firstChild.attributes.name_2     //第一个节点下的第一个节点的属性为name_2的值
韩启贤
myXML.childNodes[0].childNodes[1].nodeName    //这里的0其实是代表一的.这里表示第一个节点下的第二个节点的节点头
data3
—————————-
循环读取包含中的内容的时候记得最后的.childNodes[0].nodeValue是不变得
myXML.childNodes[0].childNodes[0].childNodes[0].nodeValue   //这里要注意其实childnodes[0]既有层的概念也有节点的概念
这里是第一个节点地内容
myXML.childNodes[0].childNodes[1].childNodes[0].nodeValue
第二个节点地内容
//输出节点长度
trace(myXML.childNodes[0].childNodes[0].childNodes.length);
—————————————————————————————————-
一个简单得类
调用类
import User;//要主意大小写
var user1:User = new User("un1", "pw1");
trace("Before:");
trace("\t username = " + user1.username); // un1
trace("\t password = " + user1.password); // pw1
user1.username = "1nu";
user1.password = "1wp";
trace("After:");
trace("\t username = " + user1.username); // 1nu
trace("\t password = " + user1.password); // 1wp
下面是类得定义
class User {
    // 私有实例变量
    private var __username:String;
    private var __password:String;

    // 构造函数语句
    public function User(p_username:String, p_password:String) {
        this.__username = p_username;
        this.__password = p_password;
    }
//使用getter和setter方法
    public function get username():String {//getter方法可以返回值
        return this.__username;
    }
    public function set username(value:String):Void {//setter方法可以设定值
        this.__username = value;
    }

    public function get password():String {
        return this.__password;
    }
    public function set password(value:String):Void {
        this.__password = value;
    }
}
/*
getter 和 setter 方法的语法如下所示:

getter 方法不能有任何参数,始终返回一个值。
setter 方法始终带一个参数,从不返回任何值。
类通常会定义 getter 方法和 setter 方法来分别提供对给定属性的读访问和写访问。

如果要使用更简明的语法,可以使用隐式 getter 和 setter 方法。
利用隐式 getter 和 setter 方法能够以直接访问的方式访问类属性,同时还可以保持良好的面向对象编程惯例。

若要定义这些方法,应使用 get 和 set 方法属性。
首先应创建用于获取或设置属性值的方法,然后在方法名前面加上 get 或 set 关键字,如上面所示。

*/
—————————————————————————-
初始化flash
Stage.showMenu = false;
//右键菜单不显示
System.useCodepage = true;
//这样从ASP读取的中文内容才能正常显示
Stage.scaleMode = "noScale";
//整个FLASH主体设定为不可缩放
Stage.align = "TL";
//内容设定为左上对齐
——————————————————————————
数组学习
//数组学习;
var myarr:Array = new Array();
var i:Number = 0;
var j:Number = 0;
for (i=0; i<10; i++) {
    myarr[i] = i+5;
}
trace(myarr);
trace("sort 的方法会对数组进行字符表编码排列,对上面数组排列后的内容是  "+myarr.sort());
//.length 是获得数组得长度
trace("数组得长度是  "+myarr.length);
//删除数组元素
delete myarr[5];
trace("删除第五个元素后的数组是  "+myarr);
//建立字符串数组
var myArray:Array = ["one", "two", "three"];
trace("建立字符串数组  "+myArray);
//建立二维数组
var mainArr:Array = new Array();
for (i=0; i<3; i++) {
    mainArr[i] = new Array();
    //这句是很关键得,意思是在mainArr[i]上再创建一个数组
    for (j=0; j<5; j++) {
        mainA
rr[i][j] = "["+i+"]["+j+"]";
    }
}
trace(mainArr);
//typeof显示变量得类型
trace("typeof返回myArray变量类型是    "+typeof (myArray));
//定义一个类吗???这里的id直接把mainarr的值赋给了id
var someUser:Object = {name:"Hal", id:mainArr};
trace("User's name is: " + someUser["name"]);
trace("User's id is: " + someUser["id"]);
———————————————————————————
load vars的交互

//=====================================================;
// Flash代码;
//=====================================================;
//定义LoadVars对象;
var data_lv = new LoadVars();
//提交的用户名变量和参数值;
data_lv.username = "kinglong";
//提交的密码变量和参数值;
data_lv.password = "king";
//提交后返回结果;
data_lv.onLoad = function(success){
//success,数据提交是否成功;
//这个只是表示数据传输是否成功,并不是用户验证的结果;
if(success){
trace("数据提交成功!");
//result也是用户验证返回的实际结果!
if(this.result=="true"){
trace("yes");
}else{
trace("no");
}
}else{
trace("数据提交失败!");
}
}
//数据提交方法调用;
//第一参数就是提交的页面地址;
//第二参数就是返回结果对象(只要是LoadVars对象就可以了);
//第三参数就是提交方式(这个和html中form表单类似,分为"post"和"get"两种方式)
data_lv.sendAndLoad("http://www.klstudio.com/save.asp",data_lv,"post");
//=====================================================;
//后台服务端页面处理及返回内容;
//=====================================================;
//接收flash提交过来的变量和接收一个页面提交过来的变量一致的;
Request("username") 就是flash端username变量传过来的值"kinglong";
Request("password") 就是flash端password变量传过来的值"kinglong";
….数据库验证…..
//如果用户验证通过
&result=true
//如果用户验证失败
&result=false
//整个页面返回内容就是上面那一行内容,&result对应用着flash端的result变量;
//如果是多个返回值的话,就是&result=xxx&result1=xxx这种形式就可以了;

=============================================

让flash在web中保持速度的代码

<param name="quality" value="high">
<param name="menu" value="false">
<param name="wmode" value="transparent">
<param name="wmode" value="opaque">

===========================
加载图片并且初始化,注意:loadclip必须flash八版本以上支持

var myloader:MovieClipLoader = new MovieClipLoader();
myloader.addListener(this);
myloader.loadClip("01.jpg",jpgloader);

function onLoadInit(mc:MovieClip) {
    trace("onLoadInit: "+mc);
    jpgloader._x = jpgloader._x-jpgloader._width/2;
    jpgloader._y = jpgloader._y-jpgloader._height/2;
}

===========================

时间锁

_root.onLoad = function() {
    now_date = new Date();
    now_date.setFullYear(now_date.getFullYear());
    now_date.setMonth(now_date.getMonth()+1);
    now_date.setDate(now_date.getDate());
    //trace(end_date.getMonth());
    //trace(now_date.getMonth());
    if (now_date.getMonth()>3) {
        trace("三月份过了,无法使用");
    }
};

建立一个不会延迟的鼠标

程序代码 程序代码
Mouse.hide();
cursor_mc.onMouseMove = function() {
    this._x = this._parent._xmouse;
    this._y = this._parent._ymouse;
    updateAfterEvent();
};

控制一条曲线,主要是curveTo的应用.

程序代码 程序代码
var initX = 200;
var inity = 200;
var controlX;
var controlY;
var anchorX = 50;
var anchorY = 50;
this.onMouseMove = function() {
    this.createEmptyMovieClip("curve", 1);
    with (curve) {
        //with就是不用写开始的代码
        lineStyle(1, 000000, 50);
        moveTo(initX, inity);
        ControlX = _xmouse;
        ControlY = _ymouse;
        lineTo(ControlX, ControlY);
        lineTo(anchorX, anchorY);
        moveTo(initX, inity);
        curveTo(ControlX, ControlY, anchorX, anchorY);
    }
    updateAfterEvent(this.onMouseMove);
};

解决用createEmptyMovieClip语句建立出来的mc无法load(加载)外部文件的方法

程序代码 程序代码
//在名为mainContainer的mc里面建立一个名为imageMc的mc
imageMc = mainContainer.createEmptyMovieClip("imageMc", 1);
//imageMc.loadMovie("E:\\1.jpg");        //不能用这种方法====>下面是解决办法
//建立一个loader
var loader:MovieClipLoader = new MovieClipLoader();
//读取
loader.loadClip("c:\\1.jpg", imageMc);
//建立一个监听器
var mclListener:Object = new Object();
mclListener.onLoadInit = function(evt:MovieClip) {
    evt.onPress = function() {
        trace("bbb");
    };
};
loader.addListener(mclListener);

每隔一段时间就执行一个函数的程序.好用哦.

程序代码 程序代码
var count = 0;
var maxCount:Number = 10;
function executeCallback():Void {
    trace("现在的秒数是 "+intervalId+" count: "+count);
    if (count>=maxCount) {
        clearInterval(intervalId);
    }

    count++;
}
intervalId = setInterval(this, "executeCallback", 1000);

遍历场景内所有的对象

程序代码 程序代码
for (i in _root) {
trace(i+": "+_root[i]);
}

授权给指定的网站.这样那些网站就可以远程跨域调用这个flash了

程序代码 程序代码
System.security.allowDomain("flashearth.com", "neave.com", "kh.google.com", "tiles0.virtualearth.msn.com", "tiles1.virtualearth.msn.com", "tiles2.virtualearth.msn.com", "tiles3.virtualearth.msn.com");
Stage.scaleMode = "noScale";

赋值的小技巧.当so有值的时候,scale就等于so的值.否这就等于150

程序代码 程序代码
var scale:Number = so || 150;

使用MovieCliploader的类

程序代码 程序代码
this.createEmptyMovieClip("image_mc", this.getNextHighestDepth());
var mclListener:Object = new Object();
//开始load时调用的函数
mclListener.onLoadStart = function(target_mc:MovieClip) {
    target_mc.startTimer = getTimer();
};
//完成load时调用的函数
mclListener.onLoadComplete = function(target_mc:MovieClip) {
    target_mc.completeTimer = getTimer();
};
//完成load后刚开始运行调用的函数
mclListener.onLoadInit = function(target_mc:MovieClip) {
    trace("读取完毕");
    var timerMS:Number = target_mc.completeTimer-target_mc.startTimer;
    target_mc.createTextField("timer_txt", target_mc.getNextHighestDepth(), 0, target_mc._height, target_mc._width, 22);
    target_mc.timer_txt.text = "loaded in "+timerMS+" ms.";
};
var image_mcl:MovieClipLoader = new MovieClipLoader();
image_mcl.addListener(mclListener);
image_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", image_mc);

改变原点的位置,把原点从左上角移到场景中心

程序代码 程序代码
x=Stage.width/2; // Stage.width是场景的宽;
y=Stage.height/2; // Stage.height是场景的高;

笛卡尔坐标算法的简单基础一

程序代码 程序代码
_root.onLoad = function() {
    // 观察者与屏幕的距离
    D = 200;
    // 控制旋转的速度
    hutu = 0.001;
    // 角、弧度的转换
    b = hutu*180/Math.PI;
    //定义A点和B点的坐标.A[1],A[2],A[3]分别是x,y,z
    pos_a = new Array(100, 0, 100);
    pos_b = new Array(50, 50, 0);
};
//让他们X轴旋转的公式
mya.onEnterFrame = function() {
    //★★★★★★★★★★★★★
    //================A点的旋转
    temp_x = pos_a[0];
    temp_y = pos_a[1]*Math.cos(b)-pos_a[2]*Math.sin(b);
    temp_z = pos_a[2]*Math.cos(b)+pos_a[1]*Math.sin(b);
    //更新现在的位置
    pos_a = new Array(temp_x, temp_y, temp_z);
    //投影到二维坐标
    ratio = D/(D+pos_a[2]);
    perspective_pos_a_x = temp_x*ratio;
    perspective_pos_a_y = temp_y*ratio;
    //★★★★★★★★★★★★★
    //================b点的旋转
    temp_x = pos_b[0];
    temp_y = pos_b[1]*Math.cos(b)-pos_b[2]*Math.sin(b);
    temp_z = pos_b[2]*Math.cos(b)+pos_b[1]*Math.sin(b);
    //更新现在的位置
    pos_b = new Array(temp_x, temp_y, temp_z);
    //投影到二维坐标
    ratio = D/(D+pos_b[2]);
    perspective_pos_b_x = temp_x*ratio;
    perspective_pos_b_y = temp_y*ratio;
    //trace("b点的坐标是"+perspective_pos_b_x+perspective_pos_b_y);
    //定义B小球位置
    myb._x = perspective_pos_b_x;
    myb._y = perspective_pos_b_y;
    myb._xscale = myb._yscale=50*ratio;
    //定义A小球位置
    mya._x = perspective_pos_a_x;
    mya._y = perspective_pos_a_y;
    mya._xscale = mya._yscale=50*ratio;
    //画线
    _root.createEmptyMovieClip("triangle_mc", 1);
    with (triangle_mc) {
        lineStyle(1, 0xFF00FF, 100);
        //moveTo(200, 200);
        lineTo(perspective_pos_a_x, perspective_pos_a_y);
        lineTo(perspective_pos_b_x, perspective_pos_b_y);
    }
    updateAfterEvent(mya.onEnterFrame);
};

笛卡尔坐标算法的简单基础二之小球

程序代码 程序代码

_root.onLoad = function() {
    // 定义复制小球的数目
    shumu = 8;
    // 让原始小球消失
    qiu._x = 6000;
    // 复制小球,作为正方体的八个顶点
    for (var i = 0; i<shumu; i++) {
        duplicateMovieClip("qiu", "qiu"+i, i);
    }
    // 从三维坐标中取正方体的8个顶点的坐标,保存在数组中
    qiu_pos_x = new Array(100, 0, 0, 100, 100, 0, 0, 100);
    qiu_pos_y = new Array(100, 100, 100, 100, 0, 0, 0, 0);
    qiu_pos_z
= new Array(50, 50, -50, -50, 50, 50, -50, -50);
    // 观察者与屏幕的距离
    D = 200;
    // 控制旋转的速度
    hutu = 0.001;
    // 角、弧度的转换
    b = hutu*180/Math.PI;
};
_root.onEnterFrame = function() {
    for (var i = 0; i<shumu; i++) {
        // 按公式计算
        x1 = qiu_pos_x[i];
        y1 = qiu_pos_y[i]*Math.cos(b)-qiu_pos_z[i]*Math.sin(b);
        z1 = qiu_pos_z[i]*Math.cos(b)+qiu_pos_y[i]*Math.sin(b);
        // 更新数组元素
        qiu_pos_x[i] = x1;
        qiu_pos_y[i] = y1;
        qiu_pos_z[i] = z1;
        // 按公式计算
        ratio = D/(D+z1);
        perspective_x = x1*ratio;
        perspective_y = y1*ratio;
        //设置球的坐标
        _root["qiu"+i]._x = 275+perspective_x;

        _root["qiu"+i]._y = 200-perspective_y;
        // 球的大小
        _root["qiu"+i]._xscale = _root["qiu"+i]._yscale=50*ratio;
        // 球的层次
        _root["qiu"+i].swapDepths(10000-qiu_pos_z[i]);
        //设置透明度
        _root["qiu"+i]._alpha = 100*ratio;
        _root.createEmptyMovieClip("triangle_mc", 1000);
        with (triangle_mc) {
            lineStyle(1, 0xFF00FF, 100);
            //第一个面
            moveTo(_root["qiu"+0]._x, _root["qiu"+0]._y);
            lineTo(_root["qiu"+1]._x, _root["qiu"+1]._y);
            lineTo(_root["qiu"+2]._x, _root["qiu"+2]._y);
            lineTo(_root["qiu"+3]._x, _root["qiu"+3]._y);
            lineTo(_root["qiu"+0]._x, _root["qiu"+0]._y);
            //第二个面
            moveTo(_root["qiu"+4]._x, _root["qiu"+4]._y);
            lineTo(_root["qiu"+5]._x, _root["qiu"+5]._y);
            lineTo(_root["qiu"+6]._x, _root["qiu"+6]._y);
            lineTo(_root["qiu"+7]._x, _root["qiu"+7]._y);
            lineTo(_root["qiu"+4]._x, _root["qiu"+4]._y);
        }
    }
};

flash里函数传递数组的写法.主要要是写成_root.jj.selected 就会出错的

程序代码 程序代码

function chkdone(jj:String) {
    //trace(jj);
    if (_root[jj].selected == false) {
        trace("还有选择题没有选择");
    }
    //trace(_root.kk1.selected);
}

返回一个n到m之间的k个互异随机数

程序代码 程序代码
//# 返回一个n到m之间的k个互异随机数
function randomKdiffer(n, m, k) {
    arrayK = [];
    var i = 0;
    while (i<k) {
        a = random(m-n+1)+n;
        for (var j = 0; j<i; j++) {
            if (a == arrayK[j]) {
                break;
            }
        }
        if (j == i) {
            arrayK[i] = a;
            i++;
        }
    }
    return arrayK;
}
k = randomKdiffer(1, 10, 5);
trace(k);
trace(k[3]);

用flash控制窗口缩放的代码

下载文件 点击下载此文件

键盘监测

程序代码 程序代码
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
    trace("DOWN -> Code:"+Key.getCode()+"\tACSII:"+Key.getAscii()+"\tKey:"+chr(Key.getAscii()));
    gotoAndPlay(2);
};
Key.addListener(keyListener);
stop();

关于读取了xml以后.用xml里面的http地址来作为该mc链接地址的解决方法

程序代码 程序代码
function onLoadInit(mc:MovieClip) {
    
//一个mc读取出来以后.就应该立即给该MC赋值URL
    mc.onRelease = function() {
                //这里的7代表这里mc以后的数字
        trace(myRimg_URL_arr[mc._name.substring(7)]);
        getURL(myRimg_URL_arr[mc._name.substring(7)], "_blank");

&#
160;   };
}

啊添写的窗口自适应代码

下载文件 点击下载此文件

缓动公式

程序代码 程序代码
//缓动公式
function movemc(mymc:MovieClip, xx:Number) {
    trace(mymc);
    //加速度设定
    var speedadd = 0.2;
    //放置多次点击
    if (mymc.moving<>true) {
        //缓冲接近
        mymc.onEnterFrame = function() {
            this.moving = true;
            mymc._x += (xx-mymc._x)*speedadd;
            trace(Math.abs(xx-mymc._x));
            if (Math.abs(xx-mymc._x)<=1) {
                this.moving = false;
                mymc._x = xx;
                trace("停止距离"+mymc._x);
                delete mymc.onEnterFrame;
            }
        };
    }
}

获得一个mc的名字中某部分字符串

一个名字为tempname的mc.他的第三位以后的名字是"pname"

程序代码 程序代码

trace(tempname._name.substring(3));

淡入淡出函数

程序代码 程序代码
//淡入淡出函数
function MCalpha(MC:Object, InorOut:String) {
    
    //透明速度
    speed = 5;
    if (InorOut == "out") {
        MC.onEnterFrame = function() {
            this._alpha -= speed;
            if (this._alpha<=0) {
                this._alpha = 0;
                delete this.onEnterFrame;
            }
        };
    } else if (InorOut == "in") {
        MC.onEnterFrame = function() {
            this._alpha += speed;
            if (this._alpha>=100) {
                this._alpha = 100;
                delete this.onEnterFrame;
            }
        };
    }
}

鼠标点击监听

程序代码 程序代码
var someListener:Object = new Object();
someListener.onMouseDown = function() {
    trace("撒旦发生的");
};
Mouse.addListener(someListener);

判断动态文本长度,包含中英文

程序代码 程序代码
txt = “subtxt中文”;
//长度判断
var TXT_W = 0;
for (i=0; i<txt.length; ++i) {
    ascii = txt.charCodeAt(i);
    trace(txt.charAt(i)+"="+ascii);
    //122以后的都是中文
    if (ascii<122) {
        //英文加1
        TXT_W = TXT_W+1;
    } else {
        //中文加2
        TXT_W = TXT_W+2;
    }
}
trace("TXT_W========"+TXT_W);

判断是否点击了该MC

程序代码 程序代码
bt.onMouseDown = function() {
    if (this.hitTest(_xmouse, _ymouse)) {
        trace("点到我了")    }
};

替换字符函数

程序代码 程序代码
_global.replace = function(s:String, o:String, r:String)
{
    return s = s.split(o).join(r);
};
dd = "asdfasdf我阿斯我顿飞";
trace(replace(dd, "我", "你"));

用js定义一个div的位置 div的ID=branding

程序代码 程序代码
<script type=text/javascript>

window.onresize = resizeDiv;
        window.onscroll = resizeDiv;
        
        function resizeDiv()
        {
            if((document.body.clientWidth)>957){
            var docWidth = document.documentElement.clientWidth;
            var docHeight = document.documentElement.clientHeight;
            //document.getElementById("branding").style.top = (do
cument.body.clientHeight)*0.8;
           document.getElementById("branding").style.top=document.body.scrollTop +(document.body.clientHeight)*0.8;
            document.getElementById("branding").style.left = (document.body.clientWidth/2)+300;
        }else{}
        }
        
        
        window.onload=function()//用window的onload事件,窗体加载完毕的时候
{
   resizeDiv()
}

        
        </script>

  1. 0楼
    小花

    大猪,你真的很像很想那个人……
    到底是不是呢????????
    在这灌水了,不好意思!期待你的回复!

    2006-04-19 22:31 [回复]