FlashMX+ASP+Access数据库操作之初步应用

2007年12月19日 由 Sken 没有评论 »

大家经过前面的学习(如果前面的内容,大家已经能完全掌所至的话),各位应该能够完成相当的大部分功能了,在此卷中将向大家演示如何制作一个多用户留言板,其功能如下:
[1]多用户支持(允许通过指定的网址直接进入指定用户的留言板)
[2]悄悄话功能支持(仅留言板主人可以看)
[3]留言删除功能(仅留方板主人可以删)
[4]新留言提示
[5]留言的分页显示(每页12个)
[6]用户密码的标准MD5加密(不过不支持中文)
[7]根据操作系统的不同,自动设置字体和字号(不过很不幸,我在调试时注释掉了两行代码,后来忘了还原,所以这条功能在演示中无效,各位拿到源码者请去掉注释标记就可以了)
[8]留言者IP,操作系统,浏览器,来源信息登记
[9]非法下载以及盗版的处理
……

由于本卷源码较长,所以不在本教程中一一列出,本卷仅向大家讲述以上功能的实现方法,以及关键技术和实例代码

首先我们来说怎样实现多用户的支持,关于多用户的支持嘛,没什么很特别的技术,写过论坛或者多用户ASP留言板的人都了解,只是有一点要说一下的,我们都知道一般来说多用户留言板的直接指定用户的方法是由ASP文件的GET参数实现的,如: “这一段,然后在SWF文件名后面加上?user=用户名,这样的话,SWF在启动时会在_root下创建这个变量,然后我们的SWF就可以明确的知道现在需要切换至谁的留言板。

接下来说关于悄悄话的实现,这个就不用多说了,在FLASH中搞一个变量来保存当前用户是否输入了有效的密码,如果是的话就允许他看所有的留言,如果不是的话就弹个消息框来让提示不允许看

