
灵翼
称号:灵动大佬
- 头衔:灵动管理员
- UID:2
- 精华贴:
4
- 威望值:
100
- 魅力点:
0
- 功勋值:
2
- 经验数:
180
- 积分点:
138
- 灵动币:
398
- 状态:
在线
帖子:382
- 最后报道:
2008-11-23
|
flash8的游戏制作(地图篇)
研究flash 8制作mode7模式头大中.......抽空把以前的rpg引擎用flash 8改了下. 下面先介绍下关于地图的制作(本文章适合与对tiles模式了解并对flash8有一定了解的人) 过去制作游戏的时候,经常会为了切割地图而浪费时间.经常会为了地图过大.拖动过于耗机而烦恼.现在这一切都不成问题了.只要你掌握flash8 bitmapdata的基础运用既可. 这次改造后的地图采用导入整张地形图的方式,由as控制切割调用后生成整个map,再由flash切割调用给适当的场景. 效果如下(地图暂时采用随机模式,用方向键可控制地图的滚动.) [FLASH=400,300]http://bbs.flash8.net/bbs/UploadFile/2005-9/20059282360955.swf[/FLASH] 下面贴出代码: import flash.display.BitmapData; import flash.geom.*; class _map { var timeline:MovieClip; var maps:Array; var bg:MovieClip; var tileBmd:BitmapData; var mapBmd:BitmapData; var bgBmd:BitmapData; var tileStep:Number; var tileCount:Number; var tileRect:Rectangle; var bgRect:Rectangle; var width:Number; var height:Number; var x:Number; var y:Number; function _map(timeline:MovieClip, linkId:String, maps:Array, tileStep:Number, width:Number, height:Number) { this.timeline = timeline; this.width = width; this.height = height; this.x = 0; this.y = 0; timeline._x = (Stage.width-width)/2; timeline._y = (Stage.height-height)/2; bg = timeline.createEmptyMovieClip("bg", 0); this.maps = maps; //地图tile范围 tileRect = new Rectangle(0, 0, tileStep, tileStep); bgRect = new Rectangle(0, 0, width, height); //创建地图元素 tileBmd = BitmapData.loadBitmap(linkId); this.tileStep = tileStep; tileCount = tileBmd.width/tileStep; //建立地图 build(); } function build() { mapBmd = new BitmapData(maps[0].length*tileStep, maps.length*tileStep, false, 0); for (var y = 0; y<maps.length; y++) { for (var x = 0; x<maps[0].length; x++) { attach(0, x*tileStep, y*tileStep); if (maps[y][x]<>0) { attach(maps[y][x], x*tileStep, y*tileStep); } } } bgBmd = new BitmapData(width, height, false, 0); bg.attachBitmap(bgBmd, 0); bgBmd.copyPixels(mapBmd, bgBmd.rectangle, new Point(0, 0)); } function attach(id:Number, x:Number, y:Number) { var rect:Rectangle = tileRect.clone(); rect.y = Math.floor(id/tileCount)*tileStep; rect.x = id%tileCount*tileStep; mapBmd.copyPixels(tileBmd, rect, new Point(x, y)); } function scroll() { x = x<0 ? 0 : (x>(mapBmd.width-width) ? (mapBmd.width-width) : x); y = y<0 ? 0 : (y>(mapBmd.height-height) ? (mapBmd.height-height) : y); bgRect.x = x; bgRect.y = y; bgBmd.copyPixels(mapBmd, bgRect, new Point(0, 0)); } }
总体感觉.效率提高很大.无论画面如何放大,一样能保持流畅的滚动. 这个方法不单适用与tiles模式,如果你是整图把地形图转为map的过程省略掉即可.
|