AS3学习之路(6) 简单动画(3 位领导批示)

通过定时器或enterFrame来实现对像的改变和时间联系起来以实现动画.

两个公式需要记忆一下:

(1) 计算弧度 radians = angle * Math.PI / 180
(2) 计算度数 angle = radians * 180 / Math.PI

全文阅读 »

AS3学习之路(5) 拖动对象(0 位领导批示)

一个拖动对象的例子..重点学习的是: startDrag, stopDrag, dropTarget, setChildIndex 等方法的使用

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package
{
	import flash.display.Sprite;
	import flash.display.DisplayObject;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.filters.DropShadowFilter;
 
	public class ClassDrag extends Sprite
	{
		private var _red:Sprite;
		private var _blue:Sprite;
		private var _green:Sprite;
		private var _white:Sprite;
 
		// 被拖动对象原始坐标
		private var _startingLocation:Point;
 
		// 构造函数
		public function ClassDrag()
		{
			init();
		}
 
		// 初始化
		private function init():void
		{
			_red = new Sprite();
			createRectangle(_red, 0xff0000, 10, 10, 20, 20);
			_blue = new Sprite();
			createRectangle(_blue, 0x0000ff, 10, 35, 20, 20);
			_green = new Sprite();
			createRectangle(_green, 0x00cc00, 10, 60, 20, 20);
			_white = new Sprite();
			createRectangle(_white, 0xf0f0f0, 40, 10, 300, 300, false);
		}
 
		// 创建矩型
		private function createRectangle(rectangle:Sprite, color:uint, x:uint, y:uint, width:uint, height:uint, drag:Boolean = true):void
		{
			rectangle.graphics.beginFill(color);
			rectangle.graphics.drawRect(x, y, width, height);
			rectangle.graphics.endFill();
			addChild(rectangle);
 
			if(drag)
			{
				// 侦听事件
				rectangle.addEventListener(MouseEvent.MOUSE_DOWN, pickup);
				rectangle.addEventListener(MouseEvent.MOUSE_UP, place);
			}
		}
 
		// 拖动
		private function pickup(event:MouseEvent):void
		{
			// 保存原始坐标
			_startingLocation = new Point();
			_startingLocation.x = event.target.x;
			_startingLocation.y = event.target.y;
 
			// 开始拖动
			event.target.startDrag();
			// 加上阴影
			event.target.filters = [new DropShadowFilter()];
			// 拖动对象最前显示
			setChildIndex(DisplayObject(event.target), numChildren - 1);
		}
 
		// 拖动结束
		private function place(event:MouseEvent):void
		{
			// 拖动结束
			event.target.stopDrag();
			// 清除阴影
			event.target.filters = null;
 
			// 检测是否已经移动到目标区域
			if(event.target.dropTarget == _white)
			{
				var color:uint;
				switch(event.target)
				{
					case _red: color = 0xff0000; break;
					case _blue: color = 0x0000ff; break;
					case _green: color = 0x00cc00; break;
				}
 
				// 重新创建目标区域
				_white.graphics.clear();
				createRectangle(_white, color, 40, 10, 300, 300, false);
			}
 
			// 拖放对象回到原位
			event.target.x = _startingLocation.x;
			event.target.y = _startingLocation.y;
		}
	}
}
Tags : , ,

AS3学习之路(4) 绘图板示例(0 位领导批示)

很简单的小例子..主要需要掌握的是绘制图形的 drawRect, lineStyle, moveTo, lineTo等方法..鼠标事件侦听的重要性就不再复述.

p.s. cookbook的确是很好的入门书籍.全是实例.^_^

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
	public class ClassGraphics extends Sprite
	{
		private var mySprite:Sprite;
 
		// 构造函数
		public function ClassGraphics()
		{
			this.mySprite = new Sprite();
			addChild(this.mySprite);
			this.mySprite.graphics.beginFill(0x336699);
			this.mySprite.graphics.drawRect(0, 0, 550, 400);
			this.mySprite.graphics.endFill();
			this.mySprite.addEventListener(MouseEvent.MOUSE_DOWN, spriteMouseDown);
			this.mySprite.addEventListener(MouseEvent.MOUSE_UP, spriteMouseUp);
		}
 
		// 鼠标按下事件
		private function spriteMouseDown(event:MouseEvent):void
		{
			this.mySprite.graphics.lineStyle(1, 0, 1);
			this.mySprite.graphics.moveTo(mouseX, mouseY);
			this.mySprite.addEventListener(MouseEvent.MOUSE_MOVE, spriteMouseMove);
		}
 
		// 鼠标离开事件
		private function spriteMouseUp(event:MouseEvent):void
		{
			this.mySprite.removeEventListener(MouseEvent.MOUSE_MOVE, spriteMouseMove);
		}
 
		// 移动事件
		private function  spriteMouseMove(event:MouseEvent):void
		{
			this.mySprite.graphics.lineTo(mouseX, mouseY);
		}
	}
}

源文件下载

Tags : , ,

AS3学习之路(3) 使用组件(0 位领导批示)