接着我们来说留言删除的实现,这个很容易,向ASP发出密码,用户和当前留言的主键,然后剩下的事情全交给ASP去做吧,当然,删除之前得看看用户名和密码是否用效,不然的话,任何人都可以删留言,那可大大的不妙了~“`

新留言提示的实现,这个也很容易,在数据库中加一个字段来识别这个留言是否被点开过了就行了

留言的分页显示,这个嘛,稍稍要麻烦一点,不过,我们在前一卷,也就是第5卷的源码中已经演示了如何实现分页的问题,所以这一点也不用多说了

用户密码的MD5加密功能的实现,这个我以前也讲过了,我还在CSDN上发布过了FLASH版的MD5函数,大家请到FAQ或者精华区中找

根据操作系统的不同,自动设置字体和字号的实现方法,这个要说明一下,本来FLASH是可以直接读取操作系统版本的,但因为今年刚推出的WINDOWS 2003,所以FLASHMX中读不到WINDOWS 2003 的真实版本,所以我还是用ASP来读取的操作系统版本,然后通过建立的全局函数来为文本框赋值,同时检查字体和字号是否跟WINDOWS的默认字体和字号对应,不是的话就改掉字体和字号,不过这个我在演示的源码中注释掉了,大家拿到源码的话可以把这两行恢复出来,哦对了,说到FLASH直接读操作系统的时候,我想到了一个问题得提醒一下各位初哥,特别是还在看FLASHMX版帮助的同志请注意,帮助中有一项有点错误,大家请将帮助翻至System中的那个C什么什么对象中,就是关于获取屏幕分辨率的那两个函数,帮助上印错了,多印了一个点,应该是

System.capabilities.screenResolutionX获取分辨率X值
System.capabilities.screenResolutionY获取分辨率Y值

关于留言者IP啊什么的,这个就不用我多说了吧,随便找个版本的动网论坛看一下,就明白了

最后一个功能,就是关于怎么知道自己的FLASH有没被下载运行或者盗版运行嘛,同志们请用影片的_URL属性值……,如trace(_root._url),呵呵,明白了吧?

好了,这些功能的实现方法说完了,然后我们接着说一下相关技巧和代码规范
首先,第一点,大家请注意在面对大工程面前,请尽量双OOP方式来(噢,不明白OOP的人没关系,代码写多了,你就明白OOP是什么了,呵呵,基本常识,别跟着我问)
不过话说回来了,在FLASHMX 6中请不要完全以OOP方式来,那样运行速度太慢了,尽量不要自定义对象的属性,那样太慢了……
第二点,请大家尽量不要用UI组件,速度太慢,不过想偷懒的话嘛例外(建议大家多下载UI组件,不是下载了用,是下载了看里面的代码,增加经验)
第三点,在各位拿到源代码之前先预读一下String对象的操作,再复习一下Array对象的使用,还有[]方式的对象,变量引用技巧(不明白的人请倒回去看第5卷),如果各位对AttachMovie等语句熟悉者,请查阅相关资料
第四点,拿到源代码之后看不懂的同志,请加强一下FLASH基本语句和C语言的学习,呵呵
……

呵呵,我们现在对以上几点中的技巧进行实例说明,首先咱们来说说关于怎样在FLASH中创建对象,哦这个其实也很容易,帮助上写着有呢

对象名=new Object();

当然,我们也可以这样干 _global.对象名=new Object(); 这样的话,我们就可以在FLASH中的任何角落中直接使用对象名来引用这个Object了
接下来,大家就可以在这个Object中创建什么变量啊,数组啊,属性啊之类的(当然,并不推荐创建属性,不然的话,你的FLASH将对用户的机器运行速度来个极限考验)

然后嘛,就剩下一个比较复杂的,就是[]的引用方法,如下

trace(_root[“mov”+1][“childMo”+1][“var”+1]);
呵呵,各位语言基本功效差的同志看明白了么?这行代码是用trace弹个窗口出来(当然,如果是运行SWF的话,什么反应都没有的哦)显示_root对象中的叫做”mov”+1的对象中的”childMo”+1中的一个叫做”var”+1的变量的值,明白?这种引用方法掌握了的话,可是大大的有用哦,再如:

_root[“mov”+1][“txtCaption”+1].text=”ABC”;
呵呵,这一行是将_root对象中的”mov”+1中的”txtCaption”+1的文本域的文本设成ABC三个字母,当然,这个文本域txtCaption1要是动态或者输入文本域才行,静态文本域是不能这样干的,呵呵
好了,这一卷就说到这里了,对了代码基础较差的同志请先熟练一下代码基本功,然后再多看看前5卷,对代码较熟悉的同志只用看一下本攻略中提到的方法,呵呵,当然,对于经验丰富者,本攻略仅供参考……:)

FlashMX+ASP+Access数据库之数据整理

2007年12月19日 由 Sken 没有评论 »

  经过我们几天的讨论,现在大家如果已经看完前4卷的话,应该已经可以轻松的搞定文本文件和ASP等文件与FLASH的数据传递方法了,今天我们来讨论怎样对对一定规模的数据进行有效的整理和安排。

在数据的整理我主要是用两种方法配合进行,分别是用Array和String这两个对象,因为我们在以后的历程中可能需要在FLASH中实现如小到留言板,大到论坛或者信息平台的功能,所以在FLASH中对数据的整理是非常重要的技术和技巧。我们在网页的功能编写中最最常见的应该算是列表之类的功能,我们今天的讨论实例将以实现软件下载系统的基本功能为主。软件下载系统相应大家都是经常接触的了,由于篇幅和时间的原因,我们在这里仅讨论软件下载系统的核心部分,其相关功能是:

我们还是用ACCESS数据库为例,在数据库中存储一系列软件信息,如软件名称,软件版本,推荐度,发布时间,软件介绍和下载链接等,然后我们将在FLASH中建立一个列表,并以每页10条记录的形式来显示这个数据库中的记录,并允许用户通过点击开始下载,这样的话,我们首先要写一个ASP文件(仅仅一个ASP文件就足够了),我们将在这个ASP文件中编写出按照指定的参数向FLASH提供第几页(如每页10条记录)的数据(其中包括每条记录的所有字段),也就是说,我们将每页的记录从ASP发向FLASH,然后再经过FLASH整理后,显示在列表上,这样的话,我们在每次从ASP发出数据时,因为需要以“变量名=值”的形式输出,所以在ASP部分的数据输出形式上是有两种风格的,我们以软件系统的数据为例讲解ASP部分的这两种数据整理风格:
第一种:我比较喜欢这一种,呵呵

变量名=软件1,软件2,软件3,软件4,软件5,软件6,软件7,软件8,软件9,软件10

第二种:我不怎么喜欢这一种,不过有很多人却喜欢这样干的
变量名0=软件数量&变量名1=软件1&变量2=软件2&变量3=软件3&变量4=软件4&变量5=软件5&变量6=软件6&变量7=软件7&变量8=软件8&变量9=软件9&变量10=软件10

两种风格之间其实也没有太明显的界线,呵呵,是吧,看各位的风格爱好了,当然也可以两种相结合,可能有部分人看到这里会纳闷,我现在在说些什么呢,怎么看不大明白呢?其实说白了也没什么,只是讨论一下我们每页要发出的数据怎样安排比较好,第一种的风格的实例如下:

aspRect=Foxmail,4.2,Windows,2003,Office,2003,Winamp,3.0
而另一种风格就如下所示:
softcount=4&softname1=foxmail&softname2=windows&softname3=office&softname4=winamp&softver1=4.2
&softver2=2003&softver3=2003&softver4=3.0

各位看完前4卷的朋友应该明白我现在在说什么了吧,如果仍有不清楚的请认真的从第1卷开始看,不许偷懒(这是为大家好,当然我也可以省些口水了)

说到这里我们已经讲到了前面两种数据输出的风格,接下来我们将讨论FLASH部分的处理,关于FLASH部分的处理嘛,我只有推荐一种,那就是引用对象数组来存这些数据,对于对象数组的基本操作,大家可以参考FLASHMX帮助中的Array对象,当然,我们还是有必要举下面几个例子:
如我们要在一个对象数组中保存一条软件信息的数据记录
SoftDatas=new Array();
SoftDatas.push({name: “Foxmail”, ver: 4.2, Size “2MB”,Note: “这是一个邮件收发软件”});

这样的话,我们在需要引用某一个软件的相关信息时,我们可以在FLASH中写如下代码来引用,如我们要在一个动态文本域中显示这个软件的名称:

txtBox.text=SoftDatas[0].name;  //0是索引咯,各位有语言基础的就不用我说了,没语言基础的同志嘛,看样子得多看看书了

对了,说到这里,我们得向大家强调一下FLASH中关于变量和对象的基本使用

变量和对象在FLASH中分两种,一种是本地变量或本地对象,另一种是全局变量或全局对象
关于本地变量和对象的声明嘛,就是普通的声明方式,(其实FLASHMX 6当中可以不用声明)如:
var a=”abc”;//声明一个变量,名称是a,初始值是”abc”
var b=123;//声明一个变量,名称是b,初始值是123
c=new Array();//声明一个Array对象,也就是数组
这种变量和对象在声明之后只能在当前影片实例中直接引用,在其它的影片实例中需要引用时要以”.”或者”/”方式引用,在这里我们推荐使用”.”方式引用,如:
当我们引用最顶层实例中的变量或对象时,那就是_root.变量名
当我们引用上一层实例中的变量或对象时,那就是_parent.变量名
当我们要引用某个特定实例中的变量或对象时,那就是_root.实例名1.实例名2.变量名(类似文件夹路径,也有绝对路径和相对路径的形式)

说到这里或许有些人对引用方法还不是很熟悉,这样吧,我们换一种方法来理解,其实FLASH中的场景就相同于“我的电脑”中的磁盘分区C:,D:,E:等
然后每个场景中的影片实例就相当于磁盘分区中的文件夹,每个场景中都有一个顶级的实例就是我们新建一个FLASH文档之后所显示的那个实例,这个顶级的实例我们可以理解成磁盘的根目录,其它我们创建的影片元件实例可以理解成文件夹,结构也是一样的,都是呈树状的,所以每个影片实例中还可以再创建影片实例,这就相当于在文件夹中还可以再创建文件夹,然后实例的引用就相当于文件夹的路径,只是说区别如下:

FLASH相当于文件系统中的
_root.Windows.System32.shellC:\Windows\System32\shell
\abc_root.abc
.\abcthis.abc
..\abc_parent.abc

现在各位该清楚了吧,好,我们再来说全局变量和对象的引用,这个嘛,就非常简单了,直接写变量或对象的名称就OK了

好了,跑题好半天了,该回来继续做我们的下载系统了 (兄弟们别砸,呵呵,咦,我刚才说到哪儿了,我看看先…  *^_^*)
哦,刚才说到整理数据了,说到这里有一点比较常用的技巧需要说一下,就是关于使用循环来引用变量或对象的方法,比如:我们有几个文本框,分别命名text1,text2,text3,text4,text5,然后我们不想一个一个的去引用,那么我们可以用循环或者过程来引用它们,比如说把它们的内容都设成www.coolthor.com,那么我们可以用下面的代码完成
for(i=1;i<6;i++){
this[“text”+i].text=”www.coolthor.com”;
}

当然,除了实例[“变量名”]的方法之外还有/方法,不过最好还是用上面的这个方法比较好。
好了,现在我们就要开始说下载系统的FLASH部分的实现方法了,由于篇幅原因,我在这里就只写出实现的方法

首先建立变量保存当前页的页码和总页数(这个值由ASP提供),这样我们就可以做上一页和下一页的按钮,并进行判断是不是当前页的页码超出了预期的范围,然后我们再来建立loadvars对象的实例和回调函数,然后再编写对象数组的赋值代码,参考代码如下:

/*设aspRect为返回的数据,我们以第一种风格为例,设ASP返回的数据是aspRect=Foxmail,4.2,Windows,2003,Office,2003,Winamp,3.0 */
SoftData=new Array();
tmpArray=aspRect.split(“,”);
tmpCount=0;
for(i=0;i<tmpArray.length;i++){
tmpCount++;
if (tmpCount==2){
tmpCount=0;
SoftData.push({name: tmpArray[i-1], ver: tmpArray});
}
}

然后,我们需要准备显示列表了,我比较习惯的方法是创建一个影片元件,在这个里面做好文本框和这条记录的按钮,并调整好位置,然后拉出10个到_root中,或者用attachmovie都可以,给它们加上顺序命名,如item1,item2,item3,item4…等等,然后嘛再该干什么就不用我说了吧

基本方法就是这些,哦对了,如果有需要将字串换成数值的,可以使用parseInt之类的函数来进行转换,还有就是比如说软件名称或者软件介绍中可能会出现&或者=号之类的,大家记在在asp输出之前把这些替换成全角的&和=,ASP中替换字串很容易,用Replace就可以了,FLASH中嘛,我在本卷的源代码中为大家写了一个全局函数Replace,用法和ASP中的那个一样,呵呵,今天就到这里,有需要本卷源代码者请付30分,哦,对了,还有些事情要告诉大家的就是,在我的源代码中为了方便大家阅读,所以绝大部分的变量和对象命名都是用的汉字,这一点在正式的编程中并不提倡,再就是大家要养成区分大小写的习惯,因为FLASH MX 7.0中已经区分大小写了,A并不等于a !!

FlashMX+ASP+Access数据库之中文代码解决方案

2007年12月19日 由 Sken 1条评论 »

在前面的几卷中我们已经初步的了解了FLASH与数据库的加接原理和基本方法,现在我们将从本卷开始进行实战演习

本卷将向大家讲述怎样完成一个具备基本功能的会员注册和会员档案功能。
很多刚开始与ASP连接的朋友经常会提到同一个问题,就是无法正确的从ASP或者文本文件中读取到汉字或者全角字符,关于这个问题嘛,当年我也蛮头大的,呵呵,其实只要在FLASH中加一条指令就行了,就是在连接ASP之前加上System.useCodePage=true;就可以了(建议将此命令放在第一帧的第一行)

对了,有一个非常重要的问题忘了告诉大家,各位在使用LoadVars对象向ASP发送数据时,建议使用POST方法,尽量不要用GET方法,因为那样的话……嘿嘿  (俺先卖个关子再说,反正大家照我说的做绝对对各位都有好处,可以少走弯路,至于为什么嘛,大家自己试试GET和POST的区别就明白了,多动手对大家都有好处嘛,呵呵)

现在我们已经解决了FLASH与ASP之间的中文问题,下面我们将要准备开始实现会员的注册功能。我们首先建立一个ACCESS 2000格式的数据库,然后在数据库中创建一个数据表,并为它命名为user,接下来我们在这个数据表中创建三个字段,分别是id,user,pass,然后我们分别将这三个字段设为主键字段、20个字符长度文本字段和60个字符长度的文本字段,设置好之后,我们关闭这个数据库,并打开记事本(当然,用其它编辑器也可以),我们创建下面这个ASP文件(我们将用这个ASP文件来实现会员注册功能):
<%
dim strUser,strPass,strOutput,strSQL,db
strUser=trim(Request.FORM(“user”))    ’获取POST数据中的USER参数
strPass=trim(Request.FORM(“pass”))    ’获取POST数据中的PASS参数
strSQL=”insert into user (user,pass) values (‘”&strUser&”‘,'”&strPass&”‘)”    ’生成SQL语句
db=”test.mdb”    ’数据库文件名
Set conn = Server.CreateObject(“ADODB.Connection”)
connstr=”driver={Microsoft Access Driver (*.mdb)};dbq=” & Server.MapPath(db)
conn.Open connstr    ’打开数据库连接

if len(strUser)<1 or len(strUser)>20 then
strOutput=”用户名须1至20个字以内”    ’检查用户名长度
else
if len(strPass)<3 or len(strPass)>60 then
strOutput=”密码须3至60个字以内”    ’检查密码长度
else
set rs = server.CreateObject(“ADODB.Recordset”)
rs.open “Select top 1 * from user where user = ‘” & strUser & “‘”,conn,2,3    ’检查同名用户
if rs.eof then
conn.execute strSQL      ’执行SQL语句
strOutput=”注册成功”
else
strOutput=”用户已存在”
rs.close
set rs=nothing
end if
end if
end if
conn.close
set conn=nothing
response.write “aspAction=REG&aspRect=” & strOutput      ’输出结果
%>

这样我们就写好了注册功能的ASP文件,接下来,我们再创建另一个ASP文件,用来显示会员的信息,代码如下:

<%
dim parID,strUser,strPass
parID=Request.FORM(“id”)    ’获取POST数据中的PASS参数
if parID<1 then parID=0

db=”test.mdb”
Set conn = Server.CreateObject(“ADODB.Connection”)
connstr=”driver={Microsoft Access Driver (*.mdb)};dbq=” & Server.MapPath(db)
conn.Open connstr    ’打开数据库连接

set rs = server.CreateObject(“ADODB.Recordset”)
rs.open “select top 1 * from user where id = ” & parid,conn,2,3
if rs.eof then
strUser=”不存在的用户记录”
strPass=”不存在的用户记录”
else
strUser=rs(“user”)
strPass=rs(“pass”)
end if
rs.close
conn.close
set conn=nothing
response.write “aspAction=READ&aspUser=” & strUser & “&aspPass=” & strPass      ’输出结果
%>

好了,到此为止,数据库和ASP部分我们已经基本就绪了,我们现在就要开始FLASH部分的编写,说到FLASH和用户注册问题,有些事得先说一下,各位在做会员信息的时候最好还是别直接在数据库里面存下会员的密码,这样不好,呵呵,还是用些什么MD5啊之类的算法加密一下,我这里就有一代FLASH版的MD5函数,大家复制到FLASH里面就可以直接引用了,地址是http://expert.csdn.net/Expert/TopicView1.asp?id=2022597,使用方法嘛,直接用trace(md5(“password”))就可以了,哦,说到这里又得再罗索两句了,很多人问我trace是干什么,唉,不是我没耐心,这个真的很简单,就是在FLASHMX里面弹一个小窗口出来显示数据,主要是用来调试代码的,比如说看一下一个变量的值 trace(a);就是显示变量a的值咯,很简单,大家自己动手试试就知道了

好了,言归正传,准备写FLASH代码!,在我们下面要做的FLASH代码中需要同时可能不止一次的重复调用上面的两个ASP文件,所以我在上面的那个ASP文件中都写了aspAction这个变量,一个是返回“READ”字串,另一个是返回”REG”字串,这样的话我们就可以在FLASH中用共用的代码来识别哪一次ASP调用是来自哪一个功能,这样就可以让FLASH代码自己区别出来,然后分别去干相应的事情了。

好了,我们先在FLASH中创建一个关键帧(只需要一帧就可以了)和几个动态文本域和可输入的动态文本域,相关操作方法请自己读FLASHMX的相关教程(很简单的咯,实在不懂的话回帖提问吧),然后再创建三个按钮(分别用做“注册”、“上一条记录”、“下一条记录”),然后分别为它们命名:

txtUser     用来让别人输入要注册的用户名
txtPass     用来让别人输入要注册的密码
txtPrompt   用来显示是否注册成功的提示信息
txtCount    用来显示当前记录的主键值
datUser    用来显示当前记录中的用户名
datPass    用来显示当前记录中的密码

准备好上面这些之后,我们开始在第一帧中写入以下代码:
System.useCodePage=true; //提供中文支持,这样就可以从数据库或者ASP等文件中引用汉字和全角字符了
CurrentUserID=0;         //主键值变量,默认从0开始
datUser.text=””;
datPass.text=””;
UpDateCount();
function UpdateCount(){         //显示当前主键的值
txtCount.text=”ID = “ + CurrentUserID;
}
function ReadAsp(){              //LoadVars的回调函数

switch(this[“aspAction”]){
case “REG”:        //当运行的ASP中返回的aspAction是REG时,就作为用户注册信息进行处理
txtPrompt.text=this[“aspRect”];
break;
case “READ”:     //当运行的ASP中返回aspAction是READ时,就作为查看用户信息进行处理
datUser.text=this[“aspUser”];
datPass.text=this[“aspPass”];
UpDateCount();
break;
}

}
stop();

接下来我们在“注册”按钮中写下代码:

on(release){
asp=new LoadVars();
asp.onload=ReadAsp;
asp.user=txtUser.text;
asp.pass=txtPass.text;
asp.sendAndLoad(“http://thor/flashclass/userreg.asp”,asp,”POST”);
}

然后在“上一条记录”按钮中写下代码:
on(release){
if (CurrentUserID>1){
CurrentUserID–;
asp=new LoadVars();
asp.onLoad=readasp;
asp.id=CurrentUserID;
asp.sendAndLoad(“http://thor/flashclass/userread.asp”,asp,”POST”);
}
}
最后在“下一条记录”按钮中写下代码:
on(release){
CurrentUserID++;
asp=new LoadVars();
asp.onload=readasp;
asp.id=CurrentUserID;
asp.sendAndLoad(“http://thor/flashclass/userread.asp”,asp,”POST”);
}

好了,一切准备就绪了,同志们一起按CTRL+ENTER吧~“““““

在下一卷中将向大家演示如果制作能排序,分页的列表,以及链接(以软件下载系统为例)

FlashMX+ASP+Access数据库高级间接连接方法

2007年12月19日 由 Sken 没有评论 »

在前面的文章已经给大家讨论了FLASH间接操作数据库的原理和基本方法(LoadVariables语句),本卷将向大家讲述比LoadVariables更强大的LoadVars对象的使用方法

/* —————————————–
闲聊:记得有次和Whose一起回答别人关于FLASH操作数据库的问题时提到了LoadVariables,在我的回答中我一时忘了LoadVariables这个语句的字母拼写,所以只写了LoarVar…,Whose就问我是不是要别人自由发挥,呵呵,其实是我自己忘了这条语句,因为我已经实在记不起来我有多久没用这条语句了,因为后来都是用LoadVars和其它方法来操作数据库了。相信大家在掌握了LoadVars之后也会扔掉LoadVariables
——————————————*/

好了,言归正传,我们现在在开始LoadVars对象之前,再次讨论一下关于ASP中的写法(其它脚本语言如此类推,如ASPX,CGI,PHP等),在前面的文章中我们已经强调了要求在ASP中去掉所有的HTML标记,也就是说不要在ASP中写下任何<html>、<body>、<B>、<A>……等,只能在ASP中写下<%和%>之间的纯ASP脚本,以保证ASP最后的运行结果是:(无空格)
变量名1=值1 & 变量名2=值2 & 变量名3=值3 & 变量名4=值4 ……

也就是说,在ASP中要保证最后的结果是每个变量名(并非ASP中的变量,而是传达到FLASH中的FLASH变量),然后再是一个等号,接着再写这个变量的值(如果这个值中需要空格的话,用+号代替),在ASP中输出结果的方法可以是
<%=”…”%>,也可以是<%Response.write “…”%>,两种方法都可以,只是随大家习惯而已,这两种方法对于经常用ASP的朋友来说再熟悉不过了,不过有一点要说明的就是我们在ASP中提倡使用<%=”…”%>的方法来输出结果,但我们现在在编写为FLASH服务的ASP文件时,我建议大家还是用<%Response.write “…”%>方法,因为在我们需要的这种ASP文件中是无任何HTML标记的,所以<%Response.write “…”%>比<%=”…”%>更直观,我们举例来说:
<%
dim a1,a2,a3,strOutput
a1=”Fireworks”
a2=”Dreamweaver”
a3=”Flash”
strOutput=”a1=” & a1 & “&a2=” & a2 & “&a3=” & a3

response.write strOutput
%>

这样的话,当FLASH装载了这个ASP的运行结果之后就会在FLASH中生成a1,a2,a3三个变量,并且自动给这三个变量赋值为”Fireworks”,”Dreamweaver”,”Flash”,然后我们就可以使用其它的FLASH语句来使用或操作这三个变量。

在大家再次熟悉了ASP的书写方法之后,我们现在就要开始LoadVars对象了,LoadVars对象的原理和LoadVariables类似,也是通过读取文本文件或者ASP等文件的结果,来给FLASH中的变量赋值,但LoadVariables没有回调功能,所以需要建立循环来判断是否已经将结果读入了FLASH,这一点是比较麻烦和低效的,在LoadVars中就不会再如此做了,因为LoadVars在读完了结果之后会自动产生事件,然后通过这个事件我们就已经知道这次的读入已经完成,而且在LoadVars中还可以实现读取进度、仅发送参数、发送参数并回调结果、仅回调结果等多种功能,并且LoadVars除了读取文本文件和ASP等文件结果之外,还另有妙用(这一功能是我瞎胡弄出来的,此功能足以让大家惊讶,呵呵,俺得先留着这个功能多卖点分才行,大家别砸我哈,下部中自然为给大家讲的)

我们先从FLASH的帮助中复制它的属性、方法和事件过来参考一下,我们在本卷中只用关心下面这些内容就行了:

代码类型 说明
LoadVars.load方法 从指定的 URL 下载变量。
LoadVars.send方法将变量从 LoadVars 对象发布到 URL。
LoadVars.sendAndLoad方法 将变量从 LoadVars 对象发布到 URL,并将服务器的响应下载到目标对象。

LoadVars.onload事件当LoadVars对象完成 load 或 sendAndLoad 等操作时产生。

我们在使用这些方法和事件之前需要先将LoadVars实例化,代码如下:
ASP=new LoadVars();//格式是:实例名=new LoadVars();<–此例中我用的实例名是ASP(实例名的命名和变量名相同,呵呵,顺便告诉大家,在FLASHMX6,可以用中文的变量名和实例名,呵呵,好玩吧,比如说:后台=new LoadVars();)
好了,我们现在已经创建了一个LoadVars对象的实例,实例名称用的是”ASP”,接下来我们开始研究LoadVars的三种方法Load,Send和SendAndLoad:
我们从第一种方法开始,Load的功能是不向ASP发任何参数,直接运行ASP,并将ASP的运行结果收入FLASH;
而第二种方法是首先将参数发向ASP,然后打开ASP文件页面,并执行它,这样的话,我们可以用FLASH做些比如论坛登陆窗口之类的东东
最后第三种方法SendAndLoad也就是我们以后做全版FLASH网站时要经常使用的方法,它是首先将参数发给ASP,然后执行ASP并将执行结果读回到FLASH中来。
注意:Load和SendAndLoad中运行ASP文件时,访问者并不会看到ASP的页面(可以说是后台运行的)

三种方法的代码编写基本类似,由于篇幅字数的限制,我们只讨论其中的SendAndLoad方法,此方法需下面这些步骤完成:
第1步:LoadVars实例化
第2步:添加ASP所需参数
第3步:设置回调函数
第4步:使用SendAndLoad指令

第1步在上面我们已经说过了,现在我们来说一下第2步。所谓的“添加ASP所需参数”也就是一些ASP中,如用户登录信息验证,分类数据列表等等都需要从POST或者GET中获取相关参数,如果要在ASP中获取POST参数的话,用Request.FORM(“参数名”)就可以了,如果是要在ASP中获取GET参数的话,那就得用Request.QueryString(“参数名”),例如下面的ASP代码:
<%
‘检查用户登录 – GET方法参数
dim strUser,strPass,strOutput
strUser=Request.QueryString(“user”)
strPass=Request.QueryString(“pass”)

if strUser=”THOR” and strPass=”abc” then
strOutPut=”Yes”
else
strOutput=”No”
end if
response.write “aspRect=” & strOutput
‘本例只是演示参数的使用,所以没用到数据库,当然在正式的项目应用中的用户登录参数,大家可千万别用GET方法的参数,得用POST才行
%>

我们接着开始在FLASH中为这个ASP写添加参数的代码
function ReadAspRect(){//创建一个名称为ReadAspRect的函数,此函数将用来分析ASP的返回结果
trace(this[“aspRect”]);//弹一个窗口出来显示aspRect变量的值
}

ASP=new LoadVars();//创建一个名称叫做ASP (当然也可以用其它名称) 的LoadVars对象实例
ASP.user=”THOR”;//添加一个值为”THOR”的参数,参数名是user,对应ASP中的user参数
ASP.pass=”abc”;//添加一个值为”abc”的参数,参数名是pass,对应ASP中的pass参数
ASP.OnLoad=ReadAspRect;//设置回调函数为ReadAspRect,当ASP结果装载完毕时,FLASH会自动运行ReadAspRect函数
ASP.sendAndLoad(“ASP文件地址”,ASP,”GET”);//使用GET方法发送参数,并从ASP中返回其运行结果

大家看到这里应该已经了解了LoadVars对象的基本用法,我们在下一卷中将向大家详细举例LoadVars对象的中文、数据库操作以及相关经验和技巧~“`

