- 浏览: 1449557 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (564)
- 算法 (7)
- 流金岁月 (1)
- Javascript (30)
- actionscript (108)
- as3.0 game (14)
- flex (84)
- fms2 (27)
- 正则表达式 (7)
- 开源组件代码(as3.0) (1)
- Pv3d (13)
- Cairngorm (4)
- vbs (54)
- VB程序设计 (26)
- 计算机应用与维护 (4)
- 职场实用穿衣技巧 (3)
- 历史风云 (15)
- 淡泊明志,宁静致远 (12)
- 情感 (26)
- 杂谈 (41)
- 越南风 (14)
- DirectX (9)
- Dev-cpp (11)
- 回望百年 (2)
- 建站经验 (2)
- Python (24)
- 网络赚钱 (4)
- php (2)
- html (1)
- ob0短址网 (1)
- ob0.cn (1)
- wordpress (1)
- pandas logistic (1)
- haxe (1)
- opencv (1)
- 微信小程序 (3)
- vue (3)
- Flutter (1)
最新评论
-
GGGGeek:
第一个函数滚动监听不起作用,onPageScroll可以
微信小程序--搜索框滚动到顶部时悬浮 -
naomibyron:
解决办法:工具 -> 编译选项 -> 编译器 ...
dev-c++中编译含WINSOCK的代码出现错误的解决方法 -
haichuan11:
这个…… 代码不全真的是让人很憋屈的感觉啊
actionScript 3.0 图片裁剪及旋转 -
chenyw101:
老兄能留个QQ号吗?具体的我有些东西想请教下你
用VB制作网站登陆器 -
yantao1943:
貌似有点问题,只派发一次事件啊
使用ActionScript 2.0或ActionScript 3.0处理音频文件的提示点(cue
这篇文章主要是讲解如何基于AS3来制作一个区块游戏,但仍然保持OOP的结构。
这篇文章的代码能够被诸如FlexBuilder,FlashDevilop这里的编译器解释,当然Flash IDE也可以,但是要在主场景上指明main类。
该应用程序需要一个XML文件存储地图数据,它将会被转换为实际地图显示在屏幕上。这里面是没有什么交互的,不过是区块的放置位置和管理。
程序需要X类,每个来都负责不同的功能。
1、main类:管理所有的类和所创建的实例。
2、XmlLoader:载入一个xml文件并保存他的数据。
3、Parser:解析xml到一个二维的数组当中。
4、Screen:接收parser所创建的数字来构造一个区块的矩阵。
5、Tile:单个区块,保存类型x位置和y位置。
在最后我将会给出main文件:
第一个类:XmlLoader:
package tools { import flash.events.EventDispatcher; import flash.net.URLRequest; import flash.net.URLLoader; import flash.events.Event; public class XmlLoader extends EventDispatcher{ private var _loader:URLLoader; private var _xml:XML; public function XmlLoader(path:String){ _loader = new URLLoader(); try{ _loader.load(new URLRequest(path)); }catch(e:Error){ trace("error in loading the XML file") } _loader.addEventListener(Event.COMPLETE,onLoadXml); } private function onLoadXml(event:Event):void{ //trace("xml loaded") _xml = XML(URLLoader(event.target).data) dispatchEvent(new Event(Event.COMPLETE)); } public function get xml():XML{ return _xml; } } } |
这个类接收XML文件的路径,尝试载入它。xml被载入以后,类将会dispatch一个事件,以便创建XmlLoader实例的类能够知道载入已经完成了,我们可以继续了。(这是一个非即时的操作,所有我们需要一个事件机制)。
请注意:有一个事件监听来监听载入的操作,还有一个事件的派遣-main 来接收该事件。第一个市内置的,第二个是同其他的类来连接。载入了xml数据以后,XmlLoader 的实例会保存该数据然后通过其他的类中的一个指定的getter函数来获得它。另一个应该注意到的是try & catch
来处理一些特定的错误事件,这样可以防止一个错误信息在运行中发送给用户。
第二个类:parser
解析的工作是非常的简单的,-获得一个xml对象,然后分割成行,每一行对应一个数字。在完成了划分以后,这个类的一个实例会保存数组中的行以便其他的类能够读取它。这也是由一个getter函数来完成的。_rows数组是一个二维数组。根据xml文件,其中的每一个单元都被描述成一行,每行都有若干的数字。
接收xml文件的类的结构如下所示:
package tools { public class Parser{ private var _xml:XML; private var _rows:Array; public function Parser(xml:XML){ _xml = xml; _rows = new Array(); getRows(); } private function getRows():void{ // get all rows var rows:XMLList = _xml.screen.children(); var singleRow:Array; var rowString:String = rows[i]; for(var i:uint=0;i<rows.length();i++){ rowString= rows[i]; // split numbers in string to cells in singleRow array singleRow = rowString.split(""); //save singleRow in _rows array; _rows.push(singleRow); } } //return an arra of all rows (every row is an array of numbers public function get rows():Array{ return _rows; } } } |
为了能让该工作完成,xml文件的结构应该是这样的:
<?xml version='1.0' encoding='UTF8'?> <data> <screen id="" title=""> <row>111111111111111111111111111111</row> <row>100000000000000000000000000001</row> <row>101000000000000000003300000001</row> <row>101000000000000000000000000001</row> <row>101111110000001111000000000001</row> <row>100000000000004400000000000001</row> <row>100000000000000000000111510001</row> <row>100000000000000000000000000001</row> <row>111111111111111111111111111111</row> </screen> </data> |
如果你是其他的结构需要改变一下parser。
Parser和XmlLoader都在一个名为tools的包中。
第三个类:一个视觉上的Screen:
Screen类的实例接收到数组中的数据(Parser类中所解析成的样子)然后根据数组构建一个区块的矩阵。它需要一个两层的for循环。第一层循环遍历所有的行。内部的循环来遍历行里面的所有的数字。内部的for循环每执行一次都创建一个区块,然后将他放到一个数组中(这样做可以让我们以后访问到所有的区块)。
这个类和Tile类都在一个名为"visual"的包中:
package visual { import visual.Tile; import flash.display.Sprite; public class Screen extends Sprite{ private var _screenArray:Array; private var _tiles:Array; public function Screen(screenArray:Array){ _screenArray = screenArray; _tiles = new Array(); var tile:Tile; var row:Array; // create matrix for(var i:uint=0;i<_screenArray.length;i++){ row = _screenArray[i] as Array; for(var j:uint=0;j<row.length;j++){ // create a new tile and push it to _tiles tile = new Tile(Number(row[j]),j,i) addChild(tile) _tiles.push(tile); } } } //let other classes get the tiles array. public function get allTiles():Array{ return _tiles; } } } |
第四个类:Tile:
最后的visual类是Tile类,它提供单个的区块,具有3个属性:
Type:(代码在XML来描述这一区块)
locationX-描述他在矩阵中的水平位置-数字的位置而不是像素的。
locationY-描述他在矩阵中的垂直的位置。
三个属性都是getter函数。外部的对象可以"ask"每一个区块的属性。我决定使用颜色来区分区块类型的不同。
以下是Tile类的代码:
package visual{ import flash.display.Sprite; public class Tile extends Sprite{ private var _type:uint; private var _locationX:uint; private var _locationY:uint; // colors of tiles static private var TILE_TYPES:Array = [0xDDDDDD, 0xFF00AA, 0xCC00CC, 0xCCCC00, 0x3300FF]; private const TILE_SIZE:uint = 10; public function Tile(type:uint,locationX:uint,locationY:uint){ // get parameters _type = type; _locationX = locationX; _locationY = locationY; //draw a square graphics.lineStyle(1,0x000000,0.2); // different color by type parameter graphics.beginFill( TILE_TYPES[_type],1); graphics.drawRect(0,0,TILE_SIZE,TILE_SIZE); graphics.endFill(); x=TILE_SIZE*_locationX; y=TILE_SIZE*_locationY; } public function get type():uint{ return _type; } public function get locationX():uint{ return _locationX; } public function get locationY():uint{ return _locationY; } } } |
main 类:
最后,我们让所有的东西都运行起来:
package { import flash.display.Sprite; import tools.XmlLoader; import flash.events.Event; import tools.Parser; import visual.Screen public class TileGame extends Sprite{ private var _xmlLoader:XmlLoader; private var _xmlData:XML; private var _screenParser:Parser; private var _screenArray:Array; private var _screen:Screen; public function TileGame(){ var url:String = "http://www.avgil.com/as3/tilegame/screen1.xml"; try{ _xmlLoader = new XmlLoader(url); } catch(e:Error){ trace("couldn't load XML file") } // wait till the XmlLoader will finish loading the data _xmlLoader.addEventListener(Event.COMPLETE,onXmlReady); } private function onXmlReady(event:Event):void{ //recieve the XML data from the event _xmlData = XmlLoader(event.target).xml as XML; //parse and build a screen from parsed data _screenParser = new Parser(_xmlData); _screenArray = _screenParser.rows; _screen = new Screen(_screenArray); _screen.x = 50; _screen.y = 50; addChild(_screen); } } } |
需要注意的是在创建了XmlLoader以后,需要等到XmlLoader说"OK-done"才能做起他的事情。
发表评论
-
flash和flex针对不同的目的,提供了3种不同的坐标系
2009-06-24 10:05 2764全局的就是(stage级别的) ... -
网页游戏开发入门教程
2009-06-23 10:05 3710一、简单的程序 框架 ... -
Rectangle对象在游戏开发中的应用
2009-02-19 17:09 1387一直知道在flash.geos包里面有一个Rectangle对 ... -
Flash、Flex资源收集之十全大补
2008-09-12 11:55 3309断断续续收集了Flash、Flex相关的不少资源,但好多存着 ... -
简单区块寻路程序
2008-09-11 16:17 1206最近工作忙,没什么时间写新东西,翻点以前的东西出来,呵呵这是 ... -
车运动规则(基本)
2008-09-11 16:13 1099自己做的判定!大虾们就不用看了,只供新手参考!先看看效果: ... -
AS游戏设计常用数据结构
2008-06-15 19:29 1885------------------------- -
基于时间的碰撞检测,(速度再快都能检测得到)
2008-06-15 19:23 2623什么是基于时间的碰撞检测? 首先,了解一下,什么是基于 ... -
flash游戏开发中常用到的类
2008-06-15 19:21 1690flash游戏开发中常用到的类---------------- ... -
物理公式应用详解!
2008-06-05 10:25 1320演示发现它已经沿着x,y ... -
利用c++和flash联合写游戏服务器
2008-06-05 10:12 2662c++ flash都是人们耳熟能详的东西了 有没有想过自己动手 ... -
一些Flex开源项目的整理
2008-06-04 20:34 1341Adobe APIs 主要包含corelib, mappr, ... -
关于重力的一些疑问解答
2008-06-04 17:17 1099翻译文章,原文看这里该文章中的一些信息将会帮助你模拟一些跳跃和 ...
相关推荐
在慈溪新潮塘区块的城市设计中,数据扮演着至关重要的角色。数据不仅是分析的基础,也是决策的依据。设计师可能会运用GIS(地理信息系统)技术,收集和分析地形、人口密度、交通流量等大数据,以支持科学的规划决策...
04.AxureUX中后台管理信息系统通用原型设计方案 v2(区块组合).rp 04.AxureUX中后台管理信息系统通用原型设计方案 v2(区块组合).rp 04.AxureUX中后台管理信息系统通用原型设计方案 v2(区块组合).rp 04.AxureUX中后台...
KB-1B V3.0是一款电子设备的电路板设计,其原理图是理解该电路板功能、结构和工作原理的关键文档。这份"KB-1B V3.0原理图"详细描绘了电路板上各个元器件的布局、连接方式以及信号流程,是工程师进行设计分析、故障...
3.0版本更实现了区块的跨列布局功能,进一步增强了布局的灵活性,可以使用这个功能实现对网页布局的各种布局组合。 页面样式方面: 页面样式方面蝉知系统实现了模板 + 风格的体系。模板决定了页面的代码结构,风格...
蝉知企业门户系统是由...蝉知3.0版本实现了区块的跨列布局和模板风格样式的自定义功能,进一步增强了蝉知系统的定制性。加上之前实现的区块布局、模板风格等功能,蝉知系统可以说是目前可定制性最强的企业门户系统。
网上下载的区块狗源代码,分享给大家!以前叫区块狗,其实里面写的区块鱼,我想了想应该是一套。叫啥都无所谓,就是区块动物,区块+动物就行了呗。要不试试区块外星人?
华登区块狗、摩根区块猪、区块神兽世界、区块猫、吉祥猪、区块猪、区块兔、区块十二生肖等等,都是玩法非常相似的区块链DAPP。 区块链APP每只宠物的生成由系统程序智能生成,任何人无法篡改,同时也增加游戏的趣味...
这个压缩包“ckeditor_3.0.zip”包含了该编辑器的完整版本,允许用户在网页上创建和编辑内容,就像在桌面应用程序中一样。CKEditor 3.0 提供了丰富的文本格式化选项,支持图片插入和文件上传,极大地提升了用户在...
没错,就是目前很火的区块狗系统源码,此系统本人花一万多买的。现在淘宝上互钻上卖的都是这个源码。现在完全分享给大家。如果有能力的做二开更完美。
6. **组件**:Bootstrap3.0包含诸如`.jumbotron`大块内容展示区,`.thumbnail`缩略图,`.well`阴影效果区块,`.alert`提示信息,`.badge`徽章,`.label`标签等丰富组件。 7. **响应式工具**:`.visible-*-*`和`....
华登区块宠物养殖系统莱特区块狗区块猫源码 完美运营版本.zip
目前很火的区块狗系统源码。本人在CSDN下载的该源码,解决了按照文档搭建出现的各种问题(如:Failed opening required ),该源码可正常运行。为了帮助大家能正常的运行,我把构建中需要注意的地方追加到文档后面。
2020运营版华登区块狗区块彼特猪区块系统源码
华登区块鱼区块宠物养殖系统源码 完美修复版,派特宠物街模式区块链源码,程序配套有安卓APP,APP在\\\\public\\\\app目录,内附安装教程
区块数据
华登区块狗区块鱼区块宠物养成系区块猫
### XOOPS区块的相关设置知识点详解 #### 区块概述 XOOPS是一个强大的内容管理系统,其区块(Blocks)是构成网站界面...通过以上步骤,可以有效地管理和定制XOOPS中的区块,从而实现更加个性化和功能丰富的网站设计。