玩过塔防游戏,基本上就是一堆大小怪物沿着固定路径行走,玩家在地图上某些点放置武器歼灭他们。

首先让我们准备一张简陋的地图

黄色的表示怪物行走路径,箭头表示行走的方向,路上的红色圆点坐标用来作为路径的数据,怪物根据这些数据进行行走。
行走的实现原理如下:

物体要从A点移动到B点,速率为speed(每帧移动的长度)

那么用A到B的总长度除以speed,然后取整,得到的结果表示多少帧后,物体已经移动到B点。
计算出A点到B点的方向,然后把Speed分解成水平与竖直方向的两个值vx,vy。
然后在每帧,把物体的坐标加上这两值,从而实现物体的移动。
打开flash cs5, 新建一个actionscript 3文档game.fla,设置大小为800*600,帧频36f/s.
路径上的点用一个自定义的类来表示,之所以不用现成的Point类是因为我只需要坐标值,不需要运算,用Point重了点
下面就是自定义的Dot类
package  {
 
 public class Dot {
  //横坐标
  public var x:int;
  
  //纵坐标
  public var y:int;
public function Dot(xPoz:int, yPoz:int) {
   // constructor code
   x = xPoz;
   y = yPoz;
  }
}
}
插入新元件创建小怪物

点“确定”后会弹出一个对话框,点"确定"就可以了。

回到game.fla,把我们画好的地图导入到舞台,对齐到(0,0),新建一个图层,在上面直接写下以下的代码,

import flash.events.Event;

//路径数据,数组中的每个元素代表一个点,顺序是从起点到终点
var pathArr:Array = [new Dot(850, 27),
      new Dot(800, 27),
      new Dot(627, 20),
      new Dot(444, 22),
      new Dot(391, 30),
      new Dot(150, 31),
      new Dot(90, 50),
      new Dot(73, 133),
      new Dot(71, 193),
      new Dot(80, 220),
      new Dot(110, 260),
      new Dot(162, 302),
      new Dot(228, 324),
      new Dot(282, 320),
      new Dot(540, 233),
      new Dot(590, 227),
      new Dot(630, 250),
      new Dot(646, 293),
      new Dot(651, 543),
      new Dot(643, 600)];

//创建小怪物,添加到舞台,并设定初始位置
var monster:Monster = new Monster();
addChild(monster);
monster.x = Dot(pathArr[0]).x;
monster.y = Dot(pathArr[0]).y;

//小怪的运动速率
var speed:int = 6;
//分解到两个方向,水平vx和竖直vy
var vx:Number;
var vy:Number;

//连点之间的距离除以速率的值
var stepNums:int;
//循环用变量
var stepCount:int = 0;

//当前是否经过一个关键点(数组中指定的点 )
var passedDot:Boolean = true;
//当前对应的关键点
var currentIndex:int = 0;

//关键点数量
var num:int = pathArr.length;

this.addEventListener(Event.ENTER_FRAME, onEnterFm);

function onEnterFm(e:Event):void
{
  //如果正好通过一个关键点
  if(passedDot)
  {
   //如果还没有到最后一个关键路径点
   if(currentIndex < num - 1)
   {
    //两相邻关键点Y坐标差值
    var deltaY:Number = Dot(pathArr[currentIndex+1]).y - Dot(pathArr[currentIndex]).y;
    //两相邻关键点X坐标差值
    var deltaX:Number = Dot(pathArr[currentIndex+1]).x - Dot(pathArr[currentIndex]).x;
    //计算出两相邻关键点连线的角度
    var angle:Number = Math.atan2(deltaY, deltaX);
    
    //调整小怪的角度
    monster.rotation = angle * (180/Math.PI);
    
    //计算出在这两个关键点之间每帧在两个方向上的移动距离
    vx = speed*Math.cos(angle);
    vy = speed*Math.sin(angle);
    
    计算出两相邻关键点连线的长度(勾股定理)
    var dis:Number = Math.sqrt(deltaY*deltaY+deltaX*deltaX);
    //距离除以速率,得到的值表示在这个值表示的帧数内不用再计算vx和vy
    stepNums = int(dis/speed);
    
    
   }
   
   //
   passedDot = false;
  }
  
  
  
  if(stepCount < stepNums)
  {
   //只要小于stepNums,怪物移动的方式如下
   monster.x += vx;
   monster.y += vy;
  }

else
  {
   //没有运动到终点
   if(currentIndex < num - 1)
   {
    //对应关键点移动到下一个
    currentIndex++;
    //循环计数重置
    stepCount = 0;
    //通过了一个点,开始一段新路程
    passedDot = true;
    //将小怪定位到新起点
    monster.x = Dot(pathArr[currentIndex]).x;
    monster.y = Dot(pathArr[currentIndex]).y;
   }
   
  }
  stepCount++;
}

