




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Neusoft成都东软信息技术职业学院毕业实习报告毕业实习报告题目系别学生姓名学号专业班级指导教师(网络版)Flash中国象棋2008年3月18日2008年6月6日摘要这是我第二款自主研发的Flash游戏,采用ActionScript3.0脚本语言,主要目的还是想加强对新版本的熟练运用。目的显然是达到了,无论是图像的处理,声音的处理,相关类库的运用,功能函数的编写,动画制作,各个模块的划分,还是事件运用等都已经达到了我预期的目标。唯一让我遗憾的是脚本是写在内部,按照新版本开发目的,应该把脚本写在脱离Flash本身以外的,但对这一块我还不习惯,所以还是采用 2.0 的方式写在了内部,在调用一些全
2、局变量和全局函数的过程中遇到了很大的困惑, 这也是将代码写在内部唯一的困扰, 求助了很多朋友,才解决了相关问题。游戏难点在于棋子载入的摆放和移动上。 应为是 2 用户游戏, 所控制的棋子是不同的,采用的是根据服务器发送的 ID 号进行阵营的划分,并分别对所控制的棋子进行监听以达到分别控制而不会影响另一阵营的棋子。 棋子的移动采用方案是:在整个棋盘的“十字交叉”出放置一个对象,目的是获取固定的移动点,当鼠标点击“十字交叉”处时,实际上获取的是这个对象的坐标,这样每个棋子移动就很规范了,不会出现位置偏差。关键字: ActionScript3.0 ActionScript2.0 Flash 游戏 交
3、互程序目录摘要 - 2 -目录- 3 -第一章 引言 - 5 -第二章 程序分析 - 6 -2.1 游戏功能 - 6 -2.2 操作分析 - 6 -2.3 对象控制 - 7 -2.4 连接socket服务器 -7 -2.5 执行过程 - 7 -第三章 编写游戏原型- 8 -3.1 创建游戏舞台 - 8 -3.1.1 项目准备 - 8 -3.1.2 片头制作 - 8 -3.1.3 音效 - 9 -3.2 服务器连接- 11 -3.2.1 创建 XMLSocket 连接 -11 -3.2.2 发送数据 - 11 -3.2.3 接收数据 - 12 -3.3 棋子摆放划分- 12 -3.4 棋子移动控
4、制 - 15 -3.5 移动规则 - 16 -3.5.1 车的移动规则: -16 -3.5.2 马的移动规则 -17 -3.5.3 像的移动规则 -18 -3.5.4 仕的移动规则 -19 -3.5.5 帅将移动规则: -19-3.5.6 兵的移动 -20-第四章 数据传递与解析- 22 -致谢: -24-参考文献-25-第一章 引言可以毫不夸张地说:是 Actionscript的发展推动着Flash应用的不断成功。而Flash应用的不断成功,也为 ActionScript的发展提供了更广阔的舞台。随着 FlexBuilder2 和 Flash CS3的发布,ActionScritpt 3.0
5、 横空出世了。 .ActionScript3.0 的推出使脚本语言的发展上升到新的高度。 人们对交互体验需求的日益增长, Flash 已经突破网站设计的单一领域,扩展到诸如动画制作,交互设计,视频点播,手持移动设备,在线社区,游戏制作等诸多领域。我一直认为,无论是flashCS3也好,Flex Builder也好,或者什么都好,作为开发环境而言, 并没有优劣之分。 直到现在, 我群里还有好多人在争论到底哪一个更好些的问题。其实,无论是RIA 何种应用,游戏,网站,动画展示等,无非都是以“ swf”为后缀的文件,用Flash Playe解析呈现而已,这是Flash在终端所展示的形态。如果熟悉Ac
6、tionScript, ,在这个平台里,你可以尽情地按照你的想象来发挥,我相信现在的 Actionscript3.0 有着非常优秀的架构体系和宽广的应用。知识点之间的交叉贯通和灵活搭配是ActionScript3.0 开发的难点。本flash游戏是一个带有简单服务器的交互游戏, 通过本地客户端向异地客户端发送信息进行响应操作, 用户可以通过鼠标的点击来生成一个数据包, 并将这个数据包发送给服务端, 通过服务端转发给异地客户端, 涉及到 ActionScript3.0 开发中所有的主要知识,包括sockt 通信,流程控制,数组操作,面向对象开发,图形图像操作等。在自由运用这些知识的基础上,最终完
7、成交互游戏的程序开发。第二章程序分析在开始编写游戏代码之前,需要分析游戏的功能和模块划分,确定用户的操 作方式。2.1 游戏功能在玩家执行游戏时,程序游戏能够动态的加载库里面的元件和图形和声音。 创建如图示的游戏场景,1210.0,1 I I :|1300U登陆前登陆中登陆前和登陆中我们可以视作一个片头,程序的真正场景是登陆后的场景。在登陆后的场景中包含3种主要元素:游戏舞台,棋子,棋盘,棋盘交叉点。从 库里面加载的棋子和棋盘交叉点都被程序摆放在棋盘的相应位置上,棋盘交叉点是看不见的它与背景同色。游戏舞台提供了游戏的屏幕界面,是所有游戏元件的 载体。2.2 操作分析交互游戏必须提供交互功能。游
8、戏中将会有鼠标控制。当用户使用鼠标操作 游戏屏幕上的棋子时,游戏程序需要处理棋子的移动,并将移动的信息发送给服 务器。所有的棋子都能够接受用户的鼠标单击。但是只有自己的棋子才能移动。 且每颗棋子有自己的移动规则限制。2.3 对象控制在控制棋子的移动中, 我们并不需要去指定某个具体的棋子的移动, 我们可以建立一个Sprite 对象,使它成为所有棋子的载体,在点击棋子时,将棋子对象赋值给这个载体,控制这个载体就是控制指定的棋子。2.4 连接socket 服务器要连接socket服务器首先要知道服务器的域名或IP地址,还要知道端口, 使用XMLSocket,用connect。方法进行连接,该方法接受
9、两个参数,即IP和端口。2.5 执行过程在游戏场景创建后, 程序必须侦听用户的操作。 游戏是通过发送数据包来进行 2 人交互游戏的, 所以这里涉及到解析信息, 并对信息作出相应的操作。 首先从第一个用户开始,当他输入IP和端口号,点击登陆按钮时,这时已经开始了信息的传递,连接上服务器以后,服务器会自动给用户分配一个ID ,并保持在等待状态,一旦有其他玩家登陆,服务器会再次向1 号用户发送信息,提示可以进入游戏,双方就可以同时进入游戏。游戏进行时, 用户采用鼠标移动棋子的位置, 程序要及时发送事件数据给服务器,使另外的用户作出操作。第三章 编写游戏原型对于功能较为复杂的项目, 一般需要开发一个实
10、现最核心功能的原型。 在编写原型的过程中,实现游戏的最基本结构和功能。除了最基本的程序功能之外,原型中应该包含丰富的调试信息输出,以便于程序的追踪和改进。在本游戏中, 游戏原型被限定为最基础的程序支持功能。 我们要建立的游戏原型如同一幢基础的地基,在最终的作品中发挥基础的作用。从编码风格的角度考察,在编写游戏原型时采用的代码更趋于清晰和易懂,而不是偏重性能和效率。3.1 创建游戏舞台3.1.1 项目准备运行Flash CS3环境,新建ActionScritp3.0项目,设置理想的舞台宽高,将相关图片导入到库中, 如游戏背景图片, 这里我们不用动态加载背景图片了, 直接从库中拖出放入舞台, 调整
11、背景大小, 使之与舞台等宽高。 新建一个影片剪辑,绘制一个棋盘,棋盘格子间隔为 60 像素。完毕后拖到舞台。3.1.2 片头制作制作一个枫树叶向下飘落的片头, 在元件中运用引导线和补间动画使枫树叶向下飘落,制作完毕我们就来动态的载入它var yezi=new piao()yezi.height=300yezi.width=250yezi.x=277;yezi.y=353;addChild(yezi)这段代码创建了一个piao的对象yezi, piao是枫叶飘落元件的连接名, 对 yezi 的操作既是对元件的操作,设置完毕后将其显示addChild(yezi) 。制作两个棋盘的旋转特效var x
12、uan:Sprite=new Sprite()addChild(xuan)var xu1=new xuanzhuan() var xu2=new xuanzhuan()xu1.x=200xu2.x=380xu1.y=xu2.y=290xuan.addChild(xu1)xuan.addChild(xu2)xuan.addEventListener (Event.ENTER_FRAME,xuanEnterFrame);function xuanEnterFrame(eve:Event):voidxu1.rotation+=1; xu2.rotation-=1 这段代码创建了一个Sprite对象x
13、uan,它将做为以下xu1和xu2父对象,方 便对xu1和xu2的同时控制,设置完xu1和xu2 (两个棋盘的对象)的位置后要 让它旋转,对xuan 注册一个侦监听函数xuan.addEventListener(Event.ENTER_FRAME,xuanEnterFrame);函数 xuanEnterFrame功能为 xu1.rotation+=1; xu2.rotation-=1 , 即棋盘 1 每侦顺时针旋转1, 棋盘 2 每侦逆时针旋转 1。3.1.3 音效本游戏有 3 个音效元件,分别为背景音效,胜利音效,失败音效。/ 背景声音var chl:SoundChannelvar temp
14、st:SoundTransform var mysound:Sound=new BJ()/揩景音乐chl= mysound.play(0,200000); /重 0 位置开始播放,播放200000遍tempst=chl.soundTransformtempst.volume=0.5/声音大小chl.soundTransform=tempst/-胜利声音定义var sheng:SoundChannelvar tempst_1:SoundTransformvar s_l:Sound=new shengli()/sheng=s_l.play(0,1)/播放一遍/tempst_1=sheng.soun
15、dTransform /先不启用/tempst_1.volume=0.5/声音大小/sheng.soundTransform=tempst_1/ 失败声音定义var bai:SoundChannelvar tempst_2:SoundTransformvar s_b:Sound=new shibai()/bai=s_b.play(0,1)/播放一遍/tempst_2=sheng.soundTransform /先不启用/tempst_2.volume=0.5/声音大小/bai.soundTransform=tempst_2从库中加载声音元件后, 音量会很大, 这时我们要控制好音量, 使用户可以
16、自定义音量的大小。使用 SoundTransform类配合SoundChannel对象控制音量的 大小。SoundChannel对象包含一个SoundTransform类型的属性,可以创建一个 SoundTransform对象,并覆盖这个属性,达到改变声音音量的目的。SoundTransform的构造函数包含两个参数,第一个参数表示声音,是 0至1的小数;第二个参数表示声音的左右声道平衡。可以使用 SoundTransform的 volume属性修改一个现有SoundTransform对象的音量。这里除了背景音乐会在 用户启动程序就开始播放外, 胜利声音和失败声音暂时不启用, 等待事件的促发时
17、再启用。3.2 服务器连接XMLSocket 相对 URLoader 是低层次的类,但是对于基于二进制传输的Socket类,它却非常的高级。使用XMLSocket不需要关心具体的信息流和信息 编码,而是在XML 对象和文档的层面发送和接受信息。3.2.1 创建 XMLSocket连接创建 XMLSocket 连接的方法是使用 XMLSocket 类的构造函数, 并提供地址和端口号:XMLSocket(houst:String=null,port:int=0)游戏中: import .XMLSocket /装载 XMLSocket 类 var sock = new XMLSocket() / 创
18、建一个 XMLSocket 对象第一个参数是一个字符串,指定 XMLSocket 连接服务器的地址。地址可以是完整的域名,或数字形式的IP地址。第二个参数。如果没有提供充足的参数,则建立一个未连接的 XMLSocket 对象。可以在代码中使用“connect'方法再次指定连接:Connect(host:String, port:int):void游戏中: sock.connect(i_p,p_r)3.2.2 发送数据Send(object:*):voidObject 参数中指定的 XML 对象或数据转换成字符串,并将其传输到服务器,后面跟有一个(0)字节;游戏中: sock.send(
19、objct:*)发送数据的前提是XMLSocket 对象必须是真正的连接。3.2.3 接收数据当服务器发出 XML 信息时, XMLSocket 连接在获得该消息后, FlashPlayer 将发出 DataEvent.DATA 事件。响应该事件,并在侦听器中查询事件对象。DataEvent事件对象包含一个data属性,包含了该事件加载的数据。sock.addEventListener(DataEvent.DATA,onsoketdata) /注册事件侦听函数function onsoketdata(event:DataEvent):void/接收函数var f = new String(ev
20、ent.data);j = f.split(",");将接收到的信息event.data转换成字符串赋值给f,再将字符串用逗号隔开放入数组j中。3.3 棋子摆放划分游戏的棋子是动态从库中载入的, 所以需要对每颗棋子载入时摆放位置进行定位,对于本游戏,由于是位置是对称的,定义一个函数,向函数中传递摆放的参数达到对称摆放的目的var play1_y:Number=556var play2_y:Number=27var bla_bing_y:Number=207;var red_bing_y:Number=376var red_pao_y:Number=436var bla_pa
21、o_y:Number=147functiondisplay(pla1_y:Number,pla2_y:Number,red_bing:Number,bla_bing:Number,red_pao: Number,bla_pao:Number,listener:Number):void/ 红方red_che=new re_che();red_che.x=23;red_che.y=pla1_y;addChild(red_che);red_ma=new re_ma();red_ma.x=83;red_ma.y=pla1_y;addChild(red_ma) red_xiang=newre_xiang
22、();red_xiang.x=143;red_xiang.y=pla1_y;addChild(red_xiang)red_shi=new re_shi();red_shi.x=203;red_shi.y=pla1_y;addChild(red_shi)red_shuai=new re_shuai();red_shuai.x=263;red_shuai.y=pla1_y;addChild(red_shuai)/red1_shi=new re1_shi();red1_shi.x=323;red1_shi.y=pla1_y;addChild(red1_shi);red1_xiang=newre1_x
23、iang();red1_xiang.x=383;red1_xiang.y=pla1_y;addChild(red1_xiang);red1_ma=new re1_ma();red1_ma.x=443;red1_ma.y=pla1_y;addChild(red1_ma);red1_che=new re1_che();red1_che.x=503;red1_che.y=pla1_y;addChild(red1_che);/red1_bing=newre1_bing();red1_bing.x=23;red1_bing.y=red_bing;addChild(red1_bing);red2_bing
24、=newre2_bing();red2_bing.x=143;red2_bing.y=red_bing;addChild(red2_bing);red3_bing=newre3_bing();red3_bing.x=263;red3_bing.y=red_bing;addChild(red3_bing);red4_bing=newre4_bing();red4_bing.x=383;red4_bing.y=red_bing;addChild(red4_bing);red5_bing=newre5_bing();red5_bing.x=503;red5_bing.y=red_bing;addCh
25、ild(red5_bing);/red1_pao=new re1_pao();red1_pao.x=83;red1_pao.y=red_pao;addChild(red1_pao);red2_pao=new re2_pao();red2_pao.x=443;red2_pao.y=red_pao;addChild(red2_pao);/ 黑方bla_che=new bl_che();bla_che.x=23;bla_che.y=pla2_y;addChild(bla_che)bla_ma=new bl_ma();bla_ma.x=83;bla_ma.y=pla2_y;addChild(bla_m
26、a) bla_xiang=newbl_xiang();bla_xiang.x=143;bla_xiang.y=pla2_y;addChild(bla_xiang)bla_shi=new bl_shi();bla_shi.x=203;bla_shi.y=pla2_y;addChild(bla_shi)bla_jiang=new bl_jiang();bla_jiang.x=263;bla_jiang.y=pla2_y;addChild(bla_jiang)/bla1_shi=new bl1_shi();bla1_shi.x=323;bla1_shi.y=pla2_y;addChild(bla1_
27、shi)bla1_xiang=newbl1_xiang();bla1_xiang.x=383;bla1_xiang.y=pla2_y;addChild(bla1_xiang)bla1_ma=new bl1_ma();bla1_ma.x=443;bla1_ma.y=pla2_y;addChild(bla1_ma)bla1_che=new bl1_che();bla1_che.x=503;bla1_che.y=pla2_y;addChild(bla1_che)/bla1_bing=newbl1_bing();bla1_bing.x=23;bla1_bing.y=bla_bing;addChild(
28、bla1_bing)bla2_bing=newbl2_bing();bla2_bing.x=143;bla2_bing.y=bla_bing;addChild(bla2_bing)bla3_bing=newbl3_bing();bla3_bing.x=263;bla3_bing.y=bla_bing;addChild(bla3_bing)bla4_bing=newbl4_bing();bla4_bing.x=383;bla4_bing.y=bla_bing;addChild(bla4_bing)bla5_bing=newbl5_bing();bla5_bing.x=503;bla5_bing.
29、y=bla_bing;addChild(bla5_bing)/bla1_pao=new bl1_pao();bla1_pao.x=83;bla1_pao.y=bla_pao;addChild(bla1_pao)bla2_pao=new bl2_pao();bla2_pao.x=443;bla2_pao.y=bla_pao;addChild(bla2_pao) /当玩家从服务器那得到 1 号 ID 时,他调用 display 函数时:display(play1_y,play2_y,red_bing_y,bla_bing_y,red_pao_y,bla_pao_y,1)会得至 U 红棋,2 号用户
30、在调用 display 函数时:display(play2_y,play1_y,bla_bing_y,red_bing_y,bla_pao_y,red_pao_y,2)可以发现play1_y和play2_y互换了,从而得到黑棋,也就是说,先登录的始终是会得到红棋的。3.4 棋子移动控制棋子的移动是以鼠标的点击来确定移动点和别移动对象向的, 从一般思想上来讲可以对每次鼠标的点击进行监控来获取对象, 然而由于对象过多, 且每个对象有自己移动规则, 如果对每个对象进行分析识别, 那样会非常繁琐, 且在棋盘上移动的点是固定而准确的, 而鼠标点击的坐标是有误差的。 对于棋子来说就需要一个对象来承载所有的
31、点击的棋子对象。 对于点来说, 要想获得准确的点, 需要向固定点上放置一个固定对象, 鼠标点击这个对象, 并获取这个对象的坐标就能获得需要的移动点。var empty=new Sprite()/建立承载对象var type=new Sprite()/这个承载对象用来获取对象名function qizi(even:MouseEvent):voidempty=even.currentT=(even.currentT)/trace()当鼠标点击棋子时,将棋子点击对象赋值给empty,将对象名赋值给, 这样如果要访问点
32、击对象可直接访问empty要控制点击对象可直接控制empty.当把所有的点摆放在特定位置时,我们给每个点注册一个侦听函数:dian1.addEventListener(MouseEvent.CLICK,fu_dian) /注册点侦听function fu_dian(event:MouseEvent):voidempty.y= even.currentTarget.y 鼠标点击dianl,会触发fu_dian函数执行内部操作,即将已经赋有棋子对象 的 empty 移动到当前点击的点上。3.5 移动规则移动规则是整个游戏的重点, 由于象棋的每个棋子有其各自的移动规则, 显 得就有些复杂了,棋子的移
33、动应该是与移动点联系在一起的,所以把规则写在fu_dian 函数中3.5.1 车的移动规则:车是只能与自己 X 坐标或 Y 坐标相同的点才能移动,且如果中间有其它棋子是无法移动到该点的, 判断路径上是否有其它棋子的方法是遍历所有棋子, 查 找与自己 X 坐标相同或Y 坐标相同的点,如果存在则无法移动,如果不存在则可以移动if(event.currentTarget.x=empty.x|event.currentTarget.y=empty.y) for(var i=0;i<=31;i+)if(my_arrayi.x=empty.x&&my_arrayi.y>empt
34、y.y&&my_arrayi.y<event.curren tTarget.y)|(my_arrayi.x=empty.x&&my_arrayi.y<empty.y&&my_arrayi.y>eve nt.currentTarget.y)|(my_arrayi.y=empty.y&&my_arrayi.x>empty.x&&my_array i.x<event.currentTarget.x)|(my_arrayi.y=empty.y&&my_arrayi.x<e
35、mpty.x&&m y_arrayi.x>event.currentTarget.x)pd=false/默认pd 初始值为 truebreak; if(pd=true)empty.x=event.currentTarget.xempty.y=event.currentTarget.y 3.5.2 马的移动规则马的移动是斜日, 这里采用计算起始点和目标点的距离, 并对距离进行判定可以达到限制马的移动规则。 在这个大的前提下, 还要对起始点邻接点进行判定,如果邻接点上有其它棋子,马将无法移动if(Math.sqrt(empty.x-event.currentTarget.x)
36、*(empty.x-event.currentTarget.x)+(empty .y-event.currentTarget.y)*(empty.y-event.currentTarget.y)>120&&Math.sqrt(empty. x-event.currentTarget.x)*(empty.x-event.currentTarget.x)+(empty.y-event.currentTarg et.y)*(empty.y-event.currentTarget.y)<=Math.sqrt(18000)for(var i_ma=0;i_ma<=31;
37、i_ma+)if(Math.sqrt(my_arrayi_ma.x-empty.x)*(my_arrayi_ma.x-empty.x)+(my_arrayi_ ma.y-empty.y)*(my_arrayi_ma.y-empty.y)<=60)/马的邻居if(Math.sqrt(event.currentTarget.x-my_arrayi_ma.x)*(event.currentTarget.x-my_arr ayi_ma.x)+(event.currentTarget.y-my_arrayi_ma.y)*(event.currentTarget.y-my_arr ayi_ma.y)
38、<=Math.sqrt(7200)pd=false; /pd 默认为 falsebreak;if(pd=true)empty.x=event.currentTarget.x3.5.3 像的移动规则像的移动方式为斜田, 其只能在己方区域移动, 同时, 如果斜田中间存在其它棋子,则无法移动,同样可以采用计算两点之间的距离判定是否能移动。if(event.currentTarget.y>=316)if(Math.sqrt(empty.x-event.currentTarget.x)*(empty.x-event.currentTarget.x)+(empty .y-event.curre
39、ntTarget.y)*(empty.y-event.currentTarget.y)=Math.sqrt(28800)for(var i_xiang=0;i_xiang<=31;i_xiang+)if(Math.sqrt(my_arrayi_xiang.x-empty.x)*(my_arrayi_xiang.x-empty.x)+(my_arr ayi_xiang.y-empty.y)*(my_arrayi_xiang.y-empty.y)<120&&Math.sqrt(my_array i_xiang.x-empty.x)*(my_arrayi_xiang.x-
40、empty.x)+(my_arrayi_xiang.y-empty.y) *(my_arrayi_xiang.y-empty.y)>60)/像的中点if(Math.sqrt(event.currentTarget.x-my_arrayi_xiang.x)*(event.currentTarget.x-my_ arrayi_xiang.x)+(event.currentTarget.y-my_arrayi_xiang.y)*(event.currentTarget.y -my_arrayi_xiang.y)<=Math.sqrt(7200)pd=false;break;if(pd=t
41、rue)empty.x=event.currentTarget.xempty.y=event.currentTarget.y3.5.4 仕的移动规则仕的移动是在一定区域, 以斜口的方式移动, 通过计算起始点与目标点间的直线距离来判断是否可以移动if(event.currentTarget.x>=203&&event.currentTarget.x<=323&&event.currentTarget. y>=436)if(Math.sqrt(empty.x-event.currentTarget.x)*(empty.x-event.current
42、Target.x)+(empty .y-event.currentTarget.y)*(empty.y-event.currentTarget.y)!=Math.sqrt(7200)pd=falseif(pd=true)empty.x=event.currentTarget.xempty.y=event.currentTarget.y3.5.5 帅将移动规则:帅和将的移动与仕类似,只是两点间的距离不同而已if(event.currentTarget.x>=203&&event.currentTarget.x<=323&&event.currentTa
43、rget. y>=436)if(Math.sqrt(empty.x-event.currentTarget.x)*(empty.x-event.currentTarget.x)+(empty .y-event.currentTarget.y)*(empty.y-event.currentTarget.y)!=60)if(pd=true)empty.x=event.currentTarget.x empty.y=event.currentTarget.y 3.5.6 兵的移动兵的移动有两种情况, 一种在己方只能前不能左右, 另一种是在敌方能前能左右,但都不能后退if(event.curre
44、ntTarget.y<316) /第一种情况if(Math.sqrt(empty.x-event.currentTarget.x)*(empty.x-event.currentTarget.x)+(empty .y-event.currentTarget.y)*(empty.y-event.currentTarget.y)>60|event.currentTarget.y> empty.y)pd=false;if(pd=true)empty.x=event.currentTarget.x empty.y=event.currentTarget.y if(event.curre
45、ntTarget.y>=316) /第二种情况if(Math.sqrt(empty.x-event.currentTarget.x)*(empty.x-event.currentTarget.x)+(e mpty.y-event.currentTarget.y)*(empty.y-event.currentTarget.y)>60|event.currentTarg et.y=empty.y|event.currentTarget.y>empty.y)pd=falseif(pd=true)empty.x=event.currentTarget.xempty.y=event.currentTarget.y第四章 数据传递与解析游戏需要两个人同时登陆服务器才能进行, 通过向服务器发送操作信息, 再
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司流程业务管理制度
- 公司章程经营管理制度
- 公司财务档案管理制度
- 2025年度家具采购合同样本
- 河北省承德县2024-2025学年高一下册期中考试数学试卷附解析
- 广东省广州市2024-2025学年高二下册期中考试数学试卷附解析
- 2025年中考语文(长沙用)课件:微专题精讲 SOLO评价法(分层赋分)
- 2024~2025学年 重庆市高一语文上册第一学月考试试卷附答案
- 智能调度与优化控制-洞察阐释
- 2024年龙岩市新罗区教育局招聘真题
- 高考日语基础归纳总结与练习(一轮复习)
- 2023年新疆初中学业水平考试生物试卷真题(含答案)
- 笔记尤里奇-《HR人力资源转型》
- 水电站压力钢管安装施工方案
- 这么写网约车事故索赔误工费的起诉状更容易胜诉
- 公安机关业务技术用房建设标准正文
- 兰州卫浴配件项目可行性研究报告
- GA 915-2010讯问椅
- 常见急救知识培训课件
- (人教版教材)初中地理《巴西》完整版
- 律师事务所业务操作规程
评论
0/150
提交评论