2008-09-26 17:02
2008-09-16 17:37
function GoToURL(event:MouseEvent){
var url=new URLRequest(" http://www.baidu.com/")
navigateToURL(url)
}
url_btn.addEventListener(MouseEvent.MOUSE_DOWN,GoToURL)
按钮的名字叫url_btn,as3不在是脚本了,只能在桢上写 |
2008-09-16 17:36
用AS2.0就和FLASH8一样的写代码.
比如那个按钮的实例名称是 mc
既是写在元件上
on(release) {
trace("click");
}
写在第一侦上
mc.onRelease = function() {
trace("click");
}
如果用AS3.0就不一样了.
那么在地一侦上的代码就是(AS3.0不能将代码写在元件或按钮上)
mc.addEventListener(MouseEvent.CLICK, mcOnClick);
function mcOnClick(evt:MouseEvent):void {
trace("onClick");
//这里写函数吧
}
|
2008-08-20 11:38
一个mask 一个在mc上写的action
---------------------------------------------------------------------------------------------------------------------
onClipEvent (load) {
speed = 1.000000000E-001;
}
onClipEvent (enterFrame) {
this._x = this._x+speed*(_root._xmouse/(_root.mask._width/(this._width-_root.mask._width))*-1-this._x*1.45);
}
--------------------------------------------------
|
2008-08-17 14:57
2008-08-14 17:57
var Obj:Object = new Object();
var delta_b:Boolean;
var T:Number;
Obj.onMouseWheel = function(delta) {
if (!delta_b) {
if (delta>0) {
trace("next");
} else if (delta<0) {
trace("prev");
}
delta_b = true;
clearInterval(T);
T = setTimeout(function () {
delta_b = false;
}, 300);
}
};
Mouse.addListener(Obj);
|
2008-08-14 16:45
| Flash8平铺网页背景 |
本文作者:egoldy
文章出处:http://www.webstudio.com.cn
文章性质:原创
阅读次数:8070
发布时间:2007-02-10 |
Flash8平铺网页背景-flash tile image
声明:此教程版权归webstudio.com.cn所有,转载请注明出处。
早在之前写过在flashmx2004中平铺背景的方法,虽然它也是有效果的,但相对使用flash8时还是显得有些复杂.这次介绍的是flash8中的MovieClip的新方法MovieClip.beginBitmapFill()法.使用这种方式来平铺背景会非常的简单.下面开始.
演示文件:
1. 我们需要先准备一张小图.当前我们使用的是一张小的gif图像如下图所示:
如果你想测试可以直接下载些图像来测试.
2. 新建一个flash文档,大小随意,将我们选定的这张图像导入到库中,并在库中直接为此图像设置链接.当前我们设置为pattern1,基本方法是选中库中刚导入的图像,右击选择链接,如下图所示:
3. 完成这一步操作之后,按下来我们准备使用代码来平铺背景.在前面我们提到过我们将使用MoiveClip.beginBitmapFill()方法.我们先看一下beginBitmapFill()方法:
public beginBitmapFill(bmp:BitmapData, [matrix:Matrix], [repeat:Boolean], [smoothing:Boolean]) : Void
beginBitmapFill方法是用位图来添充绘画区域,也就是说它需要先有一个绘画区域,它有四个参数,bmp参数可以是一张透明或不透时的图像,matrix参数主要用来用bmp进行变换操作,包括旋转,缩放和移动,后面两个参数repeat是设定是否重复, smoothing参数是设计是否平滑,默认为false即不平滑.针对于beginBitmapFill()最基本的应用是你可以只使用bmp参数.ok.下面我们准备编码.
4. 选中场景中的第一帧,在其中加入如下代码:
| 代码: |
| |
//导入flash8 bitmapData类
import flash.display.BitmapData;
//创建bitmapData实例,这里使用的是flash8的loadBitmap.如不清楚可以//参看本站的flash8 bitmapData教程
var tile:BitmapData = BitmapData.loadBitmap("pattern1");
//使用beginBitmapFill()方法开始添充.
this.beginBitmapFill(tile);
//下面一段是根据屏幕的大小来绘制绘画区域,用以beginBitmapFill来添充.
this.lineTo(Stage.width, 0);
this.lineTo(Stage.width, Stage.height);
this.lineTo(0, Stage.height);
this.lineTo(0, 0);
this.endFill(); |
| |
5. 现在测试你的影片,你就可以看到如下图所示的效果了.
6. 呵呵,看上去的确很简单,只需要几行代码即可,相对于flashmx2004的平铺效果来说,现在你不在需要计算屏幕的宽高能容纳多少张小图了.ok.现在点击右上角的窗口放大按钮,我们发现只有中心区域有添充,四周并没有,也就是说它没随屏幕的变化而进行重绘,这并不是我们想要的,对于背景来说,需要让它随着屏幕大小的变化而变化. 接下来我们继续添加代码.
7. 要想让它随着屏幕的大小变小,我们需要使用flash8中的Stage类来处理.如下代码:
| 代码: |
| |
Stage.scaleMode = "noScale";
Stage.align = "TL";
var stageListener:Object = new Object();
stageListener.onResize = function() {
trace("w:"+Stage.width+", h:"+Stage.height);
tilebg();
};
Stage.addListener(stageListener);
//调用tilebg()函数第一次绘制
tilebg();
*******************************************
import flash.display.BitmapData;
function tilebg(){
var tile:BitmapData = BitmapData.loadBitmap("pattern1");
this.beginBitmapFill(tile);
this.lineTo(Stage.width, 0);
this.lineTo(Stage.width, Stage.height);
this.lineTo(0, Stage.height);
this.lineTo(0, 0);
this.endFill();
} |
| |
我们在我们原有的代码之上加入了一段Stage大小变化的侦听,这一段应当说是我非常常用的代码,为了方便起见,我们把原来的代码定义成一个函数即tilebg(),这样当屏幕大小发生变化时,就会执行onResize()方法,就会调用定义好的tilebg()函数.ok.现在在测试你的影片,刚才的问题已经解决了,你可以点击swf窗口的放大按钮来查看效果
8. 接下来我们深入研究一下beginBitmapFill()其它的几个参数.假设我们希望我们平铺完的效果始终是光滑的.那么我们就设定smoothing始终为true; 我们来看Matrix和repeat两个参数.选中第一帧,打开actionscript面板.我们做如下的简单的修改.
| 代码: |
| |
function tilebg(){
var tile:BitmapData = BitmapData.loadBitmap("pattern1");
var matrix = new flash.geom.Matrix();
repeat = false;
smoothing = true;
this.beginBitmapFill(tile,matrix,repeat,smoothing);
this.lineTo(Stage.width, 0);
this.lineTo(Stage.width, Stage.height);
this.lineTo(0, Stage.height);
this.lineTo(0, 0);
this.endFill();
} |
| |
我们只需要在tilebg()函数中做一点修改, 分别定义了matrix, repeat,和smoothing三个参数,还有一处不要忘记了,this.beginBitmapFill(tile,matrix,repeat,smoothing)把其它三个参数加入进去.默认状态下repeat为true;现在我们改成false.测试我们可以观看到这样的效果.
看上去也是不错的效果. 当然此时它仍会随屏幕的大小发生变,接下来我们看Matirx,flash8中Matrix变换矩阵相对比较复杂.但flash8提供了几种关于matrix的简单方法,比如旋转,缩放,位移等,这里我们示范一下旋转.
9. 再次修改上面的tilebg()函数.加入matrix变换.如下:
| 代码: |
| |
function tilebg(){
var tile:BitmapData = BitmapData.loadBitmap("pattern1");
var matrix = new flash.geom.Matrix();
matrix.rotate(Math.PI/4);
repeat = false;
smoothing = true;
this.beginBitmapFill(tile,matrix,repeat,smoothing);
this.lineTo(Stage.width, 0);
this.lineTo(Stage.width, Stage.height);
this.lineTo(0, Stage.height);
this.lineTo(0, 0);
this.endFill();
} |
| |
我们在其中加入了一行matrix.rotate(Math.PI/4)即转动45度.
测试效果如下所示:
演示文件
如果你对matrix的其它方法感兴趣,你可以继续试试看.可以根据你的需要求来进行定制.ok. |
讨论此教程 |
2008-08-14 16:21
FLASH背景 MC自动缩放以适应 不同分辨率的 浏览器浏览:
//FLASH部分
新建文件autoSize.swf
在FLASH的舞台新建一MC自命名为MC1。
在_root TimeLine上的第1 frame 写上:
stop();
Stage.scaleMode = "noScale"
Stage.align="TL"
mc1._width=Stage.width;
mc1._height=Stage.height;
myListener = new Object();
myListener.onResize = function () {
mc1._width=Stage.width;
mc1._height=Stage.height;
mc1._x=0
mc1._y=0
}
Stage.addListener(myListener);
//★FLASH部分的第二种方法,比前者实现更完美,使用了Loader组件 和Loader类。
首先要在舞台上拖放库里的Loader组件到舞台。并且要导入mx.controls.Loader类。
具体写法:
import mx.controls.Loader
stop();
Stage.scaleMode = "noScale";
Stage.align = "TL";
var myLoader:Loader;
myLoader =this.attachMovie("Loader", "myLoader", this.getNextHighestDepth());
myLoader.setSize(Stage.width, Stage.height);
myLoader.autoLoad = true;
myLoader.contentPath = "here_your_pic.jpg";
myListener = new Object();
myListener.onResize = function ()
{
myLoader.setSize(Stage.width,Stage.height);
}
Stage.addListener(myListener);
//网页部分
CSS样式表要加上
html, body {
height: 100%;
background-color: #181818;
margin: 0;
padding: 0;
border: 0;
}
镶嵌FLASH时候的width 和height要都设置为100% |
2008-08-14 16:01
HTML与FLASH之间的“静态”传值
在论坛上经常看见有新手问到“我想让FLASH得到URL中的参数ID号,该怎么办?”“某某视频网站的FLASH播放器是如何播放不同ID的视频的?”...诸如此类问题看到了太多,每次都有一堆回帖,众说纷纭,里面难免有误导性质的回复。今天特结合自己平时工作中使用的心得对此类问题做一个小小的归纳。
我所指的 静态传值是区别于与服务端通信进行值传递的方式,例如LoadVars,XML,Remoting之类,后者暂且不在本文的讨论范围内,当你想让FLASH获取URL中的参数时,你为何不换个角度想了?其实我们可以让服务端动态生成SWF的的插入代码,主动将我们需要的参数“静态”传递给FLASH,FLASH直接用就可以了,根本不需要自己去拿,而以何种形式传递给FLASH,就是我所指的静态传值。我知道的可行的HTML与FLASH之间的静态传值方法有三种:
- SWF地址后使用参数传递符“?”
- FlashVars传递
- JS控制
下面来具体介绍下这三种方式的传递是如何工作的:
一、SWF地址后使用参数传递符“?”
我们知道,在ULR地址中使用参数传递符“?”可以以GET方式传递参数,例如http://www.v-sky.com?uid=12&uname=vsky,这里使用了参数传递符“?”,同时使用了连接符“&”做为变量分隔标识,以这种规范的格式来传递两个参数:uid=12和uname=vsky,那么服务端可以使用GET方式获取这两个值。
在FLASH中我们同样可以采用类似的方式来传递参数,HTML页面中插入SWF文件最常用的就是使用Object标签和Embed标签结合的方式,这也是Adobe的推荐方式:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="demo.swf?uid=12&uname=vsky" />
<param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />
<embed src="demo.swf?uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
其中粗体部分对应的就是SWF文件的地址,那么我们可以在这个地址后面通过类似于URL中GET方式传参的方法来个SWF传递参数,例如上面代码在页面完全加载完毕时,它已经给SWF文件写入了两个变量:uid=12和uname=vsky。
二、FlashVars传递
你可以查阅FLASH帮助文档来看FlashVars的官方定义。其实在HTML语法中,这是一个被很多新手所忽视的属性,同样以上面的参数为例,下面用FlashVars来传递变量:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="demo.swf" />
<param name="FlashVars" value="uid=12&uname=vsky" />
<param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />
<embed src="demo.swf" FlashVars="uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
跟方式一相同,它也是直接给FLASH里添加了这两个变量。但我个人 推荐使用此方式,结合 SWFObject的使用,使用FlashVars来传递变量有很多好处,例如代码清晰,容易管理,浏览其兼容,符合标准。他们的结合使用在“ 为FLASH程序构造灵活的接口”一文中我已经做了介绍(PS:随后我会提供一个复杂点的、有说服力的实际应用来说明这种灵活接口的使用)。
三、JS控制
对于客户端页面中的资源,JS通过DOM结构来控制它们可以说是随心所欲的,FLASH也不例外,下面是Flash Player的Javascript方法一览表:
Play() —————————————- 播放动画
StopPlay()————————————停止动画
IsPlaying()———————————– 动画是否正在播放
GotoFrame(frame_number)—————- 跳转到某帧
TotalFrames()——————————- 获取动画总帧数
CurrentFrame()——————————回传当前动画所在帧数-1
Rewind()————————————-使动画返回第一帧
SetZoomRect(left,top,right,buttom)——-放大指定区域
Zoom(percent)——————————改变动画大小
Pan(x_position,y_position,unit)————使动画在x,y方向上平移
PercentLoaded()—————————-返回动画被载入的百分比
LoadMovie(level_number,path)———– 加载动画
TGotoFrame(movie_clip,frame_number)- movie_clip跳转到指定帧数
TGotoLabel(movie_clip,label_name)—— movie_clip跳转到指定标签
TCurrentFrame(movie_clip)————— 回传movie_clip当前帧-1
TCurrentLabel(movie_clip)—————–回传movie_clip当前标签
TPlay(movie_clip)—————————播放movie_clip
TStopPlay(movie_clip)———————-停止movie_clip的播放
GetVariable(variable_name)—————–获取变量
SetVariable(variable_name,value)———–变量赋值
TCallFrame(movie_clip,frame_number)—call指定帧上的action
TCallLabel(movie_clip,label)—————-call指定标签上的action
TGetProperty(movie_clip,property)——–获取movie_clip的指定属性
TSetProperty(movie_clip,property,number)———-设置movie_clip的指定属性
在这里我们只需要使用的是粗体标识的SetVariable方法,JS通过调用此方法能够直接更改SWF中的变量值。首先我们需要定义插入的SWF的ID,例如id为VskyDemo,那么我们可以通过下面的JS语句来完成SWF内部变量的设置:
window.document.VskyDemo.SetVariable("uid", 12);
很简单吧,就是这样的。除非是涉及到了HTML中SWF之外元素跟它交互,否则我一般不使用JS来控制SWF里的变量,因为我总觉得怪怪的,呵呵,个人习惯吧。
多多实践,不要觉得这些小东西不起眼,小东西多了,聚结到一起了就是一个大的应用。
条条大路通北京,选择你自己喜欢的,自己认为便捷的方式就可以了,目前我是没有发现这三个方式存在功能上的缺陷。
欢迎大家加入讨论,如承蒙转载,请注明出处: http://www.v-sky.com/blog/index.php/archives/179
[ 本帖最后由 llkings 于 2007-6-4 07:56 编辑 ]
|

我的Blog空间 = Simple Life= [http://www.v-sky.com]
|
|
2008-06-24 13:27
思路:1.隐藏原有鼠标指针;
2.鼠标的位置=mc的位置
步骤1:
绘制一个鼠标指针,保存为影片剪辑,实例名为"mymouse";
该指针也可为动画形式,且指针的中心点位于影片剪辑中心点的右下方;
做好后,放到舞台中。
步骤2:
加入AS代码层:
Mouse.hide();
//隐藏默认指针
_root.onMouseMove = function() {
mymouse._x = _xmouse;
mymouse._y = _ymouse;
//或者将这两句替换为:mymouse.startDrag(true);
updateAfterEvent()
};
FLASH充电:updateAfterEvent()
使用 updateAfterEvent() 继续刷新舞台,使光标的移动看起来顺畅。
|
|
|
daodao_aa
女
北京 海淀区
上次登录: 14天前
加为好友
|