FlashAS游戏教程:人物及控制

2008-04-02 10:45:26来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  

  在第一次我们做的地图基础上,我们来做一个人物,然后让这个人物在我们的地图上惬意的行走。当然具体这个人物怎么做,形象怎么设计,我们都不讲,因为大愚的美工实在有点……,咳,不说了,我们从网上找来一个现成的人物(注:该素材由巴斯特?龙友情提供),如图1:

  


  大家仔细看好啦,这个人物一共有16个剪辑,上面一排是静止的图象,代表人物在8个方位的静止状态,什么?哪8个方位?大愚晕,就是(上、下、左、右、左上、右上、左下、右下)啦。下面一排则是相应方向行走的动态剪辑。这里是很重要的。

  然后我们开始制作。

  1,建立一个新的影片剪辑(名字为:player,作为动作脚本输出),将静止的8个人物静态素材分别放到1-8帧(次序不重要),然后再把动态的人物素材放到9-16帧。注意:静态的帧和同方位动态帧正好相隔8帧,这里很关键啊。您问为什么?大愚先卖关子,等会看程式您就会知道啦。然后对后面的8帧分别定义标签,根据各自方位(”shang”、”xia”、”zuo”、”you”、”zuoshang”、”youshang”、”zuoxia”、”youxia”)来定义,这里千万不要搞错拉。

  2,这些准备工作做好后,您的舞台和时间轴应该是这样的,如图2

  


  可能稍微有些差异,因为大愚这里用了一个洋葱皮工具,把1-16祯内容都显示出了。您说什么?洋葱皮工具怎么用?这个不难,点一下时间轴下面的一个编辑多祯按钮,然后调节选择祯范围保卫任何的16祯,就看到了。哇,好酷哦。

  3,通过洋葱皮我们能够同时编辑多个祯。我们用选择工具把任何16个剪辑都选中,然后用对齐面板(按CONT K打开)将16祯的内容水平对齐,垂直对齐到舞台,然后调整位置如图3。

  


  好了下面我们开始的编程啦。(我靠,讲那么多废话,找死,您以为不用稿酬的吗?)

  4,回到场景,选中第一帧,打开动作面板(按F9)

  5,将以下代码加到动作面板中(加到上一课地图代码的后面):

  

var stepx,stepy

  //定义2个变量,用来控制人物在X和Y轴上的移动距离

  _root.attachmovie("player", "play1", 1000);

  //连接一个人物影片剪辑,名字为play1,深度为1000

  play1._x = 200; play1._y = 100;

  //配置他的初始位置

  someListener = new Object();

  //建立一个新监听器对象,用来监听鼠标的动作

  //下面对这个监听器对象定义函数

  //(功能是检测鼠标点击后释放动作,判断人物应该的朝向,连同移动人物到鼠标点击位置)

  someListener.onMouseup = function()

  {

  absr = math.abs(play1._xmouse) math.abs(play1._ymouse);

  //play1._xmouse的含义在这里介绍一下,是鼠标位置相对人物注册点位置的X坐标

  // play1._ymouse,是鼠标位置相对人物注册点位置的Y坐标

  //absr是这个2距离的和

  if (absr> 10)

  {

  //在这个距离大于10的时候,我们才让人物进行运动

  dx = _root._xmouse-play1._x;

  dy = _root._ymouse-play1._y;

  //dx,dy分别是鼠标位置和人物注册点的在X,Y方向上的坐标差

  mux = _root._xmouse;

  muy = _root._ymouse;

  //MUX,MUY分别是人物所要去的位置

  sqr = math.sqrt(Math.pow(dx, 2) math.pow(dy, 2));

  //sqr是目标位置和当前位置的直线距离,

  //上面的意思相当于求DX和DY平方和的开方,这是直角3角,求斜边的标准算法

  //下面的代码是根据鼠标位置和人物当前位置来判断人物的朝向 //假如看不明白代码,先能够看看(图4)

  if (dx> 0)

  {

  //当鼠标横轴方向X值大于人物时

  if (math.abs(dx/dy)> 2)

  {

  //并且DX/DY> 2,能够判定人物是向右走,以下都是同样的一些判断

  play1.gotoandstop("you");

  stepx = 5*dx/sqr;

  stepy = 5*dy/sqr;

  }

  else if (math.abs(dx/dy)>0.5 and dy <0)

  {

  play1.gotoandstop("youshang");

  stepx = 5*dx/sqr;

  stepy = 5*dy/sqr;

  }

  else if (math.abs(dx/dy)>0.5 and dy< 0)

  { play1.gotoandstop("youxia");

  stepx = 5*dx/sqr;

  stepy = 5*dy/sqr;

  } else if (math.abs(dx/dy) <0.5 and dy> 0)

  { play1.gotoandstop("shang");

  stepx = 5*dx/sqr;

  stepy = 5*dy/sqr;

  } else

  {

  play1.gotoandstop("xia");

  stepx = 5*dx/sqr;

  stepy = 5*dy/sqr;

  } //知道人物朝向以后,给人物实例的事件onEnterFrame增加一段代码,

  //目的是每运行一祯就让人物移动stepx.stepy的距离

  play1.onEnterFrame = function()

  {

  play1._x = stepx;

  play1._y = stepy;

  if (math.abs(play1._x-mux) <6 and math.abs(play1._y-muy) <6)

  {

  //当人物和目标距离的X,Y坐标相差只有6象素时,我们认为play1到达目标位置

  delete (play1.onEnterFrame);

  //删除这个给人物实例的事件onEnterFrame定义的函数

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Flash如何实现透视的效果

下一篇: Flash组件应用和研发周详讲解