单个图片角色动作化处理

作者:袖梨 2022-07-02

//在网上看关于这方面的文章:用的都是BitmapData类,来对图片进行切割。个人觉得没有那么麻烦。而且,有时候我们可能会把游戏的素村做成矢量的。来减小flash的体积。
//以下是个人的看法。
//还好flash8给我们提供了:MovieClip.cacheAsBitmap 属性,把矢量图缓存成位图。我可以查查帮助:
//提到:最好将 cacheAsBitmap 属性与主要具有静态内容且不频繁缩放和旋转的影片剪辑一起使用。对于这样的影片剪辑,在转换影片剪辑时(更改其 x 和 y 位置时),cacheAsBitmap 可以提高性能。
//这样我们在作单片人物动作,只需把所有动作用矢量的形式,放入一个mc中,用行列排好。
//用程序来进行控制:在其上放上一个电影符号来遮蔽,显示当前一个格的动画。
//本实例的素材用的是位图。
/*运行原理
新建一个空的电影符号:“mc_TableMovie”作为该动画的容器,将图片动画,导入库中。加上连接符号。这里我设的为"1"
然后设置一个TableMovie动画对象给mc_TableMovie ,对象会自动在“mc_TableMovie”中生成两个mcImg:存放动画图片,mcMask:用于遮蔽的电影符号.
在_root.onEnterFrame,来做循环播放
*/
_root.createEmptyMovieClip("mc_TableMovie", _root.getNextHighestDepth());
mc_TableMovie._x = 28;
mc_TableMovie._y = 20;
//mc_TableMovie.attachMovie("1","mcImg",mc.getNextHighestDepth());
//mc容器,link编号
//starX,starY图片中的动画元素开始的坐标
//hang,lie:行,列
//W,H:宽,高
//movieType 0 循环显示列//目前只作了0类型 1 循环显示所有
var obj_mc_TableMovie:TableMovie = new TableMovie(mc_TableMovie, "1", 0, 0, 4, 4, 63, 93, 0, 1);
obj_mc_TableMovie.setHang(3);
//按键
var numFX:Number = 1;
var DISTANCE = 5;
//
_root.onEnterFrame = function() {
obj_mc_TableMovie.go();
//就这个图片而言,每行代码一个方向的状态。
obj_mc_TableMovie.setHang(numFX);
};
//key
//键盘检测///////////////
var keyListener_obj:Object = new Object();
keyListener_obj.onKeyDown = function() {
switch (Key.getCode()) {
case Key.SPACE :
trace("space");
break;
case Key.LEFT :
numFX = 1;
break;
case Key.UP :
numFX = 3;
break;
case Key.RIGHT :
numFX = 2;
break;
case Key.DOWN :
numFX = 0;
break;
}
};
Key.addListener(keyListener_obj);


///////////////////TableMovie类
class TableMovie {
public var mc:MovieClip;
//
public var moiveSD:Number;
private var moiveSD_i = 1;
//
private var mcImg:MovieClip;
private var mcMask:MovieClip;
//
private var starX:Number;
private var starY:Number;
private var hang:Number;
private var lie:Number;
private var W:Number;
private var H:Number;
private var EW:Number;
private var EH:Number;
//当前
public var NX:Number;
public var NY:Number;
private var movieType:Number;
//
//mc容器,link编号
//starX,starY图片中的动画元素开始的坐标
//hang,lie:行,列
//W,H:宽,高
//movieType 0 循环显示列//目前只作了0 1 循环显示所有
//当前fps的倍数移动moiveSD
function TableMovie(mc:MovieClip, linkId:String, starX:Number, starY:Number, hang:Number, lie:Number, W:Number, H:Number, 
movieType:Number, moiveSD:Number) {
this.mc = mc;
this.moiveSD = moiveSD;
//
NX = 0;
NY = 0;
//
this.starX = starX;
this.starY = starY;
this.hang = hang;
this.lie = lie;
this.W = W;
this.H = H;
this.movieType = movieType;
//
this.EW = W/lie;
this.EH = H/hang;
//
mcImg = mc.attachMovie(linkId, "mcImg", mc.getNextHighestDepth());
//
mcMask = mc.createEmptyMovieClip("mcMask", mc.getNextHighestDepth());
mcMask.beginFill(0xFF00FF, 100);
mcMask.lineStyle(0, 0xFF00FF, 100);
mcMask.moveTo(0, 0);
mcMask.lineTo(EW, 0);
mcMask.lineTo(EW, EH);
mcMask.lineTo(0, EH);
mcMask.lineTo(0, 0);
mcMask.endFill();
//
mcImg.setMask(mcMask);
}
function go() {
if (moiveSD_i++>moiveSD) {
moiveSD_i = 1;
//
if (movieType == 0) {
NX++;
if (NX>=lie) {
NX = 0;
}
setHangLie();
} else if (movieType == 1) {
//没有作
} else {
trace("类型指定错误!");
}
}
}
//end go
function setHangLie() {
mcImg._x = -(NX*EW);
mcImg._y = -(NY*EH);
}
function setHang(numHang:Number) {
if (numHang<0 || numHang>hang) {
NY = hang;
return 0;
}
NY = numHang;
}
}
////

相关文章

精彩推荐