本页面由 Flash 保存计划 从 Internet Archive 存档还原 · 快照 2004-12-09 · 原址 http://bbs.flash8.net/blogs/clingingboy ← Flash 保存计划
atan2的使用方法 票数 良好 [4 out of 5]。
发现这个自己以前学的东西,觉的不错,转到现在的博客上面,免的忘记

1.
this.onMouseMove = function() { //鼠标移动时事件 xSpace = _parent._xmouse-this._x; //xSpace的值为主场景中鼠标的x坐标减去自身的x坐标 ySpace = _parent._ymouse-this._y; //ySpace的值为主场景中鼠标的y坐标减去自身的y坐标 this._rotation = Math.atan2(ySpace, xSpace)*180/Math.PI; //设置自身旋转_rotation };

这个是流浪儿的代码



2.眼睛

onMouseMove = function () { dx = _root._xmouse-this._x; dy = _root._ymouse-this._y; // 求得减掉的距离 angle = Math.atan2(dy, dx); // 求弧度 eye_mc._rotation = angle/Math.PI*180; eye_mc._rotation = angle/Math.PI*180; // 转成角度 };


这个就好看很多,大家应该见过效果了


点击下载

3.画线

先谢谢闪吧一位朋友,还有ST的教程,用zjs35的代码改造,可以按住SHIFT画直线
_root.createEmptyMovieClip("line", 1); with (line) { lineStyle(0, 0x000000, 100); //定义画笔 moveTo(0, 0); lineTo(100, 100); line._visible = 0; //隐藏 } _root.onMouseDown = function() { //鼠标按下时 qidian_x = _root._xmouse; //起点坐标 qidian_y = _root._ymouse; with (line) { _x = qidian_x; _y = qidian_y; _xscale = 0; _yscale = 0; _visible = 1; } }; _root.onMouseMove = function() { //鼠标移动时 endX = _root._xmouse; //终点坐标; endY = _root._ymouse; if (Key.isDown(Key.SHIFT)) { //按下SHIFT键时 dX = endX-qidian_x; dY = endY-qidian_y; angle = Math.atan2(dY, dX); my_rotation = angle/Math.PI*180; if (my_rotation<0) { my_rotation += 360; } //计算角度 trace(my_rotation); //按住SHIFT时的判断 if (my_rotation>22.5 && my_rotation<67.5) { _root.line._xscale = endX-qidian_x; _root.line._yscale = endX-qidian_x; } else if (my_rotation>67.5 && my_rotation<112.5) { _root.line._xscale = 0; _root.line._yscale = endY-qidian_y; } else if (my_rotation>112.5 && my_rotation<157.5) { _root.line._xscale = endX-qidian_x; _root.line._yscale = -(endX-qidian_x); } else if (my_rotation>157.5 && my_rotation<202.5) { _root.line._xscale = endX-qidian_x; _root.line._yscale = 0; } else if (my_rotation>202.5 && my_rotation<247.5) { _root.line._xscale = endX-qidian_x; _root.line._yscale = endX-qidian_x; } else if (my_rotation>247.5 && my_rotation<292.5) { _root.line._xscale = 0; _root.line._yscale = endY-qidian_y; } else if (my_rotation>292.5 && my_rotation<337.5) { _root.line._xscale = endX-qidian_x; _root.line._yscale = -(endX-qidian_x); } else if ((my_rotation>337.5 && my_rotation<360) || (my_rotation>0 && my_rotation<22.5)) { _root.line._xscale = endX-qidian_x; _root.line._yscale = 0; } } else { _root.line._xscale = endX-qidian_x; _root.line._yscale = endY-qidian_y; } }; _root.onMouseUp = function() { //鼠标松开松开事件 if (_root._xmouse-qidian_x != 0) { //判断鼠标是是否移动 i++; trace(i++); duplicateMovieClip(_root.line, "line"+i, i); eval("line"+i)._x = qidian_x; eval("line"+i)._y = qidian_y; _root.i = i; } _root.line._visible = 0; };


 点击下载

3.可以画多条
_root.createEmptyMovieClip("line", 1); with (line) { lineStyle(0, 0x000000, 100); //定义画笔 moveTo(0, 0); lineTo(100, 100); line._visible = 0; //隐藏 } _root.onMouseDown = function() { //鼠标按下时 qidian_x = _root._xmouse; //起点坐标 qidian_y = _root._ymouse; with (line) { _x = qidian_x; _y = qidian_y; _xscale = 0; _yscale = 0; _visible = 1; } }; _root.onMouseMove = function() { //鼠标移动时 endX = _root._xmouse; //终点坐标; endY = _root._ymouse; if (Key.isDown(Key.SHIFT)) { //按下SHIFT键时 dX = endX-qidian_x; dY = endY-qidian_y; angle = Math.atan2(dY, dX); my_rotation = angle/Math.PI*180; if (my_rotation<0) { my_rotation += 360; } //计算角度 trace(my_rotation); //按住SHIFT时的判断 if (my_rotation>22.5 && my_rotation<67.5) { _root.line._xscale = endX-qidian_x; _root.line._yscale = endX-qidian_x; } else if (my_rotation>67.5 && my_rotation<112.5) { _root.line._xscale = 0; _root.line._yscale = endY-qidian_y; } else if (my_rotation>112.5 && my_rotation<157.5) { _root.line._xscale = endX-qidian_x; _root.line._yscale = -(endX-qidian_x); } else if (my_rotation>157.5 && my_rotation<202.5) { _root.line._xscale = endX-qidian_x; _root.line._yscale = 0; } else if (my_rotation>202.5 && my_rotation<247.5) { _root.line._xscale = endX-qidian_x; _root.line._yscale = endX-qidian_x; } else if (my_rotation>247.5 && my_rotation<292.5) { _root.line._xscale = 0; _root.line._yscale = endY-qidian_y; } else if (my_rotation>292.5 && my_rotation<337.5) { _root.line._xscale = endX-qidian_x; _root.line._yscale = -(endX-qidian_x); } else if ((my_rotation>337.5 && my_rotation<360) || (my_rotation>0 && my_rotation<22.5)) { _root.line._xscale = endX-qidian_x; _root.line._yscale = 0; } } else { _root.line._xscale = endX-qidian_x; _root.line._yscale = endY-qidian_y; } }; i = 0; _root.onMouseUp = function() { //鼠标松开松开事件 if (_root._xmouse-qidian_x != 0) { //判断鼠标是是否移动 i++; trace(i++); duplicateMovieClip(_root.line, "line"+i, i); eval("line"+i)._x = qidian_x; eval("line"+i)._y = qidian_y; _root.i = i; } _root.line._visible = 0; }; clear_btn.onRelease = function() { myclear(); }; MovieClip.prototype.myclear = function() { for (j=0; j<=i; j++) { eval("line"+j).removeMovieClip(); } };

发布于 2006年1月26日 23:52   由 xzzhangg   有 0 篇评论
开发类似微软中国导航条的控件
uploads/200601/25_232128_snap1.jpg



比较好看吧.
根据书上例子自己写了一下,用VS2005写,特别方便 [lol] ,代码如下

 

using System; using System.ComponentModel; using System.Web.UI; using System.Web.UI.WebControls; using System.Drawing; namespace ClingingBoy { [DefaultProperty("text"), ToolboxData("<{0}:Cingmenu runat=server>")] /// /// cingmenu 的摘要说明 /// public class Cingmenu:WebControl { #region 定义变量 private string text = ""; private string href = ""; private string width = "20%"; private string height = ""; private string fontfamily = "宋体"; private string fontsize = "12px"; private string target = "_self"; private bool displayPipe = true; #endregion #region 构造函数 public Cingmenu():base(HtmlTextWriterTag.Div) { } #endregion #region 定义属性 [Description("该属性用于表示控件显示的文字内容"), Bindable(true), Category("Appearance"), DefaultValue("")] public string Text { get { return text; } set { text = value; } } [Description("该属性用于表示控件的链接地址"), Bindable(true), Category("Appearance"), DefaultValue("")] public string Href { get { return href; } set { href = value; } } [Description("该属性用于表示控件显示的文字大小"), Bindable(true), Category("Appearance"), DefaultValue("12px")] public string FontSize { get { return fontsize; } set { fontsize = value; } } [Description("该属性用于表示控件显示的文字字体类型"), Bindable(true), Category("Appearance"), DefaultValue("宋体")] public string FontFamily { get { return fontfamily; } set { fontfamily = value; } } [Description("该属性用于表示控件的链接的目标框架"), Bindable(true), Category("Appearance"), DefaultValue("宋体")] public string Target { get { return target; } set { target = value; } } [Description("该属性用于表示控件是否显示分隔符 | "), Bindable(true), Category("Appearance"), DefaultValue("true")] public bool DisplayPipe { get { return displayPipe; } set { displayPipe = value; } } #endregion protected override void AddAttributesToRender(HtmlTextWriter output) { //定义控件div的样式style="WHITE-SPACE: nowrap;BORDER-TOP: #999 1px solid;BACKGROUND: #f1f1f1; PADDING-BOTTOM: 2px; PADDING-TOP: 1px; BORDER-BOTTOM: #999 1px solid" output.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "#f1f1f1"); output.AddStyleAttribute("white-space", "nowrap"); output.AddStyleAttribute("BORDER-TOP", "#999 1px solid"); output.AddStyleAttribute("BORDER-BOTTOM", "#999 1px solid"); output.AddStyleAttribute("PADDING-BOTTOM", "2px"); output.AddStyleAttribute("PADDING-TOP", "2px"); output.AddStyleAttribute("WIDTH", width); output.AddStyleAttribute("HEIGHT", height); base.AddAttributesToRender(output); } /// /// 呈现控件的方法RenderContents /// protected override void RenderContents(HtmlTextWriter output) { //定义样式 output.AddStyleAttribute(HtmlTextWriterStyle.Width, "10px"); output.AddStyleAttribute(HtmlTextWriterStyle.FontSize, fontsize); output.AddStyleAttribute(HtmlTextWriterStyle.FontFamily, fontfamily); output.RenderBeginTag(HtmlTextWriterTag.Span); //定义样式 ////onmouseover="this.style.cssText='color:black;text-decoration:none;BORDER: #999 1px solid; DISPLAY: block; PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; PADDING-TOP: 2px;BACKGROUND: #ccc; '" //style="color:black;text-decoration:none;BORDER: #f1f1f1 1px solid;DISPLAY: block; PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px;PADDING-TOP: 2px;" href="http://localhost">文字内容 output.AddStyleAttribute(HtmlTextWriterStyle.Color, "black"); output.AddStyleAttribute(HtmlTextWriterStyle.TextDecoration, "none"); output.AddStyleAttribute("BORDER", "#f1f1f1 1px solid"); output.AddStyleAttribute("DISPLAY", "block"); output.AddStyleAttribute("PADDING-RIGHT", "6px"); output.AddStyleAttribute("PADDING-LEFT", "6px"); output.AddStyleAttribute("PADDING-BOTTOM", "2px"); output.AddStyleAttribute("PADDING-TOP", "2px"); output.AddAttribute("onmouseout", "this.style.cssText='color:black;text-decoration:none;BORDER: #f1f1f1 1px solid; DISPLAY: block; PADDING-RIGHT: 6px;PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; PADDING-TOP: 2px; '"); output.AddAttribute("onmouseover", "this.style.cssText='color:black;text-decoration:none;BORDER: #999 1px solid; DISPLAY: block; PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; PADDING-TOP: 2px;BACKGROUND: #ccc; '"); //定义属性Href,Target output.AddAttribute(HtmlTextWriterAttribute.Href, href); output.AddAttribute(HtmlTextWriterAttribute.Target, target); output.RenderBeginTag(HtmlTextWriterTag.A); output.Write(text); if (displayPipe) { output.AddStyleAttribute(HtmlTextWriterStyle.Color, "#a9a9a9"); output.AddStyleAttribute("FONT", "70%"); output.AddStyleAttribute(HtmlTextWriterStyle.FontSize, fontsize); output.AddStyleAttribute("PADDING-RIGHT", "3px"); output.AddStyleAttribute("PADDING-LEFT", "3px"); output.RenderBeginTag(HtmlTextWriterTag.Span); output.Write("|"); output.RenderEndTag(); } else { output.RenderBeginTag(HtmlTextWriterTag.Span); output.Write(" "); output.RenderEndTag(); } output.RenderEndTag(); output.RenderEndTag(); //定义分隔符及样式 //使用默认逻辑来呈现子控件 base.RenderContents(output); } } }

 

前台的

@ Page Language="C#" %> @ Register Assembly="CingMenu" Namespace="ClingingBoy" TagPrefix="cc2" %> DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>测试title> head> <body> <form id="form1" runat="server"> <DIV> <TABLE id="Table5" border="0" cellpadding="0" cellspacing="0" style="height: 2px"> <TR> <TD style="height: 26px"> <cc2:Cingmenu id="CustomControl1" DisplayPipe="true" runat="server" Target="_blank" Text="微软中国" Href="http://www.clingingboy.com">cc2:Cingmenu> TD> <TD style="height: 26px"> <cc2:Cingmenu id="Webcustomcontrol1" DisplayPipe="true" runat="server" Target="_blank" Text="微软中国" Href="http://www.clingingboy.com">cc2:Cingmenu> TD> <TD style="height: 26px"> <cc2:Cingmenu id="Webcustomcontrol2" DisplayPipe="true" runat="server" Target="_blank" Text="微软中国" Href="http://www.clingingboy.com">cc2:Cingmenu> TD> <TD style="height: 26px"> <cc2:Cingmenu id="Webcustomcontrol3" DisplayPipe="false" runat="server" Target="_blank" Text="微软中国" Href="http://www.clingingboy.com">cc2:Cingmenu> TD> TR> TABLE> DIV> form> body> html>
测试
发布于 2006年1月26日 23:10   由 xzzhangg   有 5 篇评论
Web服务器开发学习(2)
使用WebControl类呈现控件

因为WebControl类提供了很多服务器控件公共属性和方法,事件,如果从其继承的话就方面很多.
所以开发的时候一般由WebControls类派生
先了解一下其常用属性和方法

常用属性
Controls 获取 ControlCollection 对象,该对象表示 UI 层次结构中指定服务器控件的子控件。(从 Control 继承。)
ControlStyle 获取 Web 服务器控件的样式。此属性主要由控件开发人员使用。
ControlStyleCreated 获取一个值,该值指示是否已为 ControlStyle 属性创建了 Style 对象。此属性主要由控件开发人员使用。
Enabled 获取或设置一个值,该值指示是否启用 Web 服务器控件。

常用方法

AddAttributesToRender 将需要呈现的 HTML 属性和样式添加到指定的 HtmlTextWriterTag 中。
Render 已重写。 将控件呈现给指定的 HTML 编写器。
RenderContents 将控件的内容呈现到指定的编写器中。此方法主要由控件开发人员使用。
RenderBeginTag 将控件的 HTML 开始标记呈现到指定的编写器中
RenderEndTag 将控件的 HTML 结束标记呈现到指定的编写器中。
ApplyStyle 将指定样式的所有非空白元素复制到 Web 控件,改写控件的所有现有的样式元素。
MergeStyle 将指定样式的所有非空白元素复制到 Web 控件,但不改写该控件现有的任何样式元素。
CreateChildControls 由 ASP.NET 页面框架调用,以通知使用基于合成的实现的服务器控件创建它们包含的任何子控件,以便为回发或呈现做准备。 (从 Control 继承。)

WebControl类存在两个方法Render和RenderContents

Render 方法将 Web 控件发送到指定的 HtmlTextWriter 实例。重写此方法以将自定义服务器控件发送到客户端。

Render 方法首先调用 RenderBeginTag 方法,然后调用 RenderContents 方法,最后调用 RenderEndTag 方法来将控件发送到客户端。

用代码写就是
protected override void Render(HtmlTextWriter writer) { RenderBeginTag(writer); RenderContents(writer); RenderEndTag(writer); }

RenderBeginTag方法实现如下
public virtual void RenderBeginTag(HtmlTextWriter writer) { AddAttributesToRender(writer); HtmlTextWriterTag tagkey=TagKey; if(tagkey!=HtmlTextWriterTag.Unknown) { writer.RenderBeginTag(tagkey); } else { writer.RenderBeginTag(this.TagName); } }

RenderContents方法实现
protected override void RenderContents(HtmlTextWriter writer) { //使用默认逻辑来呈现控件,一定要调用基类方法 base.Render(writer); }

所以需重写RenderContent方法
发布于 2006年1月26日 17:14   由 xzzhangg   有 3 篇评论
Web服务器开发学习(1)
几天想学习下简单web服务器开发.被逼的,没办法,必须学习.提高自己

重要概念

1.控件呈现

控件呈现:是指向HTTP输出流中写入标记文本的过程.服务器通过HTTP输出流向客户端发送生成的标记文本,这些文本将会通过客户端浏览器转化为可视化的元素显示出来.

在asp.net中使用Render方法来实现.

学习前,必须要理解HtmlTextWriter 类

概述:将标记字符和文本写入到 ASP.NET 服务器控件输出流。此类提供 ASP.NET 服务器控件在向客户端呈现标记时所使用的格式设置功能。

该类位于System.Web.UI命名空间下

(1)了解其常用方法

AddAttribute(HtmlTextWriterAttribute, String) 向开始标记添加属性(如<img src=...>,img为标记开头,src为属性)
AddStyleAttribute(HtmlTextWriterStyle, String) 添加样式属性(添加css样式格式的属性)
Write(String) 输出为HTML文本流(可理解为输出为字符串,不呈现为HTML格式)
WriteAttribute(String, String) 将指定的标记属性和值写入到输出流如设置img的alt属性
writer.WriteAttribute("alt", "AtlValue");
WriteBeginTag(string tagName) 将任何制表符间距和指定标记元素的开始标记写入到输出流。(如<img src >开头的img标记)
WriteEndTag 写入指定的标记元素的任何制表符间距和结束标记(结束标记)
RenderBeginTag(HtmlTextWriterTag) 将标记元素的开始标记写入到输出流。
RenderEndTag 将标记元素的结束标记写入到输出流。

(2)了解三种枚举类型

一,HtmlTextWriterTag 枚举 该枚举包含了大部分的HTML开头标记(如HtmlTextWriterTag.Img)

二,HtmlTextWriterAttribute 枚举 指定 HTML 属性(如HtmlTextWriterAttribute.Border)

三,HtmlTextWriterStyle 枚举 指定输出流的 HTML 样式(如HtmlTextWriterStyle.Color)

2.使用Control类的呈现方法

System.Web.UI.Control是创建服务器控件的基类

该类有三个方法

Render 将服务器控件内容发送到提供的 HtmlTextWriter 对象,此对象编写将在客户端呈现的内容。
RenderChildren 将服务器控件子级的内容输出到提供的 HtmlTextWriter 对象,此对象编写将在客户端呈现的内容。
RenderControl 已重载。 输出服务器控件内容,并存储有关此控件的跟踪信息(如果已启用跟踪)。

了解三者的关系
 1//RenderControl方法的基本实现
 2 public void RenderControl(HtmlTextWriter writer)
 3 {
 4 if(Visible)
 5 {
 6 Render(writer);
 7 }

 8 }

 9 //Render方法基本实现
10 protected virtual void Render(HtmlTextWriter writer)
11 {
12 RenderChildren(writer);
13 }

14 //RenderChildren方式基本实现
15 protected virtual void RenderChildren(HtmlTextWriter writer)
16 {
17 foreach (Control c in Controls)
18 {
19 c.RenderControl(writer);
20 }

21 }

先将实例对象传递给RenderControl方法

RenderControl方法先检测其Visible然后判断是发否调用Render()方法,Render()方法执行默认实现调用RenderChildren方法.RenderChildRen默认实现调用每个子控件的RenderControl方法. 其是一个递归调用的过程

其中最常用为Render方法.

示例一.
重写Render方法的例子
 1using System;
 2using System.Web.UI;
 3/// <summary>
 4/// link 的摘要说明
 5/// </summary>

 6namespace ClingingBoy
 7{
 8 public class link:Control
 9 {
10 protected override void Render(HtmlTextWriter writer)
11 {
12 writer.Write("<a href='http://www.clingingboy.com'>ClingingBoy</a>");
13 }

14 }

15}

16

aspx要求

先注册控件
<%@ Register TagPrefix="aspSample" Namespace="ClingingBoy"%>

然后在body里呈现
<aspSample:link ID="test" runat=server></aspSample:link>

测试

示例二.使用HtmlTextWriter的多种方法来实现
 1using System;
 2using System.Web;
 3using System.ComponentModel;
 4using System.Web.UI;
 5namespace ClingingBoy
 6{
 7 /// <summary>
 8 /// LinkTwo 的摘要说明
 9 /// </summary>

10 public class LinkTwo : Control
11 {
12 protected override void Render(HtmlTextWriter writer)
13 {
14 writer.AddAttribute(HtmlTextWriterAttribute.Href, "http://www.clingingboy.com");
15 writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "blue");
16 writer.RenderBeginTag(HtmlTextWriterTag.A);
17 writer.Write("ClingingBoy");
18 writer.RenderEndTag();
19 }

20 }

21}

测试

注意点:在呈现控件的过程中,需要先定义服务器的属性和CSS样式等,然后再定义服务器空间的主体内容,位置不能改变.

大家可以打开源代码查看
发布于 2006年1月25日 20:28   由 xzzhangg   有 3 篇评论
flash编程常用技巧
1.如何全屏播放
fscommand("fullscreen", true);

2.如何屏蔽鼠标右键,注意第一种方法在flash调试的时候无效
(1)
fscommand("showmenu", false);

(2)
Stage.showMenu = false;


(3)

运用ContextMenu类的hideBuiltInItems方法.它可以设定屏蔽右键的同时,还允许设置,显示右键菜单的其中几个内置菜单.如下

var mymenu:ContextMenu = new ContextMenu(); mymenu.hideBuiltInItems(); mymenu.builtInItems.print = true; this.menu = mymenu;

 


3.自定义右键菜单

//定义鼠标右键对象 var myContextMenu:ContextMenu = new ContextMenu(); //隐藏右键内置选项 myContextMenu.hideBuiltInItems(); //创建一个自定义选项 clingingboy = new ContextMenuItem("关于Clingingboy", boy); //添加自定义选项 myContextMenu.customItems.push(clingingboy); //定义自定义选项函数事件 function boy() { getURL("http://www.clingingboy.com", "_blank"); } //指定ContextMenu与主场景关联 _root.menu = myContextMenu;

4.声明变量和对象类型的技巧

(1)使用var关键字,然后指定类型,这是比较严格的

//声明变量类型 var i:Number = 0; //声明对象类型 var mydate:Date;


(2)使用脚本编译器可以识别的名称

如把MC的实例名称取名为test_mc,动态文本实例名称取名为test_txt,这样的取名的好处在编译器里会出现代码提示

5.动态文本变量使用技巧

有时候需要把一个动态文本放在MC里面,比如放在test_mc里面,动态文本变量取名为test_txt,那么给在主场景上给变量赋值就是test_mc.test_txt=".....",这样比较麻烦,而且有时候需要把变量名跟别的变量同步,可以把这样设置变量,_root.test_txt,给变量赋值就不需要加MC了,可以直接赋值.而且允许多个动态文本使用同一个变量名称.主要是弄清楚级别的关系

6.层次的关系

_root 表示根,主场景的意思,比如主场景有个test_mc,给MC编写代码的时候可以写成_root.test_mc._x=100效果跟test_mc._x=100是一样的

_parent 对父级对象的引用,比如主场景有个test1_mc和test2_mc,进入test2_mc,在第一帧写_parent.test1_mc._x=100效果跟在主场景上写test1_mc._x=100是一样的.

this 引用对象或影片剪辑实例

7.编写按钮事件的方法(影片剪辑同理)

(1)在按钮的帧上写(不推荐)
on (release) { trace("test"); }

 


(2)写在主场景的第一帧上.都写在第一帧的话,以后找代码也方便.

test_btn.onRelease = function() { trace("test"); };

8.循环调用事件处理函数(根据帧频),通俗点的意思就是不停的做某件事情.
test_mc.onEnterFrame = function() { this._x += 5; }; /* onEnterFrame=function() { test_mc._x+=5 } */

9.使循环调用事件处理函更加的流畅((可不根据帧频)

(1)使用setInterval()函数

(2)使用updateAfterEvent 函数

10.使用注释语句

注释单行"//"
注释多行"/*....*/"

11.载入外部文件

loadMovie("xxx.jpg",test_mc) loadMovieNum("xxx.jpg",10)


第一种载入到MC中,主要控制MC属性
第二种注意控制深度

12.控制载入文件的属性

如果MC为空MC的话,只能控制其_x,_y,_alpha等属性,而不能控制其_width等属性,所以需要设置_width等属性,可以在MC里面画一个矩形,就是说,必须不能为空MC,而且最好不得在场景上手动控制MC属性,不然会没有效果.

一般MC默认的注册点为左上角,如不需要注册点的设置的话,可以直接载入MC中
//载入到影片剪辑中
loadMovie("http://www.clingingboy.com/uploads/200601/17_233507_snap1.jpg", test_mc); test_mc._x = 0; test_mc._y = 0; test_mc._alpha = 50;

有时候需要控制注册点,如控制test_mc很难控制,有一个技巧,就是在test_mc里创建一个MC,将外部文件载入到test_mc内部的MC里去.这样就和容易的控制注册点了.因为这个有时候比较重要,特别是定位.很多因为主册点的原因.有兴趣的可以下载过去测试

点击下载

13.简单的动态创建MC和文本
_root.createEmptyMovieClip("test_mc", 1); _root.createTextField("my_txt", 2, 100, 100, 100, 100);

14.交换深度
myMC1_mc.onRelease = function() { this.swapDepths(myMC2_mc); }; myMC2_mc.onRelease = function() { this.swapDepths(myMC1_mc); };

15.使用for语句完成重复事件,这个很好用,不管是不是在AS编程里

(1)
test_mc._visible = 0; for (i=0; i<6; i++) { duplicateMovieClip("test_mc", "test_mc"+i, i); this["test_mc"+i]._x = 100*i+50; }

(2)或者在场景上把按钮命名为my_btn1,my_btn2....
for (i=0; i<6; i++) { this["my_btn"+i].onRelease = function() { trace("你点击了第"+i+"个按钮"); }; }

 


16.控制对象属性的方法(比较老的不算)

(1)最简单的是直接使用点语法

test_mc._x=0
(2)使用with语句
with (test_mc) { _x = 0; } }

(3)使用中括号
this["test_mc"]._x = 400;

(4)使用eval函数
test_mc._visible = 0; for (i=0; i<6; i++) { duplicateMovieClip("test_mc", "test_mc"+i, i); test = eval("test_mc"+i); test._x = 100*i+50; }
17.熟悉脚本编译器语法检查,自动套用格式,显示代码提示,有事没事就多点点这三个按钮

uploads/200601/18_135055_snap1.jpg


暂时想到这些,以后陆续补充

18.给flash加物理效果

(1)不需要你知道什么知识,直接套用Tween类,其他效果可以去看专门讲解它的文章
test_mc.onRollOver = function() { new mx.transitions.Tween(this, "_xscale", mx.transitions.easing.Elastic.easeOut, this._xscale, 180, 30); new mx.transitions.Tween(this, "_yscale", mx.transitions.easing.Elastic.easeOut, this._yscale, 180, 30); }; test_mc.onRollOut = function() { new mx.transitions.Tween(this, "_xscale", mx.transitions.easing.Elastic.easeOut, this._xscale, 100, 30); new mx.transitions.Tween(this, "_yscale", mx.transitions.easing.Elastic.easeOut, this._yscale, 100, 30); };
 


(2)物理知识的简单运用

一,匀速运动
test_mc.onEnterFrame = function() { test_mc._x += 5; if (test_mc._x>400) { test_mc._x = 0; } };



二.加速运动
i = 0.5; speed = 0; test_mc.onEnterFrame = function() { speed += i; test_mc._x += speed; if (test_mc._x>400) { test_mc._x = 0; } if (speed>50) { speed = 0; } };



三.简谐运动
test_mc._x = 100; speed = 0; test_mc.onEnterFrame = function() { speed += (200-test_mc._x)*.05; test_mc._x += speed; };


四.摩差运动的缓冲
test_mc.onEnterFrame = function() { test_mc._x += (300-test_mc._x)*.08; };



五.阻尼运动
xr = 100; dir = 1; ang = 0; damp = 1; test_mc._x = 0; test_mc.onEnterFrame = function() { test_mc._x += Math.sin(ang)*xr*dir*damp; damp *= 0.95; ang += 0.5; };


暂时想到这些,以后陆续补充 ,好象又想起什么了,先休息下.写累了
发布于 2006年1月18日 12:45   由 xzzhangg   有 4 篇评论
简单的定制控件
以前天真的认为自定义控件就是那种ascx文件的那种自定义控件.现在我彻底的悔悟了.定制控件才是真的难.才叫真的属于自己的控件呀.

记录一下.今天看了什么东西.我对自己的要求是每天学到新的东西.感觉差不多了就看了.因为需要一个消化过程.

根据所学做一个简单的东西.如果有朋友看到我在讲什么的话,可以跟着做做.

首先你得了解基础的c#语言..跟AS差不多的其实

1.打开VS2003,新建一个类库,输入的名称就是你的命名空间了

uploads/200601/17_233507_snap1.jpg


2.添加引用
因为要用到System.Web.UI命名空间,所以需要引用System.Web类
uploads/200601/17_233906_snap2.jpg

3.
然后编写一个简单类文件,该类继承System.Web.UI.Control类,然后重写了Render方法,看到什么不懂的话,就把鼠标移到代码上去,反正有提示的.
using System; using System.Web.UI; using System.ComponentModel; namespace ClingingBoy { public class WebCustomControl1:System.Web.UI.Control { protected override void Render(HtmlTextWriter output) { output.Write("<a href='http://www.sina.com.cn' style='color:red'>新浪网</a>"); } } }

4.生成DLL组件,无须再在编译器里输代码来编译
uploads/200601/17_234154_snap3.jpg


5.再新建一个项目
uploads/200601/17_234310_snap6.jpg


6.不写代码添加组件,点击添加
uploads/200601/17_234441_snap7.jpg

浏览添加刚才生成的DLL文件
uploads/200601/17_234644_snap8.jpg


7.在aspx文件上,直接把生成的组件像拖控件一样的拖到页面上就可以用了
uploads/200601/17_234819_snap9.jpg


这样就完成了,大家可以测试一下.这个是最简单的.明天学了再写.今天晚了先睡觉了 [lol]
发布于 2006年1月17日 23:49   由 xzzhangg   有 1 篇评论
在 Visual Web Developer 不使用DLL文件实现代码共享
在 Visual Web Developer 有一个文件夹用来放类,以前需要把类先编译成DLL文件,然后才可以引用,现在只要把这个类文件放这这个文件夹里就可以实现代码共享了.很好用.

1.右建新建一个文件夹

uploads/200601/16_150834_snap1.jpg

2.写一个类放文件夹里面
using System; public class SampleClass1 { public SampleClass1() { } private string testStringValue; public string testString { get { return testStringValue; } set { testStringValue = value; } } }

3.新加一个aspx文件用来测试
protected void Button1_Click(object sender, EventArgs e) { SampleClass1 a = new SampleClass1(); a.testString=TextBox1.Text; Label1.Text = a.testString; }

成功.

uploads/200601/16_151114_snap2.jpg


发布于 2006年1月16日 15:28   由 xzzhangg   有 3 篇评论
DataGrid常用的使用技巧
根据微软的教程再学一下 1.日期的显示 2.传递DataGrid中的值 3.在DataGrid里添加确认删除的对话框 4.格式化DataGrid :将数据原中的0,1值转换成实际的文字 5.在DataGrid中选择,确认,删除多行复选框列表 6.利用dropdownlist下拉列表框,显示数据库表中的某个字段 7.取得Datagrid里的checkbox返回值 8.datagrid中加入统计值 9.如何用程序隐藏和显示DataGrid中的一列 10如何控制datagrid里编辑功能出现的TextBox的宽度?
发布于 2006年1月15日 9:34   由 xzzhangg   有 2 篇评论
做个右定义菜单当版权用

在flash里点右键来定义自定义选项是一件很有趣的事情,自己也复习一下,以后大家可以用这个来给自己的作品加个版权

//定义鼠标右键对象 var myContextMenu:ContextMenu = new ContextMenu(); //隐藏右键内置选项 myContextMenu.hideBuiltInItems(); //创建一个自定义选项 clingingboy = new ContextMenuItem("关于Clingingboy", boy); //添加自定义选项 myContextMenu.customItems.push(clingingboy); //定义自定义选项函数事件 function boy() { getURL("http://www.clingingboy.com", "_blank"); } //指定ContextMenu与主场景关联 _root.menu = myContextMenu;
最后的menu属性可以加在影片剪辑和按钮等上面,只不过这样是最常用的.ContextMenu当然还有其他用法,但不常用.这样就已经够用了
发布于 2006年1月11日 8:58   由 xzzhangg   有 0 篇评论
欢迎交换友情链接

如题,愿意的朋友下面跟贴

发布于 2006年1月11日 8:52   由 xzzhangg   有 1 篇评论
在ASP.net中调用存储过程

先创建一个存储过程

CREATE PROCEDURE userlist AS
SELECT * FROM Users

使用SqlDataAdapter时,调用存储过程

string strconn= ConfigurationSettings.AppSettings["conn"]; //连接本地计算机的MMS数据库 SqlConnection cn= new SqlConnection (strconn); //创建SqlDataAdapter对象,调用存储过程 SqlDataAdapter da=new SqlDataAdapter ("userlist",cn); //创建并填充DataSet DataSet ds=new DataSet(); da.Fill (ds); DataGrid1.DataSource =ds; DataGrid1.DataBind();

在使用SqlCommand对象时,需要设置
CommandType属性为CommandType.StoredProcedure;表示调用存储过程,存储过程在第一次执行时进行语法检查和编译,编译好的版本保证在高速缓存中供后续使用,可以提高性能和数据安全性

 

发现关件字代码显亮,如果可以折叠就更加不错了.

发布于 2006年1月10日 15:31   由 xzzhangg   有 0 篇评论
博客开通
  终于申请到博客了,看看闪吧的blog是什么样的.挺喜欢这个博客系统的,不错好象不能修改模板,虽然很漂亮,闪吧这次全换成asp.net的页面,相信速度上会有所提高.闪吧努力
发布于 2006年1月10日 12:03   由 xzzhangg   有 0 篇评论
  总页数 1 第 1 页 [共有 12 条记录]