An interesting scroll background------ActionScript3.0
package
{
/*
*@ ClassName : package::backGround
*@ INTRO : the continuously scroll background
*@ Author : feiruo
*@ LanguageVersion : 3.0
*@ SDKVersion : Flash Player 9.0
*@ Date : 2015.09.09
*/ import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent; dynamic public class backGround extends MovieClip //dynamic表示可以向该类进行动态的添加属性
{
public var myAcc:Number=20; //缓动系数
public var mouseAcc:Number=10; //鼠标缓动系数
public var autoPlay_speed:Number=3; //自动滚动速度初始值
public var mouseOverPlay_speed:Number=-3; //鼠标经过时背景播放的速度,正数向右,负数向左
private var autoPlay:Boolean=false;
private var mouseF:Number=0;
private var mouseover:Boolean=false;
private var isDrag:Boolean;
private var speed:Number=0;
private var startX2:Number=0;
private var startX:Number=0;
private var memory_x:Number=0;
private var _width:Number; public function backGround()
{
addFrameScript(0, frame1); //在影片剪辑backGround元件中时间轴第一帧添加代码
this._width=this.width/3;
return; }
public function frame1():void
{
isDrag=false;
speed=5; //设定初始滚动速度
addEventListener(Event.ENTER_FRAME, update);//添加帧事件
this.addEventListener(MouseEvent.MOUSE_OVER,function(e:MouseEvent):void{mouseover=true;});
this.addEventListener(MouseEvent.MOUSE_OUT,function(e:MouseEvent):void{mouseover=false;});
if (autoPlay == false) //如果没有自动滚动,添加鼠标事件
{
this.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseHandler);
}
return;
}//end function
private function mouseUpdate()
{
startX2 = startX2 + (mouseX - startX - startX2) / 3;
//计算鼠标位置差值
bg_mc.x = memory_x + startX2;
//计算当前背景图应该所在的新位置
if (bg_mc.x > 0)
{
bg_mc.x = bg_mc.x - this._width;
//返回到第一张图或第二张图之间,所显示画面与当前的位置其实一样
}
if (bg_mc.x <= -this._width)
{
bg_mc.x = bg_mc.x + this._width;
//返回到第二张图或第三张图之间
}
return;
}//end function private function mouseHandler(e:MouseEvent):void
{
if (e.type == MouseEvent.MOUSE_DOWN)
{
memory_x = bg_mc.x; //临时存储当前背景图的x坐标
startX = mouseX; //鼠标按下,临时存储鼠标x坐标
startX2 = mouseX - startX; //按下移动后,计算移动距离
mouseF = mouseX; //记录当前鼠标位置
isDrag = true; //拖动属性设置为true,可以拖动
mouseUpdate();
}
else if (e.type == MouseEvent.MOUSE_UP)
{
if (isDrag)
{
speed = (-(mouseF - mouseX)) / mouseAcc; //计算鼠标弹起是背景图应该滚动的速度
isDrag = false; //拖动为false
}
}
return; }//end function private function update(e:Event):void
{
mouseover ? bg_mc.x+=mouseOverPlay_speed : bg_mc.x+=0; if (autoPlay == false) //如果背景图没有自己滚动,并且速度不为0,计算当前位置
{
if (Math.abs(speed) >= 0)
{
bg_mc.x = bg_mc.x + speed;
}
}
else
{
bg_mc.x = bg_mc.x + autoPlay_speed; //否则自动滚动
}
if (bg_mc.x > 0)
{
bg_mc.x = -this._width + speed;
}
if (bg_mc.x <= -this._width)
{
bg_mc.x = speed;
} mouseF = mouseF + (mouseX - mouseF) / mouseAcc;
//计算非拖动与拖动情况下的速度 if (!isDrag)
{
speed = speed + (-speed) / myAcc;
}
else
{
speed = speed + (-speed) / myAcc;
mouseUpdate();
}
if (Math.abs(speed) < 0.5)
//如果速度绝对值小于0.5,可以默认为0
{
speed = 0;
}
return;
}
} }
An interesting scroll background------ActionScript3.0的更多相关文章
- 【ActionScript】ActionScript3.0对舞台组件的增删改查
以一个样例来说明ActionScript3.0对舞台组件的增删改查 例如以下图: 在Flash执行的时候,通过脚本.斜向下生成text0-text9十个文本节点. 提供两个功能. 1.在右上角,用户输 ...
- 原创教程“ActionScript3.0游戏中的图像编程”開始连载啦!
经过近两年的不懈努力,笔者的原创教程"ActionScript3游戏中的图像编程"最终在今日划上了完美的句号!这其中记录着笔者多年来在游戏制作,尤其是其中图像处理方 ...
- ActionScript3.0(AS3)中的泛型数组Vector
Adobe官方并没有"泛型数组"的叫法,这是我自己对Vector的叫法(有点标题党),不过Vector在使用上确实跟c#中的泛型数组有些相似之处. 原作者:菩提树下的杨过出处:ht ...
- [ActionScript3.0] 使用FileReferenceList处理多个文件上载
package { import flash.display.Sprite; import flash.events.DataEvent; import flash.events.Event; imp ...
- [ActionScript3.0] AS3利用ExternalInterface与js通信
AS3代码,可做文档类; package { import flash.display.Sprite; import flash.events.*; import flash.external.Ext ...
- [ActionScript3.0] 运用JPEGEncoderOptions或者PNGEncoderOptions保存图片到本地
在flash player 11.3和air3.3之前,我们可以借助第三方类(JPEGEncoder)这些,很容易处理.现在,有了encode和JPEGEncoderOptions这些,处理位图数据就 ...
- [ActionScript3.0] 逻辑或"||=" ,等于"=="和全等于"==="
function a(o:Object):void { o||=new Object(); trace(o); } //此上下两个方法作用是一样的 function b(o:Object):void ...
- [ActionScript3.0] 传递任意数量的参数
function setAgument(a:int,...rest):void{ for(var i:int=0;i<rest.length;i++){ trace(rest[i]); }}se ...
- [ActionScript3.0] 深表复制
function clone(obj:Object):Object{ var byteArray:ByteArray = new ByteArray(); byteArray.writeObject( ...
随机推荐
- selenium动作链
简介 一般来说我们与页面的交互可以使用Webelement的方法来进行点击等操作. 但是,有时候我们需要一些更复杂的动作,类似于拖动,双击,长按等等. 这时候就需要用到我们的Action Chains ...
- Codeforces Round #404 (Div. 2)——ABCDE
题目这里 A.map裸题 #include <bits/stdc++.h> using namespace std; map <string, int> p; string s ...
- [BZOJ 3796]Mushroom追妹纸
[BZOJ 3796]Mushroom追妹纸 题目 Mushroom最近看上了一个漂亮妹纸.他选择一种非常经典的手段来表达自己的心意——写情书.考虑到自己的表达能力,Mushroom决定不手写情书.他 ...
- [COGS 2264]魔法传输
[COGS 2264]魔法传输 题目 自从看了<哈利波特>,小Y就十分渴望获得魔法值.于是他和一群向往魔法的孩子(当然这些孩子们都是不会魔法的)来到了哈利波特的家,大家坐成一排.哈利波特会 ...
- 暑假集训D18总结
考试 本来考试时以为能AK的,结果全是因为手贱啊= = T1 瞎XX贪心 我竟然当成了数学 还拍了半天以为是对的 T2 组合数学 太简单 半个小时直接A T3 最长上升(非下降?)子序列 考试25,加 ...
- hdu 1532&&poj1273 基础最大流
#include<stdio.h> #include<string.h> #include<queue> #include<iostream> usin ...
- 用循环链表实现Josephus问题
Josephus问题:设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列.如此反复直到所有的人全部出列为止. 思路:构建一个没有 ...
- N天学习一个linux命令之ping
用途 检测主机是否可到达,也就是说,目标主机是否可以联网,还可以用于检测网速.通过发送ICMP ECHO_REQUEST数据包检测. 用法 ping [options] destination 常用选 ...
- MYSQL 字符集 MYSQL 源码
http://blog.csdn.net/maray/article/details/46504621
- [Angular] Why should we using Protal
Origianl article Protal from Angular CDK, is a way to create dynammic component. Consider an example ...