FlashMX+ASP+Access数据库连接方法

2007年12月19日 由 Sken 1,869 条评论 »

首先我们要先写好操作数据库的ASP脚本,然后再使用FLASHMX来读取ASP的运行结果(注意:这里仅仅只是需要ASP的运行结果而已,所以需要在ASP中去除一切无用的Html标记),我们先来掌握一下专为FlashMX提供数据的ASP的编写方法。ASP部分提供数据时应保证最后的运行结果应为:

变量名1=值1&变量名2=值2&变量名3=值3…

这样的话就相当于ASP部分为FlashMX中的变量进行赋值,当FlashMX中接收到数据之后便可以直接引用这些变量的值(注意:多个变量时,每个变量之间应用&号隔开!)
我们先以下面这段非常简单的程序为例:
文件名: Test.asp
<%=”aspRect=Hello! Macromedia FlashMX 6.0″%>
或者写成:
<%
Response.write “aspRect=Hello! Macromedia FlashMX 6.0”
%>

这两种写法的功能是相同的,各位熟悉ASP的朋友看过这段代码后也许忍不住会问:“那不就相当于直接在页面中写aspRect=Hello! Macromedia FlashMX 6.0么?,呵呵,对,如果你直接在页面中写这句,FlashMX也是可以读到的,这也就是FlashMX读取文本文件的方法.

