地图类,我们已经初步写了一下,功能还需要扩展完善,而我们现在尝试移动我们所在的缓冲区域。

上传一张:640x480的位图:我们把这张图作为地图

我们使用这种素材作为我们地图,尝试一些移动我们的地图,如果让整张的地图移动,效率自然会低,我们采用的方式,仅仅移动矩形的方式,动态切割位图的方式。

键盘控制的方法:(这个方法类是网上一个人提供的,借用一下)

这个类写在package com.hero.ImageManager文件夹下:

package com.hero.ImageManager { import flash.events.Event; import flash.events.KeyboardEvent; import flash.display.DisplayObject; public class KEY { private static var keyObj:KEY = null; private static var keys:Object; public static function init(_stage:DisplayObject):void { if (keyObj == null) { keys = {}; _stage.addEventListener(KeyboardEvent.KEY_DOWN, KEY.keyDownHandler); _stage.addEventListener(KeyboardEvent.KEY_UP, KEY.keyUpHandler); } } public static function isDown( keyCode:uint ):Boolean { return keys[keyCode]; } private static function keyDownHandler( e:KeyboardEvent ):void { keys[e.keyCode] = true; trace( keys[e.keyCode]); } private static function keyUpHandler( e:KeyboardEvent ):void { delete keys[e.keyCode]; } } }

键值:说明一下键值,指定这些键值。上下左右,对于的一些键值。

package com.hero.ImageManager { public final class KEYID { public static const VK_LEFT:uint = 37; public static const VK_UP:uint = 38; public static const VK_RIGHT:uint = 39; public static const VK_DOWN:uint = 40; } }

文档类:

导入上面的两个类:

package { import flash.display.*; import flash.events.*; import flash.geom.Rectangle; import flash.geom.Point; import flash.ui.Keyboard; import com.hero.ImageManager.*; public class Main extends Sprite { private var map:Map; private var mapdata:BitmapData=new map2(640,480); public function Main() { map=new Map(mapdata,0,0); map.x=0; map.y=0; addChildAt(map,0); KEY.init(stage); addEventListener(Event.ENTER_FRAME,DrawSence); } private function DrawSence(e:Event):void { map.CreateMap(300,300); keydownhandle(); } private function keydownhandle():void { if (KEY.isDown(KEYID.VK_UP)) { map.rect.y-=5; } else if (KEY.isDown(KEYID.VK_DOWN)) { map.rect.y+=5; } else if (KEY.isDown(KEYID.VK_LEFT)) { map.rect.x-=5; } else if (KEY.isDown(KEYID.VK_RIGHT)) { map.rect.x+=5; } } } }

创建一张位图,private var mapdata:BitmapData=new map2(640,480);外部导入我们的库里面。

实例化一个地图类对象,把这个对象mapdata作为我们所希望的对象参数

map=new Map(mapdata,0,0);
   map.x=0;
   map.y=0;
   addChildAt(map,0);

指定地图的位置。

键盘初始化:KEY.init(stage);

绘制场景:

private function DrawSence(e:Event):void
  {
   map.CreateMap(300,300);
   keydownhandle();
  }

通过控制,上下左右键盘,使矩形移动。一边移动,而我们的地图类里面复制像素的位移也发生相应的改变。

private function keydownhandle():void { if (KEY.isDown(KEYID.VK_UP)) { map.rect.y-=5; } else if (KEY.isDown(KEYID.VK_DOWN)) { map.rect.y+=5; } else if (KEY.isDown(KEYID.VK_LEFT)) { map.rect.x-=5; } else if (KEY.isDown(KEYID.VK_RIGHT)) { map.rect.x+=5; } }

总体的效果图:

地图类:

