| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > Flash游戏制作 > 文章正文 用户登录
如何加入透明Flas
为新浪博客添加fl
flashget下载联盟
265联盟:“Flash
新易网络提供100M
龙太极/100m/asp/
无限网络提供50M 
霞光科技50M/Htm/
苏能科技100M/FTP
悠博科技50M/FTP/

flash8的游戏制作(地图篇)           

flash8的游戏制作(地图篇)

作者:佚名 来源:闪吧 作者: zheng2511 更新:2007-1-13 20:43:04 错误报告 我要投稿
  研究flash 8制作mode7模式头大中.......抽空把以前的rpg引擎用flash 8改了下.
       下面先介绍下关于地图的制作(本文章适合与对tiles模式了解并对flash8有一定了解的人)
       过去制作游戏的时候,经常会为了切割地图而浪费时间.经常会为了地图过大.拖动过于耗机而烦恼.现在这一切都不成问题了.只要你掌握flash8 bitmapdata的基础运用既可.
       这次改造后的地图采用导入整张地形图的方式,由as控制切割调用后生成整个map,再由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的过程省略掉即可.
文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。