按下cltr+enter运行一下,看到小怪的确是按照指定的路径在运动,而且小怪的自转角度也是合适的。

文章来自http://cdbym.blog.163.com/blog/static/28331498201167104013925/

Flash制作简单塔防游戏(一)相关推荐

  1. Flash制作简单塔防游戏(二)

    有了沿路跑的小怪,现在加个炮进去,如果小怪跑到炮的射程内,炮会旋转自己的炮管瞄准小怪,然后不停的打,如果小怪跑出了范围,则停止发射. 现在做武器,先做炮管,"插入" >> ...

  2. (译)如何使用cocos2d制作一个塔防游戏:引子

    原文链接地址:http://www.iphonegametutorials.com/2011/04/11/cocos2d-game-tutorial-how-to-build-a-tower-defe ...

  3. 如何制作一个塔防游戏 Cocos2d x 2 0 4

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文实践 ...

  4. flash制作游戏_如何使用Flash制作简单的装扮游戏

    flash制作游戏 在这里,我将向您展示如何使用Flash制作简单的装扮游戏. 画出需要打扮的人. 在衣服将要放置的地方新建一个图层. 画衣服. 我建议在人身上画衣服,以确保它们能正确地合身,所以看起 ...

  5. 如何制作一个塔防游戏 Cocos2d-x 3.0alpha0

    本文实践自 Pablo Ruiz 的文章<How To Make a Tower Defense Game>,文中使用Cocos2D,我在这里使用Cocos2d-x 3.0alpha0进行 ...

  6. 如何制作一个塔防游戏 Cocos2d-x 2.0.4

    本文实践自 Pablo Ruiz 的文章<How To Make a Tower Defense Game>,文中使用Cocos2D,我在这里使用Cocos2D-x 2.0.4进行学习和移 ...

  7. (译)如何使用cocos2d制作一个塔防游戏:第三部分

    原文链接地址:http://www.iphonegametutorials.com/2011/04/19/cocos2d-game-tutorial-%E2%80%93-how-to-build-a- ...

  8. 【技术博客】2020.04.28-简单塔防游戏和棋牌游戏构架学习 ——学习系列博客(一)构架初探

    序言,保卫萝卜项目作为自己学习整体游戏项目的开始,还是很有收获的. 项目初步实现了分管关卡地图编辑.场景结构.关卡选择.游戏地图等主要功能,同时内部构架采用了MVC加单例的构架,对我这种初学者还是很有 ...

  9. 基于Python实现制作的塔防游戏

    导语 最近发现很多人对 python 制作小游戏感兴趣,于是花了半天时间做了个塔防小游戏,在这里分享给大家,希望对大家有帮助. 让我们愉快地开始吧~ 开发工具 **Python 版本:**3.6.4 ...

最新文章

  1. ”舍得“大法:把自己的优点当缺点倒出去
  2. 搭建nginx服务器及文件的配置
  3. 打开金蝶K/3控制台提示“连接中间层加密服务失败,请确认中间层加密服务已启动”...
  4. perl5 第九章 关联数组/哈希表
  5. Pandas处理Excel文件源码学习
  6. Node+Vue实现对数据的增删改查
  7. Spring 整合junit
  8. Android学习笔记(三)——Button之圆角、按压效果、点击事件
  9. 小米安卓java模拟器手机版_Android P(9.0) 行为变更完美适配WebView(小米手机也适用)...
  10. 武汉大学计算机学院应时老师,肖春霞 - 教师简历 CV- 武汉大学计算机学院
  11. html5怎么设置字体位置,css如何设置字体位置
  12. 桌面ie图标删除不了
  13. 论文翻译——Skin Lesion Synthesis with Generative Adversarial Networks
  14. 文本挖掘 包含中英文数据预处理以及分析
  15. echart vue
  16. 某游戏客户流失情况数据分析
  17. Ellisys Bluetooth Vanguard - 软件
  18. 用js,css做一个音乐播放器
  19. 临床血液学综合练习题库【1】
  20. TXT文件编码格式解析

热门文章

  1. java中异常处理语句错误用法的是_Java异常处理语句及解析
  2. 梯度科技通过可信云认证 容器解决方案获权威认可
  3. OFD格式转PDF怎么在线转换?分享在线转换方法
  4. Axialis IconWorkshop
  5. 基于JAVA桌游店会员管理系统计算机毕业设计源码+系统+lw文档+部署
  6. usb host驱动程序崩溃的问题
  7. mysql查询相关语法总结
  8. Android 开源框架ImageLoader的完美例子
  9. border-image 边框图片
  10. SCRM系统平台实现消费品会员精细化管理 为品牌带来营收