打算写一个AS3+PHP+MySQL的留言本.(当初学习PHP第一个练习也是留言本-_,-+), 完成部分..使用了Flash CS3 的内置组件: TextInput, TextArea, Label 及 Button

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.display.StageScaleMode;
	import flash.display.StageAlign;
	import fl.controls.Label;
	import fl.controls.TextInput;
	import fl.controls.TextArea;
	import fl.controls.Button;
 
	public class ClassMain extends Sprite
	{
		private var userName:TextInput;
		private var userNameLabel:Label;
		private var message:TextArea;
		private var messageLabel:Label;
		private var button:Button;
 
		// 构造函数
		public function ClassMain()
		{
			stage.scaleMode = "noScale";
			stage.align = StageAlign.TOP_LEFT;
 
			this.initMc();
		}
 
		// 一点准备工作
		private function initMc():void
		{
			this.userName = new TextInput();
			addInput(this.userName, "userName", 50, 10, 200, 18);
 
			this.userNameLabel = new Label();
			addLabel(this.userNameLabel, "呢称:", 10, 10, 40, 18);
 
			this.message = new TextArea();
			addTextArea(this.message, "message", 50, 40, 400, 100);
 
			this.messageLabel = new Label();
			addLabel(this.messageLabel, "留言:", 10, 40, 40, 18);
 
			this.button = new Button();
			addButton(this.button, "提交", 350, 150);
		}
 
		// 创建Label
		private function addLabel(label:Label, text:String, x:uint, y:uint, width:uint, height:uint):void
		{
			label.text = text;
			label.move(x, y);
			label.setSize(width, height);
			addChild(label);
		}
 
		// 创建文本框
		private function addInput(input:TextInput, name:String, x:uint, y:uint, width:uint, height:uint):void
		{
			input.name = name;
			input.move(x, y);
			input.setSize(width, height);
			addChild(input);
		}
 
		// 创建文本域
		private function addTextArea(textArea:TextArea, name:String, x:uint, y:uint, width:uint, height:uint):void
		{
			textArea.name = name;
			textArea.move(x, y);
			textArea.setSize(width, height);
			textArea.condenseWhite = true; 
			addChild(textArea);
		}
 
		// 创建按钮
		private function addButton(button:Button, value:String, x:uint, y:uint):void
		{
			button.label= value;
			button.move(x, y);
			addChild(button);
		}
	}
 
}

未完成之前..源码还是不放出了..

Tags : , ,

AS3学习之路(1) 一个简单的实例, 打字效果(0 位领导批示)

最近开始学习AS. 在日志上胡乱记录几个实例..以备回顾..

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package
{
	import flash.display.MovieClip;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFieldAutoSize;
	import flash.events.*;
	import flash.utils.Timer;
 
	public class ClassTyped extends MovieClip
	{
		var txt:TextField = new TextField();
		var txtF:TextFormat = new TextFormat();
		var cont:String = new String();
		var i:uint = 0;
 
		// 构造函数
		public function ClassTyped()
		{
			cont = "打字效果测试. By Silver...........";
			txtF.font = "微软雅黑";
			txtF.size = 14;
			txtF.color = 0x669900;
			txt.defaultTextFormat = txtF;
 
			var timer:Timer = new Timer(120, cont.length);
			timer.addEventListener(TimerEvent.TIMER, timerHandler);
			timer.start();
		}
 
		private function timerHandler(event):void
		{
			txt.selectable = false;
			txt.appendText(cont.charAt(i));
			txt.autoSize = TextFieldAutoSize.LEFT;
			txt.wordWrap = true;
			txt.width = 200;
			addChild(txt);
			txt.x = (txt.stage.stageWidth - txt.width) / 2;
			txt.y = (txt.stage.stageHeight - txt.height) / 2;
			i++;
		}
	}
}

源文件下载

Perl学习之字符串和排序(0 位领导批示)

Perl被设计成90%擅长处理文本,10%处理其余的问题。因此Perl有强大的文本处理能力,包括正则表达式。但有时正则表达式过于复杂,需要一种更简单的方法来处理字符串。

一、使用索引寻找子串

查找的方法依赖于查找的地方。如果在一个大字符串中查找,可以使用index函数。

Perl查找子串第一次在大字符串中出现的地方,返回第一个字符的位置。字符位置是从0开始编号的。如果子串在字符串的开头处找到,则index返回0。如果一个字符后,则返回1,依次类推。如果子串不存在,则返回-1。

1
2
3
my $text = "hello world!";
my $where = index($text, "wor");
print $where;#本例输出6

index函数总是报告子串出现的第一个位置。可以使用可选的第三个参数要求它从后面的某个地方开始查询,它会告诉index从什么位置开始。

NOTE:通常不能重复的查找某个子串,除非使用了循环。

如果想知道某个子串最后出现的位置。可以使用rindex 函数来做到。

1
2
3
my $text = "hello world!";
my $where = rindex($text, "l");
print $where;#本例输出9

rindex函数也有可选的第三个参数,它给出的是可能的最大值。

全文阅读 »

Perl学习之目录操作(0 位领导批示)