言归正传,我们现在已经完成了ASP部分的代码,然后我们再来准备编写FLASHMX部分的数据接收代码……
在FLASH中可以接收数据的语句有很多,我们主要推荐两种,一个是LoadVariables语句,另一个是LoadVars对象,本卷将向大家讲解LoadVariables语句的使用。

LoadVariables语句由于在读取数据时没有回调功能,也就是无法产生数据接收完毕的事件,所以,我们需要建立一个循环来判断是否接收到了数据,我们以下面这代码为例
文件名: Test.fla
在FLASHMX的默认场景中创建4个关键帧,
第1个关键帧的代码如下:
loadVariables(“http://127.0.0.1/test.asp”,_root,”GET”);
//Loadvariables的第1个参数为ASP文件名,也就是刚才我们写的那个
//Loadvariables的第2个参数为接收对象,也就是将在哪个对象中创建变量
//Loadvariables的第3个参数为”GET”或者”POST”,在此语句中建议使用GET方法
第2个关键帧的代码为空
第3个关键帧的代码如下:
if(aspRect ne “”){
/*如果变量aspRect的值不为空,也就是已经接收到了数据则转向第4帧*/
gotoAndPlay(4);
}
else{
/*如果变量aspRect的值为空,也就是还没有接收到数据则转向第2帧*/
gotoAndPlay(2);
}
第4个关键帧的代码如下:
trace(aspRect);//显示变量aspRect的值
stop();

这样我们就可以在FLASHMX中获取到ASP中的数据,ASP的代码经过改进之后更可以完成比较复杂的应用。假设我们现在有一个Access 2000的数据库,其中有一个User的数据表,这个数据表中由以下字段和记录

记录\字段id(主键)user(文本)sex(逻辑)
—————————————————————————————–
1thortrue
2csdnfalse
假设我们现在要在FLASH中通过指定ASP的参数来获取ID为1或者ID为2的记录中的USER字段值或者SEX字段值的话,我们可以这样来做:
ASP部分:文件名Test.asp
<%
dim conn,rs,db,connstr
db=”数据库文件名”
Set conn = Server.CreateObject(“ADODB.Connection”)
Server.MapPath(db)
connstr=”driver={Microsoft Access Driver (*.mdb)};dbq=” & Server.MapPath(db)
conn.Open connstr’建立数据库连接

dim parID,strSQL,AspUser,AspSex
parID=Request.QueryString(“ID”)’获取ASP参数ID
strSQL=”select top 1 * from user where id = ” & parID
Set rs=Server.CreateObject(“ADODB.RecordSet”)
rs.open strSQL,conn,2,3
if rs.eof then
AspUser=”无此记录”
AspSex=”无此记录”
else
AspUser=rs(“user”)
AspSex=rs(“sex”)
end if
rs.close
conn.close
response.write “AspUser=” & AspUser & “&AspSex=” & AspSex
%>
FlashMX部分:
详细代码省略,大家对照上面的FLASH代码改改就行了,把第一帧的代码改为loadVariables(“http://127.0.0.1/test.asp?id=1″,_root,”GET”);
然后把所有的aspRect改为AspUser或者AspSex,最后第4帧的代码改为
trace(AspUser);
trace(AspSex);
大家玩到这里的时候应该明白了FLASHMX的Loadvariables的用法了,熟悉ASP的朋友再稍稍变更一下ASP的代码就能完成功能稍稍复杂一点的应用了,不过Loadvariables由于没有回调功能以及相关功能上的限制,这条语句我已经很久没用了,将向大家介绍功能更强大的LoadVars的用法,相信大家在掌握了LoadVars之后也会跟我一样扔掉Loadvariables语句 .

😛

湿度爱情,你的、我的、他的湿度的爱情

2007年11月1日 由 Sken 没有评论 »

《湿度爱情》,这是一部日本禁播的剧情片。
湿度爱情 影片简介:
湿度爱情 乡间小镇上一对年轻夫妻开了间公共浴室,丈夫负责锅炉,妻子则在前台收钱,黑泽爱每天都可以“瞻仰”无数男性的裸体.
而黑泽爱有着难以启齿的性怪癖??喜欢水,喜欢在水中。
阴暗夜色下浴室高耸的烟筒,雨雾迷蒙里寂寥的屋檐,情欲像是地面上蜿蜒连绵的雨水,在湿腻的空气中扩张,这一切都让我想起了《六月之蛇》。所不同的是,龟井亨情欲世界里内心压抑的欲望更加直观,更加赤裸。
丈夫完全不理解妻子的需要,找来了心理医生希望能治愈妻子的性冷淡,但其实需要填补的,不是黑泽爱心中的欲望之井,而是两人缺乏沟通理解的那条看不见的鸿沟。
妻子忍受不住客人的引诱,终于在浴室的水池里放纵了自己的情欲,呻吟、快感、高潮褪去后的喘息……妻子背叛了丈夫,情欲瓦解了爱情。
丈夫卖掉了浴室,决定和妻子一起去旅行,列车缓缓离开小镇的时候,丈夫黯然下了车,剩下黑泽爱独自在夜色中消逝,她要寻找的爱情和幸福并不是他能给予的。

湿度爱情整部影片的色彩暗淡,沉郁。说实在的,我尤其不喜欢此类色彩暗淡的电影。剧情不待说,光是看沉郁的色调,足以让人心生郁郁的。但是,当我看完整部片子的时候,我想导演的色彩处理还是非常成功的。至少,这不是一部以喜剧收场的,以色彩就给整部影片有了一个很好的铺垫,为剧情的发展乃至于结尾都有了很好的渲染。黑色的浓烟,古色的屋檐,倾盆的雨水,苍郁的苍天,甚至是浴室之内的水,也是按单的 ,恍若黑色……不尽然,想起王家卫的电影,《阿飞正传》的苍郁,《2046》的飘渺。在这一部“情色”的影片之中,展现了那种沉郁,色彩的昭示足以宣示一切。片中,那古色的烟仓口冒出的黑色浓烟,也足以让看客们在“情色”之外有所联想,至少可以感知那种呛人的“气味”——这已然超脱了情色。

影片的结局还不算出乎人的意料。但影片同样在收尾的时候,昭示着什么。
外界有传韩国一部名为《外出》的影片实为出轨“正名”——因此也遭到了许多的人轰击——道德问题,在现实中,谁也无法遁形。我如此,你亦如此。像一种凝固的空气,虽然我们还未感觉它就笼罩在我们的上空。

假如我们都像鲁宾逊一样漂泊到了一个荒无人烟的孤岛上生活,不存在其他人,也不存在社会与社会的结构,那么他的任何行为都不有什么善恶之分,当然也不存在着所谓的错与对,一切的评价也就失去的意义——如此,影片中的女主角的行为若是宽泛得放到这么一个环境也同样不存在任何的对与错。只是,现实的,她有了参照物。
湿度的爱情,或许也是你的、我的、他的湿度爱情罢了。

淘气公主求爱记2:第六章 日出下创造浪漫回忆(9)

2007年10月30日 由 Crystal 没有评论 »

她见到呆呆站在门外的我时,脸上露出了吃惊的表情,但很快恢复了常态。她的嘴角露出一抹诡异的微笑:“来看健一?”

我咬着嘴唇迟疑了一下,最后还是点了点头。

“可是我不想让你见他。”舒娜收起笑容,那天使一般的面孔突然狰狞起来,顺手将门关得死死的,“我不允许任何人把健一从我的身边抢走,知道吗?就算有婚约又怎么样?是我先和健一认识的,是我先喜欢他的,为什么要把健一让给半路插进来的陌生人?”

舒娜……舒娜还是第一次这样强烈地表达自己的心意,我果然猜得没错,她真的很喜欢健一。也许……也许比我还要喜欢吧?现在的我心里乱糟糟的,我到底有多喜欢健一呢?有没有一把尺子可以好好地衡量一下每个人的心呢?

“说话啊!”见我一直沉默不语,舒娜用力地推了我一下,“说你已经决定退出了!除了健一你不是还有其他的选择吗?俊彦怎么样?他也很帅吧?在学校里也有很多女孩子喜欢他,亲卫队也很庞大,而且他也喜欢你,非常喜欢!不是吗?”

欧俊彦喜欢我?!我一定听错了吧?

要不然就是舒娜在胡说八道。欧俊彦怎么可能会喜欢我呢?我承认他一直很照顾我,也在关键的时刻保护过我,但那都是因为……因为我和美雅很相像的缘故,他把我当成美雅的替身了,也就是把我当成了妹妹。是这样的,一定是这样!

“你可真是个反应迟钝的家伙!”舒娜露出鄙夷的笑容,“我要说的话都已经说完了,你快点回去吧。反正我是不会让你进去看健一的。在家里怎么样我管不着,起码在学校里不把健一给你!绝对不给!”舒娜说完转过身,不再理会我,就想重新回到保健室。

“可是……”

“可是?”舒娜停下脚步,好奇地望着我。

“可是我也很喜欢健一。很喜欢……很喜欢……”

“喜欢?你是否喜欢他和我没关系!一点关系都没有!总之,不管你说什么都是没用的!”舒娜坚定地说道,“就算你现在是健一名义上的未婚妻,可是用不了多久,就会被我抢过来的。健一不会做伤害我的事情,绝对不会!要打赌吗?”

“打赌……”

我有什么能和她赌的呢?我是个……是个已经失去了父母、失去了地位身份、失去了国家的公主,除了对幸福的渴望之外,我没有任何可以拿出来赌的东西。我没有勇气也没有能力更没有筹码来和她赌。

我会输得一败涂地吗?我不知道!我真的不知道!

“不敢的话就直接放弃健一吧!怎么样?我看得出来俊彦对你也是真心的,和他在一起不好吗?”

“这不是买菜可以随便挑来挑去。”

欧俊彦的声音突然插进了我和舒娜的谈话中,不知道什么时候他已经站在我的背后了。

舒娜的脸上划过一丝暧昧的笑容:“这样不是很好吗?我会好好照顾健一的,俊彦,你还是快点送她回家吧。离比赛的日子已经越来越近了吧?好好加油啊!”

“我会的。”欧俊彦淡淡地望了一眼舒娜,随后转向我,“想进去还是回家?进去的话我陪你,如果想回家我也会送你回去。”

“俊彦!”舒娜低吼了一声,“连你也要和我作对吗?”

“我们……我们还是走吧。”

我又一次做了逃兵,虽然离健一只有那么近的距离,可我还是没有办法去到他的身边。

我不想欧俊彦因为我和舒娜起冲突,不想听她再说一些刺耳的字眼。

也许我是个胆小鬼,是个懦夫,可是面对做出那种事的健一,我又怎么能坚定地走下去呢?

舒娜终于露出了满意的笑容:“早这样不就好了。”随后头也不回地走进保健室。那道门关起来的声音闷闷的冷冷的,让我的心又忍不住痛了一下。

我和欧俊彦一起走出学校,一路上他始终没有说话,安静地跟在我的身边,看不出他在想什么。

放学时间也是下班的高峰期,马路上到处是行色匆匆的人们。我有些失魂落魄地朝前走着,脑袋里面像是有很多东西,又仿佛空空的什么都没有。

直到欧俊彦一把拉住我,我才猛地回过神来,身边的人正用好奇的目光看着我们。

“已经变灯了。”

我站回到斑马线上,仍然无精打采的样子。

“健一承认是他改的答案和分数?”

“他不承认。可是又拿不出证据。”

欧俊彦想了想,反问道:“那你有什么证据指明这件事一定是健一做的吗?”

我只好把昨天晚上和健一偷偷跑到海边的事原原本本地说了一遍,欧俊彦这么聪明,他一听就知道真相了吧。

“你也觉得是健一做的吧?毕竟他从一开始就不希望我做你的模特,也不了解水晶撒旦对我的意义有多么重要。反正他一直都是任性的人,冲动起来和小孩子一样不计较后果。”

欧俊彦没有果断地给出结论,却意外地转移了话题:“就算到了九十分吧。事实上就是到了,所有的约定也都达成了。那么就兑现吧。我现在告诉你关于水晶撒旦的事。”

“现在就告诉我?!”

我惊讶地望着欧俊彦,根本没想到他会突然做出这样的决定。

“怎么?不想听了?”

“不是……只不过没什么心理准备。”

欧俊彦若有所思地望了我一眼,好像已经猜到了我乱糟糟的心情。

在他淡定的目光注视下,我只好心虚地低下头。舒娜的话又在我的脑海中回响起来,欧俊彦喜欢我,欧俊彦真的喜欢我吗?

淘气公主求爱记2:第六章 日出下创造浪漫回忆(8)

2007年10月30日 由 Crystal 没有评论 »

健一睁开眼睛,呼吸越来越急促,他断断续续地问道:“你……你真的认定是我做的?”

我也不想认定,可是这一切不是太巧合了吗?

“我……”

“不用说了!不用……”健一的话还没说完就猛地倒在了地上。

“健一!”我刚想上前扶起他,天台的门突然被人打开了,紧接着一大群女生跑了进来,带头的是舒娜。

“谭沫沫同学,我说过健一现在生病了,需要休息,你为什么不肯听呢?”舒娜厉声责备完,在那群女生的帮助下,七手八脚地将健一抬了出去。

而我呢,只能呆呆地站在原地,不知所措地看着她们的背影消失在楼梯口。

Vol.05

一整天健一都没有再出现。欧俊彦从舒娜那里打听到,健一在发高烧,人在保健室里休息。

虽然我很想去看看他,但是那鲜红的八十九分却一直出现在我的脑海中困扰着我。

一直以来,虽然健一有时会孩子气一点,会因为和欧俊彦争个高下而显得咄咄逼人,但是在我心里,从来没有想过他会做出这么卑鄙的事来。起码在我看来,他始终是个正直的人。

可是现在似乎什么都变了……

有好几次,我都悄悄走到保健室门口,不过我怎么也没有勇气进去,我不知道该怎么样去面对现在的健一。

昨天晚上我们俩还那么开心地在海边一起等待着日出的来临,他温柔地背着我,我依偎在他温暖的怀抱中,他应该是因为把衣服给了我,所以才病倒了……可我还是矛盾极了。

就当我在保健室门口来回徘徊的时候,里面突然传出轻微的声音。

“健一,你生气了吗?都是我不好……”

是舒娜……我忍不住将耳朵贴在门上仔细听了起来。

“我真的很怕失去你,我们不是有过约定吗?你会永远在我身边保护我,不让我再次受到伤害的,你忘记了?还是……”

“还是你因为那件事情而讨厌我?!健一,你还是无法接受那件事情对不对?尽管我外表看起来和以前没有两样,可是……可是……”舒娜说着说着竟然嘤嘤地哭了起来。

健一的声音听起来有些虚弱:“不是的。怎么又提起那件事了呢?不是说让不愉快的回忆消失掉吗?我当然记得自己说过的话,我会负责的。”

“那谭沫沫又算什么呢?你们居然订婚了,自从她来了之后好像什么都改变了一样!你变了,俊彦变了……我不明白,她真的一点都不像公主。难道世界上真的存在那样的公主吗?她只不过是个粗心大意又不懂得交际的笨女孩,为什么你的父母会那么喜欢她?”

舒娜的语气显得很激动,在她的嘴里我变得一文不值。

不过……她说的似乎也没错。

我的确是个失败的公主,没有父母、没有国家、没有美貌、没有气质、没有这个也没有那个……就连我自己也迷糊了起来。

“我们永远不要变,好不好?保护我,我真的很害怕……想起那件事情我就会做噩梦,在大家面前我尽量装作若无其事,其实我真的没有办法忘记!”

房间里一下子没了声音,时间像是定格了一般。

许久健一的声音才有些寂寞地响起:“都是我的错。所以……我会负责的。”

我的心像是被狠狠撕开了一个口子,血在不停地流着,连痛都变得麻木了。今天早上健一不是还在海边向我告白了吗?为什么现在……他和舒娜之间到底有着什么样的秘密?

门突然打开了,舒娜从里面走了出来。

淘气公主求爱记2:第六章 日出下创造浪漫回忆(7)

2007年10月30日 由 Crystal 没有评论 »

健一的脸色的确不怎么好。不过一整晚没有合过眼睛,我的脸色也好不到哪儿去,她怎么不关心一下我呢?

“是很重要的事,必须现在说。”我固执地站在原地不肯让步。

听到我的话,舒娜的笑容顿时消失了大半。

健一像是察觉出了什么,站起身向教室外面走:“那好吧,就现在说。”

“今天健一王子看起来不太好啊,是生病了吗?”在舒娜的极力“号召”下终于有其他女生们加入到了“保护健一王子”的“战争”中来,她们纷纷把矛头对准了我。

“就是嘛!有什么话非要现在说?”

“还不是想找机会缠着健一王子不放!”

“真卑鄙!没看到人家不舒服吗?”

“如果健一王子有什么事的话,我们一定不会放过你的!”

……

在一大群女生乱糟糟的声音中我和健一一起来到顶楼的天台上。

“你知道我想问什么,是不是?”我开门见山地说道。

健一半倚在天台一侧的墙壁上,额头上冒出了很多汗,脸色苍白得厉害。

“健一?”见他不说话,只顾着难受地喘着气,我有些担心了,“你没事吧?”

“我当然没事!我不知道有多好呢!”健一根本不领情,凶着一张脸喊起来,“就是因为测验的事情吧?没考到九十分?想找我来求情,尽管没考到约定的分数也想去做那个‘讨厌鬼’的模特,对吗?”

“我的分数没问题,是可以到九十分的!”提起这个我也急了起来,“可是不知道哪个该死的家伙居然改了我的答案,还把老师批示好的分数也修改了!难道你不知道是谁做的吗?”

健一的脸色变得更加难看了:“没考到九十分就找借口吗?”

“我没有说谎!真的有人改了我的答案!”我想了想,问道,“那好,你先告诉我,今天早上匆匆忙忙来学校之后你都做什么了?为什么我到教室的时候没有看见你?”

“你这是什么意思?”健一的眉毛差点拧到了一起,他瞪圆了一双眼睛望着我,“你想说是我改了你的答案?我为了不让你做‘讨厌鬼’的模特而做了这么卑鄙的事情?”

“难道不是吗?你早上听到我估测的分数之后,就急忙离开了,难道不是为了早点到学校修改我的分数吗?”

“我没做过!”

“那你这么早来学校是为了什么?”

“我……”健一硬生生地将后面的话咽了回去,“反正我没有做过。”

“那你让我怎么相信你?”

“你为什么不相信我?”

虽然我很希望修改我分数的人不是健一,可是事实又是那么的残酷。我拿什么相信你?我找不到一个合理的理由来相信啊!健一居然会做这种事情?!他真的做了!

我冷冷地说道:“既然是男子汉,就要为自己做过的事情负责。你不是男子汉吗?”

“谭沫沫……你……”

是因为生气吗?健一的脸色变得比刚才还要苍白,额头上的汗也越来越多。他大口喘着气,整个人看起来很虚弱。

“健一?”虽然我因为分数的事情很生气,可是看着眼前摇摇晃晃的健一我还是愣住了,气愤的心情也像被突然泼了一盆冷水。

我赶紧上前扶住他:“你没事吧?你的脸色怎么这么难看?”

健一一把甩开我的手:“不用你管!”说完他有些痛苦地闭上了眼睛,脚下像踩着棉花一样,根本站不稳。

怎么能不管?如果我能做到就好了。我多希望他可以告诉我,虽然改了分数,可仅仅是不希望我做欧俊彦的模特,不希望我和欧俊彦在一起,因为他会吃醋,他会嫉妒。如果健一这样说了,我会毫不犹豫地原谅他。可是我不想看到这样固执的健一,真的不想!在我心里他不是那种做了错事而不敢承认的人。想到这我的眼泪忍不住掉了下来。

淘气公主求爱记2:第六章 日出下创造浪漫回忆(6)

2007年10月30日 由 Crystal 没有评论 »

“沫沫……这……”

我被她吞吞吐吐的态度弄得更急了,一把将卷子抢了过来,映入我眼帘的数字居然是……是八十九分!怎么可能呢?怎么会差一分?!这次惊呆的人换成了我。

奚然赶紧劝我:“先别着急,看看扣分的题目有没有问题。”

对!我赶紧耐心地检查着,这道题没错,这道也是……等一下!最后一道题我写的结果明明不是这个的!而且这个字迹也不是我的!我又仔细地看了一遍,没错!那不是我写的答案!

怎么会这样?怎么回事!

Vol.04

看见我失魂落魄的样子,欧俊彦伸手把我面前的卷子拿了过去。他低头看了一会,脸上的表情慢慢变得不对劲了。

奚然好奇地问:“是被人改过了?”

欧俊彦皱起了眉毛:“最后一题的答案被人改过,分数也被人改过。”

分数?!我重新拿过卷子,经他这么一说我才注意到。可不是嘛!虽然改得很仔细,但认真看的话还是能看出马脚。也就是说,我之前是可以考到九十分的,是有人故意改了我的题目和老师判的分数?!这怎么可能呢?是那些一直讨厌我的女生捉弄我吗?难道又是舒娜搞的鬼?我现在满脑子都是八十九分,只差一分!只差一分!我就可以做欧俊彦的模特帮他完成美雅的心愿了!只差一分我就可以知道水晶撒旦的事情了!

等一下!

我的目光不经意落在了健一的身上,刚好他正回头看向我这边。但是当我们的目光触碰到一起的时候,他却有些心虚地躲避开来。这一点都不像平时的他!我尽量让自己冷静下来,回想着整件事情的经过。

“考得不好吗?”

“不是啊,我觉得到九十分应该没问题。”

“什么?!”

“你慢慢吃,我还有事情先走了。咱们学校见!”

……

“小一刚刚已经回来过了,不过又急匆匆地出去了,好像要去学校上课。现在离上课时间还早,他怎么这么着急?”

健一早早来到了学校,却不见人影,一直到快上课才匆匆出现。他去哪儿了?他为什么一听到我自己估算的成绩就惊慌失措地离开?难道……难道真的是他做的?!

我紧紧握着卷子,本来平整的纸面已经被我揉得皱皱巴巴了。整整一节课我再也没有开口说过什么。他不是给我画出了重点吗?他不是主动要求帮我温习吗?昨天晚上那么温柔的他为什么要做这么卑鄙的事情?!我不知道自己到底是怎么了,胸口像压了一块大石头,连呼吸都变得困难了。

“铃……”一串熟悉的声音响起,老师走出了教室。

“沫沫,你……你还好吧?”奚然轻轻推了推我,脸上满是关心的神情。

不行!我一定要问个明白!不能这样就算了!想到这我“噌”地一下从座位上站了起来,不管三七二十一直接朝健一的座位走去。

“谭沫沫同学,找我有事?”健一发现我之后,居然装成若无其事的样子问道。他不是很喜欢叫我“饭桶”吗?为什么不叫了?天!我真要被他气死了!

“找你有事,和我出去一下吧。”我尽量压制激动的情绪,让语气听起来平和一些。可是尽管如此,坐在健一周围的几个女生还是第一时间交头接耳起来。

还没等健一回答,舒娜就回过头来看了看我。她的脸上依旧挂着那天使一般的笑容,正是这个笑容让班上的同学不管男女都很喜欢她吧?恐怕我这辈子是学不来了。

“沫沫,健一看起来不太舒服。如果不是很重要的事就以后再说吧。让他休息一下不好吗?”