电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 图形图象-> Director教程
用面向对象的方法在director中实现滚动条_director教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
在国外,越来越多的DIRECTOR程序员倾向用LINGO中的对象概念来编写他们的程序。这主要是基于以下几点:1:提高代码重用率。2:减少代码的复杂度。

  因为在DIRECTOR编程中经常会碰到这种情况:很多STAGE(舞台)上的SPRIRITE(精灵) 具有相同或相似的性质。比如编写一个射击不断下落的彩球的游戏,不同的彩球除了颜色和大小等属性不同外,具有相同的下落速度和消失方式。如果我们为每一个彩球编写 一套代码,则一百个小球就会有一百套相似的代码。这无疑会增加程序的复杂度。用LINGO中对象的概念可以只实现一个彩球的父脚本,由此派生出一百个具有不同属性的彩球。

  LINGO并不是一种面向对象的语言(如C++),它原为一种脚本语言,在DIRECTOR4.0时才引 入了面向对象的概念。所以它有着先天的不足。这一点在对象的继承上表现最明显。但这 并不影响在LINGO中广泛使用对象。现在我就把传统C++的对象概念与LINGO中的对象概念作一个对比。

C++ LINGO
对象 父脚本
成员变量 属性
成员函数 句柄
实例或对象指针 对象ID号

  其实LINGO中的对象要比想象的简单。首先要在脚本的Script cast Member Properties 中将要设为父脚本的脚本类型(type)设为Parent。

  父脚本是为单独对象编写的通用脚本。它应具有一些属性和最少一个NEW句柄(注: DITECTOR4.0为BIRTH句柄)用以派生对象。以人为例。它的脚本应类似如下的句柄,

---Parent Script of Human----cast name 为parent:Human
property Age
property Gender
property Height
property Weight
property Heartbeat
.......。

on new me,pAge,pGender,pHeight,pWeight,pHeartbeat... --NEW句柄必需有
set Age = pAge
set Gender = pGender
set Height = pHeight
set Heartbeat = pHeartbeat
......

return me ---此语句用以返回对象ID号
end 