package { import flash.display.Sprite; import flash.display.*; import flash.events.*; import flash.geom.*; public class Map extends Sprite { private var mapWidth:Number;//地图的宽度 private var mapHeight:Number;//地图高度 private var mapX:Number;//地图的x坐标 private var mapY:Number;//地图的y坐标 private var mapArray:Array; private var mapdata:BitmapData; public var sprite:Sprite=new Sprite();//做一个容器使用 public var rect:Rectangle;//地图的矩形外形 public var bitmap:Bitmap; private var buffer:BitmapData;//缓冲区 public function Map(mapdata:BitmapData,mapX:Number,mapY:Number) { this.mapdata=mapdata; //this.mapX=mapX; //this.mapY=mapY; this.mapWidth=mapdata.width; this.mapHeight=mapdata.height; bitmap=new Bitmap(mapdata); rect=bitmap.getRect(bitmap);//获取地图的矩形 } public function get MapInfo():BitmapData { return mapdata; } public function CreateMap(bufferwidth:Number,bufferheight:Number):void { buffer=new BitmapData(bufferwidth,bufferheight,false,0xFFFFFFFF);//设置缓冲区 buffer.fillRect(new Rectangle(0,0,bufferwidth,bufferheight),0x0000FF00);//填充缓冲区 trace(rect.y); if (rect.x<0 ) { rect.x=0; } trace(mapWidth); if (rect.x+buffer.width>mapWidth) { rect.x=mapWidth-buffer.width; } if (rect.y<=0) { rect.y=0; } if (rect.y+buffer.height>mapHeight) { rect.y=mapHeight-buffer.height; } buffer.copyPixels(mapdata,new Rectangle(rect.x,rect.y,bufferwidth,bufferheight),new Point(0,0));//矩形的坐标变化,会裁剪出不同的位图数据 FillMap(buffer);//填充位图数据 } public function FillMap(data:BitmapData):void { sprite.graphics.clear(); sprite.graphics.beginBitmapFill(data,null,false,false); sprite.graphics.drawRect(0,0,data.width,data.height); sprite.graphics.endFill(); addChild(sprite); } } }

转载于:https://www.cnblogs.com/guoyiqi/archive/2009/03/18/2069407.html

flash位图技术研究篇(3):移动缓冲区域相关推荐

  1. flash位图技术研究篇 9 2D平面映射球体

    原文:http://www.codeproject.com/KB/graphics/Sphere_mapping.aspx?msg=2178656 昨晚在codeproject 里面无意当中看了一篇关 ...

  2. flash位图技术研究篇(9):2D平面映射球体

    原文:http://www.codeproject.com/KB/graphics/Sphere_mapping.aspx?msg=2178656 昨晚在codeproject 里面无意当中看了一篇关 ...

  3. flash位图技术研究篇 5 像素画

    今天光顾了外国的某一些博客对位图的应用,发现对位图的操作会变化出很多很多效果,其中一篇是像素画的实现,借助这种对位图的像素操作应用,重新组合成新的图片,然后拼合成一张新的图片. 思路很简单.借用这种手 ...

  4. flash位图技术研究篇(8):扫描像素点

    今晚抽了点时间写个无聊的野,这部分会涉及到位图方面的扫描操作.最近发现了通过扫描位图的像素能够做出很多意想不到效果. 基本原理:通过扫描像素点,并将我们所需要的像素点记录下来,我们可以以粒子的方式看待 ...

  5. Linux技术研究-基础篇(raid与LVM,配额)

    Linux技术研究-基础篇(raid与LVM,配额) 创建RAID-5 若想建立新的md1设备 只在/dev下建立还不够 重启后会消失 固化的方法是 为了使udev自动产生/dev/md1, /dev ...

  6. 计算机安全的加密技术,计算机安全加密技术研究(4篇)(共14695字).doc

    计算机安全加密技术研究(4篇)(共14695字) 计算机安全加密技术研究(4篇)(共14695字) 第一篇:计算机安全防护中数学签名技术应用 摘要:近几年来,随着全球互联网领域的飞速发展,计算机网络已 ...

  7. Linux技术研究-基础篇(启动和自动挂载)

    Linux技术研究-基础篇(启动和自动挂载) 系统启动流程 如果有一天你的服务器启动不了,面对屏幕上的各种各样的提示素手无策. 你不知道服务器出了什么问题,无法判断启动到了哪个环节. 若想排查出问题原 ...

  8. 网页html做捏脸站,[技术研究]想做Web 3D捏脸?看了这篇文章你就会!

    原标题:[技术研究]想做Web 3D捏脸?看了这篇文章你就会! 游戏里的人物捏脸见的多了,网页里的捏脸见过么? 3月6日完美世界手游上线,前期需要一个预创角营销活动进行预热.与以往预创角活动不同的是, ...

  9. NTFS文件系统若干技术研究

    NTFS文件系统若干技术研究 作者:         Beiyu 主页:         http://beiyu.bokee.com 电子邮箱:    beiyuly@gmail.com 日期:   ...

  10. 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(三)-移植到ESP32平台(1)

    相关系列文章 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(-)-Z3GatewayHost应用搭建 基于芯科Host-NCP解决方案的Zigbee 3.0 Gate ...

最新文章

  1. 小蚂蚁学习数据结构(32)——二叉排序树的概念
  2. 散列(hash)练习题
  3. CNCF 官方大使张磊:Kubernetes 是一个“数据库”吗?
  4. 消息和事件的区别 VC++解惑
  5. 使用maven profile实现多环境可移植构建
  6. Java充电宝模型设计_继续探讨点赞功能模块设计
  7. python 迭代器、生成器知识点总结
  8. c java python php_php c java python 语言对比
  9. Spark Streaming 实时流处理总结
  10. 论文笔记_S2D.32-2019-TIP_HMS-Net:用于稀疏深度补全的分层多尺度稀疏不变网络
  11. MFC 入门介绍和实例操作
  12. 广搜算法之翻转棋子游戏
  13. SVM 垃圾邮件分类
  14. IDEA使用/配置指南(从入门到精通)_by瞎琢磨先生
  15. 【背包问题】大容量背包问题(超大背包)
  16. thinkphp mysql操作数据库_thinkPHP数据库操作
  17. Android手机做电脑摄像头
  18. Markdown- 常用数学公式
  19. plsql快速导入sql文件
  20. 同一个module里面多个initial是并行的吗

热门文章

  1. MacBook随机关机,无法正常工作,如何解决
  2. openSUSE Tumbleweed 支持 Linux Kernel 4.20
  3. 利用Onionshare 共享匿名文件
  4. windows server 2016 DC重置用户密码报错
  5. 《为学》 [清]彭端淑
  6. 【好】Paxos以及分布式一致性的学习
  7. Linux服务器双网卡双IP和单网卡双IP配置方法(Debian/Ubuntu)
  8. Spoiler Alert – 实现内容模糊隐藏效果的 jQuery 插件
  9. 信息系统项目管理师视频教程——10 信息系统项目管理基础
  10. rdd和DF数据存入MYSQL