- 浏览: 396224 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhchyun2008:
这里有个小问题,背景有时候会出现?不知道如何解决
分享一个ToolTip类,趋于完美! -
heiliuer:
歌词可以用,我试了好几个,都行的
百度MP3音乐API接口及应用 -
connectu:
感觉不错,英文版的。
JMX in Action -
海阔天空1991:
楼主,有没有什么途径可以知道歌曲对应的信息?
百度MP3音乐API接口及应用 -
xiegqooo:
简单的关闭 tomcat
import java.io.IO ...
关于Java钩子的使用
今天探讨一下这个关于切割位图的技术,关于这个做法,其实很简单。我将其定义为两种常见的切割技术,第一种为一维切割,第二种为二维切割。将不同切割出来的图片保存在数组当中。
一维切割:如contain[图片编码]
二维切割:如contain[方向][步数]
应用在我们做一张RPG图的时候会应用到这种技术。从这张网上下载的图片可以看出,这种图有8个方向,属于8方图。
从这张图片我们可以看出,它排列就像一个二维数组阵列。 我们创建一个数组二维数组将这些图片储存起来,变成一个二维数组。
在As3里面做法,其中一种思路就是把这张图片进行复制,按比例,宽度和大小进行存取。最后,可以看到数组变成了:
如contain[方向][步数]
假设 第一张图,那么contain[0][0] 就代表第一行,第一列的图片,同理contain[1][0]就是第二行,第一列的图片。这样做一个目的是把数组的第一个数设计为方向,而第二个数设计为步数。
下面是切割二维的做法封装成一个类:
接下来,我们要进行一个测试,测试让切割出来的图片可以通过键盘产生位移。
写一个control类用于控制人物移动,在控制的时候,我们采用的方法就是addchild 的同时,同时也删除容器中的图片。这样做法为了减轻内存的占用。当步数超过了数组宽度的时候,我们让其变为原来1,这样就确保位图在同一个区域里面移动,它就像指针一样,在一个区间里面运动;【0,1,2,3,4,5,6,7,8,9】 移动步数递增,图片也相应发生改变。原理就是这样。
imgae[方向][步数]
主要类的运行。test。as
下面类为键盘值的声明
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hero82748274/archive/2009/08/21/4471561.aspx
一维切割:如contain[图片编码]
二维切割:如contain[方向][步数]
应用在我们做一张RPG图的时候会应用到这种技术。从这张网上下载的图片可以看出,这种图有8个方向,属于8方图。
从这张图片我们可以看出,它排列就像一个二维数组阵列。 我们创建一个数组二维数组将这些图片储存起来,变成一个二维数组。
在As3里面做法,其中一种思路就是把这张图片进行复制,按比例,宽度和大小进行存取。最后,可以看到数组变成了:
如contain[方向][步数]
假设 第一张图,那么contain[0][0] 就代表第一行,第一列的图片,同理contain[1][0]就是第二行,第一列的图片。这样做一个目的是把数组的第一个数设计为方向,而第二个数设计为步数。
下面是切割二维的做法封装成一个类:
package { /* 切割位图类,返回一个二维数组*/ import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.*; public class BitmapSplice extends Sprite { public var contain:Sprite=new Sprite();//容器 //public var direction:uint;//方向 private var titleWidth:uint;//图片元件分取的宽 private var titleHeight:uint;//图片元件分取的高 private var bitmapdata:BitmapData;//位图源图像 private var Step:Array=new Array();//存取步数数组 public function BitmapSplice(bitmapdata:BitmapData,titleWidth:uint,titleHeight:uint) { this.bitmapdata=bitmapdata; this.titleWidth=titleWidth; this.titleHeight=titleHeight; } //进行切割 public function Splice():Array { var iWidth:int=this.bitmapdata.width /this.titleWidth; var iHeight:int=this.bitmapdata.height /this.titleHeight; for (var i:uint=0; i < titleHeight; i++) { var array:Array=new Array(); for (var j:uint=0; j < titleWidth; j++) { var tempBMP:BitmapData=new BitmapData(iWidth,iHeight,true,0x00000000); tempBMP.copyPixels(bitmapdata,new Rectangle(j * iWidth,i * iHeight,iWidth,iHeight),new Point(0,0)); array.push(tempBMP); } this.Step.push(array); } bitmapdata.dispose(); return this.Step; } } }
接下来,我们要进行一个测试,测试让切割出来的图片可以通过键盘产生位移。
写一个control类用于控制人物移动,在控制的时候,我们采用的方法就是addchild 的同时,同时也删除容器中的图片。这样做法为了减轻内存的占用。当步数超过了数组宽度的时候,我们让其变为原来1,这样就确保位图在同一个区域里面移动,它就像指针一样,在一个区间里面运动;【0,1,2,3,4,5,6,7,8,9】 移动步数递增,图片也相应发生改变。原理就是这样。
imgae[方向][步数]
package { import flash.display.Stage; import flash.events.*; import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import com.hero.ImageManager.*; public class Control extends EventDispatcher { private var sence:Sprite; private var Images:Array; private var direction:uint=1;//方向 private var step:uint=1;//步数 private var vx:int=0; private var vy:int=0; private var speed:int=10; private var n_step:uint; private var player:Sprite=new Sprite(); public function Control(stage:Stage,sence:Sprite,Images:Array,n_step:uint) { KEY.init(stage);//键盘初始化 this.sence=sence;//场景 this.Images=Images; this.n_step=n_step; this.sence.addChild(player); player.x=250; player.y=150; stage.addEventListener(Event.ENTER_FRAME,Run);//使用stage才可以进行监听 } private function Run(event:Event):void { while (player.numChildren>0) { player.removeChildAt(0); } player.addChild(new Bitmap(Images[direction][step])); keyboardListener(); } private function keyboardListener():void { if (KEY.isDown(KEYID.VK_UP) && KEY.isDown(KEYID.VK_LEFT)) { goLeftAndTop(); } else if (KEY.isDown(KEYID.VK_UP) && KEY.isDown(KEYID.VK_RIGHT)) { goRightAndTop(); trace("d"); } else if (KEY.isDown(KEYID.VK_DOWN) && KEY.isDown(KEYID.VK_LEFT)) { goLeftAndDown(); } else if (KEY.isDown(KEYID.VK_DOWN) && KEY.isDown(KEYID.VK_RIGHT)) { goRightAndDown(); } else if (KEY.isDown(KEYID.VK_UP)) { goUP(); } else if (KEY.isDown(KEYID.VK_DOWN)) { goDown(); } else if (KEY.isDown(KEYID.VK_LEFT)) { goLeft(); } else if (KEY.isDown(KEYID.VK_RIGHT)) { goRight(); } else if (!KEY.isDown(KEYID.VK_LEFT) && !KEY.isDown(KEYID.VK_UP) && !KEY.isDown(KEYID.VK_RIGHT) && !KEY.isDown(KEYID.VK_DOWN)) { stand(); } } private function goLeftAndTop():void { go(-1,-1,3); } private function goRightAndTop():void { go(1,-1,6); } private function goLeftAndDown():void { go(-1,1,4); } private function goRightAndDown():void { go(1,1,7); } private function goUP():void { go(0,-1,0); } public function goDown():void { go(0,1,1); } private function goLeft():void { go(-1,0,2); } private function goRight():void { go(1,0,5); } private function stand():void { vx=0; vy=0; step=0; } private function go(_xv:int,_yv:int,direction:uint):void { this.direction=direction; vx = _xv*speed; vy = _yv*speed; step++; if (step>n_step-1) { step=1; } player.x+=vx; player.y+=vy; sence.x -= vx; sence.y -= vy; } } }
主要类的运行。test。as
package { import flash.display.Sprite; import flash.display.DisplayObject; import flash.display.BitmapData; import flash.display.Bitmap; import flash.events.*; import com.hero.ImageManager.*; public class Test extends Sprite { private var bit:BitmapSplice; private var Images:Array; private var sence:Sprite=new Sprite();//场景类,设计为容器 private var mycontrol:Control; public function Test() { sence.addChildAt(new Bitmap(new Sence1(0,0)),0); bit=new BitmapSplice(new player(0,0),9,8);//player 类为库链接的位图 Images=bit.Splice();//分割二维数组 mycontrol=new Control(stage,sence,Images,9); addChild(sence);//位图容器初始化 addEventListener(Event.ENTER_FRAME,Run); } private function Run(event:Event):void { } } }KEY类用于键盘监控时候使用
package com.hero.ImageManager { /*键盘按键判断类. 使用时先初始化要监听的对象.再判断哪个键被按下了. KEY.init(stage); KEY.isDown(40);返回true或false */ 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; } }
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hero82748274/archive/2009/08/21/4471561.aspx
发表评论
-
学习AS3.0全局函数
2011-07-27 20:16 2029使用目的:字符串的编码与解码。 说明:escape()函数会将 ... -
[心得] 把纯文本嵌入as3类中
2011-06-27 11:07 917必须知道文本的编码类型, 否则中文会读出乱码 [Emb ... -
两个翻转BitmapData的函数
2011-06-20 16:57 1831//向右旋转90度 public function scal ... -
http://dl.iteye.com/upload/attachment/435134/b797675d-eb2f-3c7f-8ed0-f612a5813b8
2011-06-20 16:52 1534这东西不太可能只用滤镜来实现,实实在在用程序画出来还差不多 ... -
重写FLEX组件
2011-06-20 16:05 2029一、为什么要重写组件 1、在FLEX已有组件无法满足业务需求, ... -
Flex Builder快捷键大全
2011-06-16 11:38 1920Ctrl + Shift + L :列出所有快捷键 Ctrl ... -
as3三角函数应用
2011-06-11 18:01 2279基本三角函数的计算: 角的正弦值 = 对边 / 斜边 角的余弦 ... -
Flash使用服务器时间
2011-06-07 10:36 1441在做Flash应用时,有时可能会遇到需要使用服务器时间的情况, ... -
分享一个ToolTip类,趋于完美!
2011-06-07 10:26 1307package myas { import ... -
忽略PNG透明区域的事件
2011-06-07 10:24 1916困扰了我好几天,也没人帮我解决..。 最后在网上找到了方法。 ... -
AnimationState
2011-06-03 17:20 1230package engine { impo ... -
Flex中使用三角函数sin() cos()进行圆形排列
2011-05-14 13:16 2366private const CENTRE:Point = ne ... -
Using non-embedded images in a spark BitmapImage
2011-04-18 11:21 1211TiledImage.mxml <?xml vers ... -
在Flash Player 10.2中使用原生鼠标指针
2011-04-01 17:17 1978Adobe Flash Player 10.2 版本引入了一个 ... -
童年の忆
2011-03-21 19:13 1171送给儿时的自己。 -
有时候我们需要将某个数组清空或者说重置
2011-01-27 23:35 1236有时候我们需要将某个数组清空或者说重置,我最常用的办法的是重新 ... -
利用render事件来提高as3程序的运行效率
2011-01-27 23:21 2006AS3中的DisplayObject有一个render事件,他 ... -
解决RemoteClass alias信息丢失
2011-01-17 11:31 1689问题发生场景:flex程序中存在多个module都调用一个 ... -
Flex 4 List控件分页功能的实现
2010-12-23 11:48 2856要想了解Flex 4 List控件的分页功能(paging)的 ... -
Flash 游戏设计笔记:计时器制作
2010-11-12 10:03 1532[img][/img]在游戏当中, ...
相关推荐
读书笔记:Java核心技术卷I 基础知识
读书笔记:Java核心技术 卷I基础知识
读书笔记:Java核心技术卷I基础知识
读书笔记:Java 核心技术 卷I 基础知识 第十版
读书笔记:Java核心技术卷I 基础知识第10版代码
读书笔记:Java核心技术 卷II 高级特性原书第10版
读书笔记:图解设计模式笔记
读书笔记:Java 核心技术; 深入理解Java虚拟机JVM高级特性与最佳实践第二版
SQL SERVER 2008 学习笔记:日常维护、深入管理、性能优化。
读书笔记:图解设计模式笔记Golang
读书笔记:MyBatis技术内幕读书代码
读书笔记:Java 核心技术 卷I(基础知识) 和 卷II(高级特性)书内代码
读书笔记:图解设计模式学习笔记
读书笔记:mysqlInnoDB存储引擎技术内幕
读书笔记:设计原则
读书笔记:设计模式大话设计模式
读书笔记:设计模式 常用原则设计
读书笔记:《图解设计模式》笔记
读书笔记:大话设计模式设计demo
读书笔记:mysql技术内幕innodb存储引擎学习