一、在目录树上移动

程序在某个工作目录(working directory)下运行,这是相对路径的起点。

chdir可以改变工作目录。它和Unix shell,Win command下的cd命令类似。


chdir "/test" or die "打开目录出错:$!";

错误发生时将给变量$!赋值。通常应当检查$!的值,因为它将告诉你chdir失败的原因。

工作目录会被Perl启动后的所有进程所继承。但是对于调用Perl的进程的工作目录将不会改变,因此,不能写一个Perl程序来代替shell下的cd命令。

二、Globbing

通常,shell将每个命令行中的任何的文件名模式转换成它所匹配的文件名。这被称作globbing。例如,在echo命令后使用了文件名模式*.pm,shell会将它转换成它所匹配的文件名。


my @all_files = glob "*";
foreach $v (@all_files)
{
	print $v."\n";
}

@all_files得到了当前目录下的所有文件,这些文件按照字母排序的,不包括由点(.)开头的文件。


my @all_files = glob ".* *";
foreach $v (@all_files)
{
	print $v."\n";
}

这里,我们包括了额外的 点星号(.*) 参数,来得到所有的文件(由点开头的文件,以及不由点开头的文件)。引号中两个项之间的空隔是必须的。

全文阅读 »

Perl学习之文件检验(0 位领导批示)

一、文件检测操作

如果程序会建立新的文件,在程序创建新文件之前,我们应先确定是否存在同名的文件,以免重要数据被覆盖掉。对于这种问题,我们可以使用–e选项,检测是否存在相同名字的文件。

例:


$filename = 'phper7.rar';
die "$filename 已经存在.\n"
if -e $filename;

检测文件的选项是由连接线(-)和一个字母组成,字母指测试的类型,后接被测试的文件名或文件句柄。大多数选项返回true/false值,但有少数例外。

(1)-r, -w, -x以及-o检测相应的属性对effective user 或group ID是否为真,它是指实际负责运行此程序的用户。

(2)Unix文件系统包括几种类型,分别可有-f, -d, -l, -S, -p, -b, 以及-c检测,任何一种必属于其中之一。

(3)时间检测,-M, -A, -C(均大写),返回系统最后一次修改,访问,以及索引节点被修改到现在的天数。

(4)-T和-B分别检测一个文件是文本的还是二进制的。

(5)当给定的文件句柄是一个TTY(系统函数isatty()的返回结果,不能对文件名使用这个测试)时,-t文件检测项返回true。

全文阅读 »

Perl学习之结构控制(流程控制)(0 位领导批示)

一、if else 控制结构

一旦能比较两个值时,就希望能根据这些比较结果作判断。和别的语言类似,Perl中也提供了if控制结构。
如果需要另一种选择,可以使用关键字else。

NOTE:花括号是必须的(这一点和C,php不同)。

二、while 控制结构

while 语句可以循环执行其内部的一块代码直到其条件非真。

条件中真假值的判断和if结构中是一样的。和if控制结构相同,花括号是必须的。判断条件在迭代前执行,如果条件为假,则一次也不执行。

三、foreach 控制结构

foreach 从列表(数组)的第一个元素一直循环执行到最后一个元素,一次迭代一个。


foreach $list (qw/一 二 三/)
{
	print "$list\n";
}

foreach 控制变量每一次迭代从列表中取出一个新值。

全文阅读 »

Perl学习之使用正则表达式处理文件(0 位领导批示)

可以通过正则表达式来改变文本。到目前为止,只介绍过怎么匹配模式。现在,我们将向你演示怎样通过模式来改变字符串中相应地部分。

一、使用s///进行替换

如果将 m// 这个模式匹配看作同文字处理器的 查询(search) 类似的功能,那Perl中 s/// 操作的则类似于 查询并替换(search and replace) 。它将替换变量中模式所匹配上的部分。


$_ ="我喜欢打球";
s/很喜欢/不喜欢/; #很喜欢被不喜欢替换掉
print "$_\n";

如果没有匹配上,则什么也不会发生,此变量也不会有任何更改。

s///会返回一个Boolean 值。如果成功替换则返回true;否则返回false。

1.使用 /g 进行全局替换

在前面的例子中你可能已经注意到,s///值进行一次替换,无论是否还有地方还能匹配上。当然,这只是默认的行为。修饰符 /g 要求s///将不相重叠的所有匹配上的部分都进行替换。


$_ = "哇,好大的棉花糖哇!";
s/哇/哟/g;
print "$_";

全局替换的一个常用地方是将多个空格用单个空格替换掉。

2.不同的分隔符

如同m//和qw//一样,我们也可以改变s///的分隔符。但这里使用了3个分隔符,因此有些不同。
通常的(非配对的)字符,由于没有左字符和右字符的区别,则可以像使用正斜线(/)那样使用。

如果使用的是配对的字符,也就是说其左字符和右字符不的,则必需使用两对:一对存放模式,一对存放替换的字符串。分隔符甚至可以是不同的。

全文阅读 »

随机显示的10篇日志

评论最多的10篇日志

浏览最多的10篇日志