on heart me
if (Heartbeat = 0 ) then
alert \"He or she is Dead\")
return
end

  对象中的句柄的第一个参数必为me.当调用父脚本生成对象时,每一次调用产生不同的对象ID号用以区分同一脚本派生的不同对象。具体调用如下: set HumanObject = new(script\"parent:Human\") 将对象IDH号存入HumanObject变量。如何调用对象句柄呢? 只要将包含ID号的对象句柄参数传给对象句柄就可以了。例如:heart(HumanObject)。

  以上简单解释了LINGO中的对象用法。现在用它来实现一个滚动条对象。 很多DIRECTOR用户都知到DIRECTOR中的滚动条很难看,有点类似早期MACINTOSH的界面。 用它作出的图形很不和谐。用LINGO对象,你可以扩展成任何形式的滚动条,定做自己的滚动条和滚动块以及滚动面板。具体LINGO 原码如下:

  我在这里做一些解释:滚动条对象包含以下属性:
-- Scroller scriptproperty pnVisibleLines --滚动框中的可见行数
property pOnScreenField -- 视屏文字域的名字或脚色号property pchThumb -- 滑动块的通道号
property pchScrollBar -- 滑动杆的通道号
property pTheTextString -- 滚动文字
property pCurrentTopLine -- 当前最高行号
property pStartLineOfLastFullScreen -- 上一满屏的起始行号
property pThumbTop -- 滑动杆所能到的最高偏移值(pixel计算)
property pThumbBottom -- 滑动杆所能到的最低偏移值(pixel计算)
property pThumbRange -- 滑动杆所能移动范围(pixel计算) property pHeightPerLine -- 每一文字行的高度(pixel计算)

  --滚动条对象包含以下句柄:

--用于初始化的NEW句柄
on new me, textString, targetField, visibleLines, chScrollBar, chThumb
set pTheTextString = textString
set pOnScreenField = targetField
set pnVisibleLines = visibleLines
set pchScrollBar = chScrollBar
set pchThumb = chThumb
set pThumbTop = the top of sprite pchScrollBar + (the height of sprite pchThumb / 2)
set pThumbBottom = the bottom of sprite pchScrollBar - (the height of sprite pchThumb / 2)
set pThumbRange = pThumbBottom - pThumbTop
set pStartLineOfLastFullScreen = the number of lines of pTheTextString - (pnVisibleLines - 1)
set pHeightPerLine = float(pThumbRange) / float(pStartLineOfLastFullScreen - 1)
set pCurrentTopLine = 1
mScroll(me, 0)
puppetSprite pchThumb, TRUE
return me
end birth

on mHitScrollArrow me, upOrDown --单击滚动杆的上下箭头的句柄
set chArrow = the clickOn
if upOrDown = #Up then
set scrollAmount = -1
else
set scrollAmount = 1
end if
mScroll(me, scrollAmount)
repeat while the mouseDown
mScroll(me, scrollAmount)
end repeatend
mHitScrollArrow

on mHitScrollBar me --单击滚动杆的句柄
if the mouseV > the locV of sprite pchThumb then mScroll(me, (pnVisibleLines - 1))
repeat while the stillDown AND (the bottom of sprite pchThumb < the mouseV)
mScroll(me, (pnVisibleLines - 1))
end repeatelse
mScroll(me, -1 * (pnVisibleLines - 1))
repeat while the stillDown AND (the top of sprite pchThumb > the mouseV)
mScroll(me, -1 * (pnVisibleLines - 1))
end repeat
end if
end mHitScrollBar

on mDragThumb me --拖动滚动块的句柄
repeat while the mouseDown
set newMouseV = the mouseV
if newMouseV >= pThumbBottom then
set newMouseV = pThumbBottom
else if newMouseV <= pThumbTop then
set newMouseV = pThumbTop
end if
set the locV of sprite pchThumb = newMouseV
updateStage
end repeat
set pct = float(newMouseV - pThumbTop) / float(pThumbRange)
set tempTopLine = pStartLineOfLastFullScreen * pct
set pCurrentTopLine = integer(tempTopLine + 0.5)
if pCurrentTopLine = 0 then
set pCurrentTopLine = 1
end if
mScroll(me, 0)
end mDragThumb

on mScroll me, nLines --滚动nLines行
set pCurrentTopLine = (pCurrentTopLine + nLines)
if (pCurrentTopLine < 1) then
set pCurrentTopLine = 1
end if
if pCurrentTopLine > pStartLineOfLastFullScreen then
set pCurrentTopLine = pStartLineOfLastFullScreen
end if
set the text of field pOnScreenField = line pCurrentTopLine to (pCurrentTopLine + (pnVisibleLines - 1)) of pTheTextString
set pixelOffset = integer(pHeightPerLine * float(pCurrentTopLine - 1))
set the locV of sprite pchThumb = pThumbTop + pixelOffset
updateStage
end mScroll

  尽管对象的概念对一些用户来说并不好理解,但LINGO中对象的使用将必然在DIRCTOR 高级编程中占主要地位。我使用LINGO对象编程时间不常。希望与DIRECTOR爱好者们探讨这方面的问题。

 


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·director技巧--关于text scroll 的问题_director教程
·lingo常用辞典- c_director教程
·lingo常用辞典- c_director教程
·lingo常用辞典- c_director教程
·lingo常用辞典- d_director教程
·lingo常用辞典- e_director教程
·lingo常用辞典- f_director教程
·lingo常用辞典- g_director教程
·lingo常用辞典- h_director教程
·lingo常用辞典- i_director教程

最新文章
·windows xp操作系统中隐藏的20个秘密_windows xp
·photoshop定义粗大虚线笔刷绘制幽默自画像_photoshop教程
·photoshop为七夕情人节打造亲密爱人相框_photoshop教程
·photoshop通道互换法调整照片色调_photoshop教程
·director生成文件减肥技巧_director教程
·用director控制动画gif_director教程
·director怎样制作自定义光标_director教程
·利用director.ini调试应用程序_director教程
·director使用mui xtra创建对话框_director教程
·director应用技巧_director教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号