资源描述
二维图形技术复习资料
By BW
1.飞机沿轨迹运动
import flash.events.MouseEvent;
stop();
plane.stop();
Object(this).Butn.addEventListener(MouseEvent.CLICK,airplanePlay);
function airplanePlay(e:MouseEvent)
{
gotoAndPlay(2);
plane.play();
}
引导层是轨迹,飞机是被引导层 选中飞机时的样子
2.计算两点距离
import includes.CPoint;
var point1:CPoint=new CPoint(12,30,50);
var point2:CPoint=new CPoint(2,3,5);
trace("点1的坐标(",point1.xx,",",point1.yy,",",point1.zz,")");
trace("点2的坐标(",point2.xx,",",point2.yy,",",point2.zz,")");
function Distance(p1:CPoint,p2:CPoint):Number
{
var xvalue=p1.xx-p2.xx;
var yvalue=p1.yy-p2.yy;
var zvalue=p1.zz-p2.zz;
var dis:Number=Math.sqrt(xvalue*xvalue+yvalue*yvalue+zvalue*zvalue);
return dis;
}
var disvalue=Distance(point1,point2);
trace("the distance of between p1 and p2 is",disvalue);
3.简单数据类型1
var num:int=6789 //定义数字
var temp:int=num //取得数字的拷贝
var a:int=temp/1000 //得到千位数
temp=temp-a*1000 //去掉千位
var b:int=temp/100 //得到百位数
temp=temp-b*100 //去掉百位
var c:int=temp/10 //得到十位数
temp=temp-c*10 //去掉十位
var d:int=temp //得到个位数
trace(a,b,c,d)
4.简单数据类型2
var num:int=6789 //定义数字
var str=String(num) //数字转换为字符串
var a:int=str.charAt(0) //取得索引0处的字符即6
var b:int=str.charAt(1) //取得索引1处的字符即7
var c:int=str.charAt(2) //取得索引2处的字符即8
var d:int=str.charAt(3) //取得索引3处的字符即9
trace(a,b,c,d) //输出数位
5.按钮事件
import flash.events.MouseEvent;
Object(this).left_button.addEventListener(MouseEvent.CLICK,movex);
//定义movex函数
var speed:int=5;
function movex(e:MouseEvent):void
{
Object(this).car_movieclip.x-=speed;
}
Object(this).right_button.addEventListener(MouseEvent.CLICK,movexright);
function movexright(e:MouseEvent)
{
Object(this).car_movieclip.x+=speed;
// trace(Object(this).car_movieclip.x);
if(Object(this).car_movieclip.x>stage.stageWidth)
{
Object(this).car_movieclip.x=-250;
}
}
//trace(stage.stageWidth,stage.stageHeight);
Object(this).alpha2_button.addEventListener(MouseEvent.CLICK,reducealpha);
function reducealpha(e:MouseEvent)
{
if(Object(this).car_movieclip.alpha>0)
{
Object(this).car_movieclip.alpha-=0.1;
}else
Object(this).car_movieclip.alpha=1;
}
Object(this).alpha1_button.addEventListener(MouseEvent.CLICK,addalpha);
function addalpha(e:MouseEvent)
{
if(Object(this).car_movieclip.alpha<1)
{
Object(this).car_movieclip.alpha+=0.1;
}
}
Object(this).rotation_button.addEventListener(MouseEvent.CLICK,rotationx);
function rotationx(e:MouseEvent)
{
Object(this).car_movieclip.rotationX+=15;
}
Object(this).visible_button.addEventListener(MouseEvent.CLICK,hidemovieclip);
function hidemovieclip(e:MouseEvent)
{
if(Object(this).car_movieclip.visible==true)
{
Object(this).car_movieclip.visible=false;
}else
Object(this).car_movieclip.visible=true;
}
选中汽车
alpha+ 的名字是 alpha1_button
alpha- 的名字是 alpha2_button
hide 的名字是 visible_button
6.创建影片剪辑类
import flash.display.MovieClip;
import flash.events.MouseEvent;
var i:int;
for(i=1;i<=3;i++)
{
var mc:MovieClip=new pigtopig;
this.addChild(mc);
mc.x=i*150;
mc.y=200;
mc.addEventListener(MouseEvent.CLICK,clickHandler);
}
function clickHandler(e:MouseEvent):void
{
e.target.stop();
e.target.rotation+=20;
}
gif的图片,动画点击时候则定在点击的时候
7.倒计时动画
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.MouseEvent;
var anmationtime:Number=30;
var repeatnumber:int=mc.totalFrames;
var timeinterval:Number=anmationtime/repeatnumber*1000;
var my_timer:Timer=new Timer(timeinterval,repeatnumber);
my_timer.start();
my_timer.addEventListener(TimerEvent.TIMER,onplay);
function onplay(e:TimerEvent)
{
mc.nextFrame();
var countnumber:int=my_timer.currentCount;
var t:Number=30-countnumber*timeinterval/1000;
this.time_text.text=t.toFixed(1);
}
this.restart_but.addEventListener(MouseEvent.CLICK,restart);
function restart(e:MouseEvent)
{
mc.gotoAndPlay(1);
my_timer.reset();
my_timer.start();
}
Object(this).stop_but.addEventListener(MouseEvent.CLICK,stopplay);
function stopplay(e:MouseEvent)
{
my_timer.stop();
}
显示倒计时
蓝色按钮 stop_but(倒计时停止)
褐色按钮 restart_but(倒计时重新开始)
mc 影片剪辑
图层四:首帧和末帧都只是一个进度条的框框
图层三代码: stop()
图层二:遮罩层,创建的是补间形状,红色的从无到有
图层一:整个都是一个彩虹条
图层一二分别做完以后再设置遮罩层
8.键盘事件
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
const KEY_LEFT:uint=37;
const KEY_RIGHT:uint=39;
Object(this).plane_mc.stop();
var speed:int=5;
stage.addEventListener(KeyboardEvent.KEY_DOWN,moving);
function moving(e:KeyboardEvent)
{
var keynumber:uint=e.keyCode;
trace(keynumber);
if(keynumber==KEY_LEFT)
{
if(Object(this).plane_mc.x>-Object(this).plane_mc.width)
{
Object(this).plane_mc.x-=speed;}
else Object(this).plane_mc.x=stage.stageWidth;
}
if(keynumber==KEY_RIGHT)
{
if(Object(this).plane_mc.x<stage.stageWidth)
{
Object(this).plane_mc.x+=speed;}
else Object(this).plane_mc.x=-Object(this).plane_mc.width;
}
}
选中飞机 plane_mc
影片剪辑中的飞机 每一帧的螺旋桨都不是同样的角度,整体就是一个螺旋桨在动的gif动画
9.按钮图片切换
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.display.Bitmap;
import flash.display.BitmapData;
Object(this).t_shirt_button.addEventListener(MouseEvent.CLICK,loadt_shirt);
var pic_movieclip:MovieClip=new MovieClip();
function loadt_shirt(e:MouseEvent)
{
var bitmapsource:BitmapData=new shirt(240,216);
pic_movieclip.graphics.beginBitmapFill(bitmapsource);
pic_movieclip.graphics.drawRect(0,0,240,216);
addChild(pic_movieclip);
pic_movieclip.x=100;
pic_movieclip.y=50;
}
Object(this).kuzi_button.addEventListener(MouseEvent.CLICK,loadt_kuzi);
function loadt_kuzi(e:MouseEvent)
{
var bitmapsource:BitmapData=new kuzibitmap(240,216);
pic_movieclip.graphics.beginBitmapFill(bitmapsource);
pic_movieclip.graphics.drawRect(0,0,240,216);
addChild(pic_movieclip);
pic_movieclip.x=100;
pic_movieclip.y=50;
}
Object(this).bag_button.addEventListener(MouseEvent.CLICK,loadbag);
function loadbag(e:MouseEvent)
{
var bitmapsource:BitmapData=new Cbag(240,216);
pic_movieclip.graphics.beginBitmapFill(bitmapsource);
pic_movieclip.graphics.drawRect(0,0,240,216);
addChild(pic_movieclip);
pic_movieclip.x=100;
pic_movieclip.y=50;
}
选中上衣:按钮 t_shirt_button
选中裤子:按钮 kuzi_button
选中包包:按钮 bag_button
10.电子时钟
import flash.text.TextField;
import flash.events.Event;
function creatTextField(text_x:Number,text_y:Number,text_width:Number,text_height:Number):TextField
{
var my_textfield:TextField=new TextField();
my_textfield.x=text_x;
my_textfield.y=text_y;
my_textfield.height=text_height;
my_textfield.width=text_width;
my_textfield.textColor=0xff0000;
my_textfield.border=true;
//my_textfield.autoSize=" ";
//my_textfield.autoSize = TextFieldAutoSize.CENTER;
addChild(my_textfield);
return my_textfield;
}
var date_text:TextField=creatTextField(50,200,100,50);
var time_text:TextField=creatTextField(50,260,100,50);
var week_text:TextField=creatTextField(50,320,100,50);
var my_date=new Date();
var year_value=my_date.getFullYear();
var month_value=my_date.getMonth()+1;
var day_value=my_date.getDate();
date_text.text=year_value+"-"+month_value+"-"+day_value;
var hour_value=my_date.getHours();
var min_value=my_date.getMinutes();
var sec_value=my_date.getSeconds();
time_text.text=hour_value+":"+min_value+":"+sec_value;
/*time_text.addEventListener(Event.ENTER_FRAME,updatetime);
function updatetime(e:Event)
{
var uphour_value=my_date.getHours();
var upmin_value=my_date.getMinutes();
var upsec_value=my_date.getSeconds();
time_text.text=uphour_value+":"+upmin_value+":"+upsec_value;
}*/
Var week_array:Array=new Array("sun","mon","tue","wed","thu","fri","sat");
var day_num=my_date.getDay();
week_text.text=week_array[day_num];
Object(this).hour_pin.rotation=hour_value*360/12;
Object(this).minute_pin.rotation=min_value*360/60;
Object(this).second_pin.rotation=sec_value*360/60;
trace(hour_value);
图层三:时针分针和秒针
图层二:钟表盘
图层一:背景
三个指针名字:hour_pin second_pin minute_pin 三个影片剪辑
11.动态文本(和电子时钟显示时间差不多)
import flash.text.TextFormatAlign;
var dayofweek:Array=new Array("SUN","MON","TUS","WED","TUR","FRI","SAT");
var my_day:Date=new Date();
weekofnum.text=dayofweek[my_day.day];//利用文本框属性定义
function CreatTextField(xx:int,yy:int,wd:int,heigh:int):TextField
{
var dynamic_text:TextField=new TextField();
dynamic_text.x=xx;
dynamic_text.y=yy;
dynamic_text.width=wd;
dynamic_text.height=heigh;
dynamic_text.border=true;
dynamic_text.textColor=0x0000ff;
dynamic_text.background=true;
dynamic_text.backgroundColor=0xffffff;
dynamic_text.type=TextFieldType.DYNAMIC;
addChild(dynamic_text);
return dynamic_text;
}
var my_text:TextField=CreatTextField(50,50,80,30);//动态创建文本框
my_text.text=dayofweek[my_day.day];
var date_text:TextField=CreatTextField(50,100,80,30);//动态创建文本框
var month_number:Number=my_day.getMonth()+1;
date_text.text=String(my_day.fullYear)+"-"+month_number+"-"+my_day.date;
var time_text:TextField=CreatTextField(50,150,80,30);
//动态创建文本框
time_text.text=my_day.getHours()+":"+my_day.getMinutes()+":"+my_day.getSeconds();
第一帧只是一个选框
12.电子相册
this.stop();
btnCon(backBtn, 1);
backBtn.addEventListener("click",onPlay);
forwardBtn.addEventListener("click",onPlay);
function onPlay(e:MouseEvent) {
if(e.target==backBtn)
{
this.prevFrame()
}else if(e.target==forwardBtn)
{
this.nextFrame()
}
btnCon(backBtn, 1);
btnCon(forwardBtn, this.totalFrames);
}
function btnCon(obj, frameNum)
{
if (this.currentFrame == frameNum)
{
obj.alpha =.5
obj.enabled = false;
} else
{
obj.alpha =1
obj.enabled = true;
}
}
button层 上一张和下一张的按钮
bg层 按钮后面的灰色背景条(只是个装饰)
Picture层 每一帧都是一张背景图案
上一张的按钮: backBtn
下一张的按钮:forwardBtn
13.函数参数和调用
第一个as:
trace(this.speed);
第二个as:
function Max(x:int,y:int):int
{
if(x>y)
return x;
return y;
}
trace(Max(45,80));
function onClick(e:MouseEvent)
{
mc.x+=5;
}
mc.addEventListener("click",onClick);
function traceMsg():void
{
trace("this is a function");
}
function refeFunc(f:Function):void
{
f();
}
refeFunc(traceMsg);
var a:int= 1;
trace("函数调用前,实参a="+a);
test(a);
trace("函数调用后,实参a="+a);
function test(x):void
{
var y:int;
x += 5;
trace("调用函数中,形参x="+x);
}
//建立一个对象
var person:Object = new Object()
//动态创建属性age
person.age=20;
trace("函数调用前,实参person.age="+person.age);
test1(person);
trace("函数调用后,实参person.age="+person.age);
function test1(per:Object):void
{
per.age = 10;
//修改对象的age属性
trace("函数调用中,形参per.age="+per.age);
}
function test2(y:int,x:int=0):Boolean
{ return x>y; }
trace(test2(20));
trace(test2(15,5));
/*var speed:int=10;
trace(this.speed);*/
var speed:Number=5
onMove()
function onMove()
{
trace(this.speed)//5
var speed:Number=6
trace(speed)//6
trace(this.speed)//5
}
图层二其实就呢个蓝色的框框,就是mc啦,还是个影片剪辑
14.函数定义
第一个as:
function area(r:*):Number
{ var b:Boolean=r is Number;
if(!b)
return NaN;
return Math.PI*r*r;
}
var a=area(10.5);
trace(a);
trace(area(7));
trace(area("str"));
第二个as:
function btnCon(obj, frameNum) :void
{
if (this.currentFrame == frameNum)
{
obj.alpha =.5
obj.enabled = false;
} else
{
obj.alpha =1
obj.enabled = true;
}
}
btnCon(backBtn,1);
btnCon(forwardBtn,this.totalFrames);
蓝色按钮:backBtn
褐色按钮: forwardBtn
15.绘图函数
this.graphics.lineStyle(5)
this.graphics.moveTo(250,0)
this.graphics.lineTo(350,100)
root.graphics.lineStyle(10)
root.graphics.moveTo(350,0)
root.graphics.lineTo(450,100)
//画线
var sp1:Shape=new Shape();
this.addChild(sp1)
drawLine(sp1.graphics)
function drawLine(g:Graphics):void
{
with (g)
{
lineStyle(3);
moveTo(200,0);
curveTo(400,0,300,100);
}
}
//绘制矩形
var sp:Shape=new Shape();
this.addChild(sp)
drawrect(sp.graphics)
function drawrect(g:Graphics):void
{
with (g)
{
beginBitmapFill(new Photo(0,0))
drawRect(0,0,187,365)
}
}
//绘制填充颜色
var sp2:Shape=new Shape();
this.addChild(sp2);
drawrectwithcolor(sp2.graphics);
function drawrectwithcolor(g:Graphics):void
{
with (g)
{
beginFill(0xFF5599)
drawRect(230,200,200,150)
}
}
16.按键显示动画
键盘输入一大堆乱七八糟的字幕会在屏幕上跳来跳去
stage.addEventListener(KeyboardEvent.KEY_DOWN,charpaly);
function charpaly(e:KeyboardEvent):void
{
var keycode:uint=e.charCode;
var str:String=String.fromCharCode(keycode);
var txt:TextField=new TextField();
txt.text=str;
txt.x=Math.random()*550;
txt.y=Math.random()*300;
txt.addEventListener(Event.ENTER_FRAME,txtmove);
this.addChild(txt);
}
function txtmove(e:Event):void{
var txt1:TextField=e.target;
txt1.y+=(Math.random()*550-txt1.y)/10;
if(txt1.y<1)
{
txt1.removeEventListener(Event.ENTER_FRAME,txtmove);
this.removeChild(txt1);
}
}
17.键盘事件+enterframe动画
W A S D控制图形上下左右运动
const KEY_A:uint=65;
const KEY_D:uint=68;
const KEY_S:uint=83;
const KEY_W:uint=87;
var key:Object=new Object
var speed:Number=2
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDown)
stage.addEventListener(KeyboardEvent.KEY_UP,keyUp)
this.addEventListener(Event.ENTER_FRAME,test)
function isDown(keyCode:uint):Boolean
{
return key[keyCode]?true:false
}
//按下事件侦听器
function keyDown(e:KeyboardEvent):void
{
key[e.keyCode]=true
}
//释放事件侦听器
function keyUp(e:KeyboardEvent):void
{
delete key[e.keyCode]
}
function test(e:Event):void
{
MC 也就是那个影片剪辑的圆啦
if(key[KEY_A])
{
mc.x-=speed
}
if(key[KEY_D])
{
mc.x+=speed
}
if(key[KEY_W])
{
mc.y-=speed
}
if(key[KEY_S])
{
mc.y+=speed
}
}
18.海盗射击
转动鼠标控制手的方向,单机鼠标发射一个子弹
var loop:Timer=new Timer(30);
loop.addEventListener(TimerEvent.TIMER,armRotation);
loop.start();
function armRotation(e:TimerEvent)
{
//var hand:MovieClip=arm;
var radian=getRadian(arm.x,arm.y,this.mouseX,this.mouseY);
arm.rotation=radian*180/Math.PI;
trace(arm.x,arm.y);
trace(stage.mouseX,stage.mouseY);
}
//子弹的初始位置
var bulletx:Number=arm.x;
var bullety:Number=arm.y;
//子弹运动速度,相当图8.37中的AB长度
var speed:Number=5
stage.addEventListener(MouseEvent.CLICK,shoot)
function shoot(e:MouseEvent):void
{
//根据鼠标坐标和初始位置计算弧度,相当图8.35中的角BAC
var radian:Number=getRadian(bulletx,bullety,this.mouseX,this.mouseY)
//从库中创建子弹
var bullet:Bullet=new Bullet()
//初始化子弹位置
bullet.x=bulletx+Math.cos(radian)*arm.width;
bullet.y=bullety+Math.sin(radian)*arm.height;
//根据余弦函数计算子弹的x速度,相当于计算图8.35中的AC
bullet.spdx=Math.cos(radian)*speed
//根据正弦函数计算子弹的y速度,相当于计算图8.35中的BC
bullet.spdy=Math.sin(radian)*speed
//注册enterFrame事件
bullet.addEventListener(Event.ENTER_FRAME,bulletMove)
e.t
展开阅读全文