from: http://bbs.9ria.com/thread-77302-1-1.html

演示程序

http://www.adamatomic.com/canabalt/

http://www.flixel.org/mode/

Flixel横板游戏制作教程(四)— RandomLevels

本教程是接着Flixel横板游戏制作教程(三)— AddingWeapons来做的。
现在我们来给游戏加入 随机的平台,由于本次教程的重点是随机平台的算法,所以对算法不太明白的同学大可以不去理会,喜欢研究的就看看算法吧。后面的教程会介绍一个专门配合flixel 的地图编辑器,非常好用,所以本次教程属于 娱乐向。。。看看就好,不比深究。
那么开始了,看到 GameState 类:

package
{import org.flixel.FlxG;import org.flixel.FlxGroup;import org.flixel.FlxState;import org.flixel.FlxTileblock;import org.flixel.FlxU;/*** ...* @author zb*/public class GameState extends FlxState {/***********   前面已有的声明  *************///地图制作用//地图宽度static public const MAP_WIDTH:Number = 640;//地图高度static public const MAP_HEIGHT:Number = 480;//素材中每个小砖块的宽度static private const TILE_BLOCK_WIDTH:Number = 8;//随机地图中一个矩形平台一个方向(水平方向或垂直方向)的最大的砖块数量//比如 最大的一个平台的砖块数 是 4*4=16static private const MAX_TILE_BLOCK_NUM:uint = 4;///随机地图中一个矩形平台一个方向(水平方向或垂直方向)的最大的砖块数量static private const MIN_TILE_BLOCK_NUM:uint = 2;//每次进行随机平台生成的时候,重复的次数,用法见下面算法中解释static private const RANDOM_LOOP_COUNT:int = 5;//我们用一个 flxGroup来储存 生成的 随机平台protected var levels:FlxGroup;override public function create():void {//*********已有的内容**********///这里不需要上一节的 地板了,注释掉吧//addGround();//*********已有的内容**********///加入随机地图addRandomMap();}//************已有的 方法**************//private function addRandomMap():void{levels = new FlxGroup();//生成地图边界var tile:FlxTileblock;//地图的左边界tile = new FlxTileblock(0, 0, 8, MAP_HEIGHT);tile.loadTiles(tileImg);levels.add(tile);//地图的下边界tile = new FlxTileblock(0, MAP_HEIGHT-8, MAP_WIDTH, 8);tile.loadTiles(tileImg);levels.add(tile);//地图的右边界tile = new FlxTileblock(MAP_WIDTH-8, 0, 8, MAP_HEIGHT);tile.loadTiles(tileImg);levels.add(tile);//地图的上边界tile = new FlxTileblock(0, 0, MAP_WIDTH, 8);tile.loadTiles(tileImg);levels.add(tile);//将levels 组加入到显示列表中//注意,只要 flxGroup 被添加进入了 显示列表,//后面 再 加入组的 object 也会自动加入显示列表中add(levels);//下面就是生成随机平台了,这里生成 150 个平台for (var i:int = 0; i < 150; i++) {addRandomTile();}}private function addRandomTile():void{//随机矩形平台的实例var newTile:FlxTileblock;//随机矩形平台的宽度var blockWidth:Number;//随机矩形平台的高度var blockHeight:Number;//随机平台的 x 坐标var blockX:Number;//随机平台的 y 坐标var blockY:Number;//这个是用来判断 这次新生成的 平台,是否与 之前的平台 重叠var newTileIsOverlapOthers:Boolean = false;//重新生成随机平台的重复次数,用在 当与之前的 平台重叠时//取消并重新生成一个新的平台,再进行 重叠判断//当 重复次数 超过规定的 最大重复 次数时,则取消本次 随机平台的生成var loopCount:int = 0;//进行本次随机平台的生成与重叠判断循环do {//计算随机平台的宽度// int(Math.random() * (MAX_TILE_BLOCK_NUM - MIN_TILE_BLOCK_NUM) + MIN_TILE_BLOCK_NUM)// 上面这个是 水平方向的 砖块数量// * TILE_BLOCK_WIDTH ,然后 砖块数量 乘上 砖块的 宽度,//就是平台的宽度了 blockWidth = int(Math.random() * (MAX_TILE_BLOCK_NUM - MIN_TILE_BLOCK_NUM) + MIN_TILE_BLOCK_NUM) * TILE_BLOCK_WIDTH;//计算随机平台的高度//因为 这里素材中 砖块的高度和宽度 都是 8,所以就不再额外加入 高度的静态值了blockHeight = int(Math.random() * (MAX_TILE_BLOCK_NUM - MIN_TILE_BLOCK_NUM) + MIN_TILE_BLOCK_NUM) * TILE_BLOCK_WIDTH;//计算平台的 x 坐标位置//MAP_WIDTH / TILE_BLOCK_WIDTH,这个是先计算出 地图的宽度 相当于多少个小砖块的数量//使用 random ,得到一个 砖块数的 随机值// - MAX_TILE_BLOCK_NUM,接着减去一个 每个随机平台的 最大数量,//就可以保证 平台的位置 不会超过 地图边界// * TILE_BLOCK_WIDTH,最后乘上小砖块的宽度,算出平台的 x 坐标blockX = int(Math.random() * MAP_WIDTH / TILE_BLOCK_WIDTH - MAX_TILE_BLOCK_NUM) * TILE_BLOCK_WIDTH;//同样算出 y 坐标blockY = int(Math.random() * MAP_HEIGHT / TILE_BLOCK_WIDTH - MAX_TILE_BLOCK_NUM) * TILE_BLOCK_WIDTH;//这里就生成一个 随机的砖块了newTile = new FlxTileblock(blockX, blockY, blockWidth, blockHeight);newTile.loadTiles(tileImg);//遍历levels 组中的 平台for each (var existTile:FlxTileblock in levels.members) {//当 新生成的 平台 与 之前的平台 重叠的话//就会返回 true//overlaps方法,判断 本object 是否与 参数中的 object 重叠newTileIsOverlapOthers = newTile.overlaps(existTile);//如果 发生重叠了 ,就停止遍历if (newTileIsOverlapOthers) {break;}}//重复次数 增加 1++loopCount;//当 发现 重叠 并且 重复次数 小于 最大重复次数时//回到循环,并重新 生成一个新的 随机平台//再与 之前 的平台 进行 重叠 判断//最大重复 次数 为 RANDOM_LOOP_COUNT//如果 不重叠,或者 重复次数 超过 最大重复次数//结束循环}while (newTileIsOverlapOthers && loopCount < RANDOM_LOOP_COUNT)//不管 本次生成的 随机平台 是否与之前的 重叠//都会加入到 平台 组中//由于 有 一定的 重复机会//所以 不重叠的 概率 也有 一定保证levels.add(newTile);}override public function update():void {//由于前面的地板方法被注释掉了,这个也跟着注释吧!//FlxU.collide(player, groundTile);//同上,注释掉吧//FlxU.collide(bullets, groundTile);//加入 子弹 与 现在 的 levels 碰撞检测FlxU.collide(bullets, levels);//人物与 levels 碰撞检测FlxU.collide(player, levels);//还是要提醒下,别忘了加上。。。super.update();}}}

看看运行效果吧,每次进入游戏都不一样哦~

Flixel横板游戏制作教程(四)— RandomLevels相关推荐

  1. 塔防游戏制作教程(四)

    嗨!大家好,我是小蚂蚁.今天我们继续分享制作一个塔防小游戏的第四节,如何实现炮塔的升级和出售功能. 如何实现炮塔的升级 在炮塔升级时,我们简单地做一些属性的提升以及外表的变化,例如当炮塔升级后,攻击速 ...

  2. 经典游戏制作教程[小糊涂的灵感]

    经典游戏制作教程 peng 1.游戏制作的主要流程 -------------------------------------------------------------------------- ...

  3. 简单的RPG游戏制作教程

    □企划部份 ◎第一步:决定资料格式 在进入游戏制作的初期,由于有许多和程式有关的资料需要编整,因此担任企划的人员常会忙得乱七八糟.在这个阶段,企划人员必需要和程式商量游戏中资料的格式.举个例子来说,在 ...

  4. 零基础 · 传说之下同人游戏制作教程

    1.0 废话 可略过 最好看一下 传说之下在很久以前便出现了"AU"这个说法,也正是从那时开始,无数游戏爱好者开始制作属于自己的传说之下同人游戏,随着时间的发展,无数AU游戏的&q ...

  5. 《从零开始的 RPG 游戏制作教程》第九期:信息反馈(上)

    目录 1. 前言 2. 第一期:制作基础场景 3. 第二期:让勇者和怪物登场 4. 第三期:基础的数值设计 5.第四期:从理论的角度简单聊聊关卡 6.第五期:制作物品和技能 7.第六期:设置怪物掉落物 ...

  6. 计算机与游戏制作,计算机动漫与游戏制作教程

    项目1动画造型设计 学习目标 项目描述 相关知识 项目任务 任务1动画造型认知 任务2动画造型设计 应用实践 教学指导 知识链接 项目2构成设计 学习目标 项目描述 项目任务 任务1点的体验与感受 项 ...

  7. U3D-亡命时速游戏制作(四)

    亡命时速游戏制作4 1.在亡命时速游戏制作3的基础上,我们发现小车在运行时容易跑到屏幕外面,我们此时就无法观察,因此我们要使相机跟随小车的运动. 我们选择主摄像机(Main Camera),将它的Po ...

  8. Easyx小游戏制作教程

    来源:微信公众号「编程学习基地」 文章目录 1.推箱子 2. 益智小游戏拼图制作 3.经典小游戏Easyx制作酷炫贪吃蛇 4. 回味童年经典项目----扫雷实现 5.C++面向对象编程之 flappy ...

  9. 《从零开始的RPG游戏制作教程》第四期:从理论的角度简单聊聊关卡

    目录 1. 前言 2. 第一期:制作基础场景 3. 第二期:让勇者和怪物登场 4. 第三期:基础的数值设计 到目前为止,我们已经接触了如何制作简单的游戏场景,如何放置装饰物.单位,如何修改单位属性,并 ...

  10. 游戏修改器制作教程四:用API读写内存

    本教程面向有C\C++基础的人,最好还要懂一些Windows编程知识 代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它... 写这个教程只是为了让玩家更好地体验所爱的 ...

最新文章

  1. Linux定时器使用
  2. php tostring(),【php】“__toString()”方法使用,php__tostring
  3. windows server 2008更新补丁失败排错
  4. Indent Guides for Visual Studio 代码格式化收缩插件
  5. Spark Accumulator累加器
  6. gstreamer向appsrc发送数据的代码
  7. ali 媒体转码签名生成-php
  8. 刚才调试了个mysql中文乱码的问题
  9. 【第七篇】Flowable核心内容之任务分配
  10. python tokenize()_tokenize- 用于Python源代码的Python – Python语言服务(Python教程)(参考资料)...
  11. 计算机网络基础以及linux面试知识点总结
  12. 小米book pro16笔记本怎么U盘安装系统教学分享
  13. 基于simulink的超级电容,电池及DC motor充放电系统仿真
  14. 找不到或无法加载主类com.kuang.springcloud.DeptProvider_8002
  15. Android-分辨率以及dip(dp)、dpi、ppi、px、sp、pt说明
  16. 收购英特尔基带业务,苹果5G仍有“硬伤”
  17. webView显示白屏的问题
  18. React生命周期的变化
  19. 2021-08-02 uni-app基础教程 环境配置
  20. jquery设置input不可编辑,背景变灰,鼠标变禁止

热门文章

  1. 关于Wincc 7.0 sp1 亚洲版的下载链接地址及授权,破解
  2. Windows环境下使用UHD PythonAPI开发USRP X310
  3. 计算机多媒体作业是什么,多媒体计算机技术作业一
  4. Rest-assured使用
  5. 工地泥浆流出大量邵阳抽泥浆罐车清理路面泥巴
  6. 完美解决 OneNote 笔记无法同步的问题
  7. Python制作黑客工具,发现了同学U盘里见不得人的秘密
  8. 《人人都在说谎:赤裸裸的数据真相》读书笔记1
  9. 如何将风险应用加入白名单_vivo手机怎么把风险应用添加到白名单
  10. GoogLeNet 神经网络结构