经过不懈的努力,终于迎来了更新,还会继续更新后续内容。

可能会加一些魔改的功能和玩法……^ ^ 大家可以一起讨论有趣思路

更新已完成的功能:

1、地图编辑器

2、角色移动碰撞检测

.
新实现的功能和大家分享制作的思路及源码
.

下载地址

分享下主游戏运行地址:
http://h5demo.yyfuncdn.com/res/gameDemo/Pokemon2/game.html
地图编辑器地址:
http://h5demo.yyfuncdn.com/res/gameDemo/Pokemon2/mapEditor.html
.
= 手机扫码运行看效果 =

项目下载地址:
http://h5demo.yyfuncdn.com/res/gameDemo/Pokemon2.zip

.

制作思路及主要代码

一、地图编辑器

地图编辑器共分成两大部分,第一部分为编辑场景、第二部分为生成场景

编辑场景部分:首先是在游戏场景中生成了44×44个小方块按顺序排列,把场景模拟成多个小区域,并创建了一个44×44的二维数组用于存储每个小方块所在区域的放置状态

拖拽物体放入场景后,修改被物体所占据的小方块的放置状态为当前物体的序号

下面是地图放置的相关代码,在放下之前进行的相关计算:

app.stage.on("mouseup",function(event){//判断鼠标抬起时,被选取物体的放置情况if(dx==null)return;if(dx.view.x < 0 ||dx.view.x > 1980 || dx.view.y < 0 || dx.view.y > 1980){//如果不在游戏图片区域内则取消放置app.stage.removeChild(dx.view);dx = null;return;}var arrx = Math.round((dx.view.x+Barrier_data[dx.id].width/2)/45);var arry = Math.round((dx.view.y+Barrier_data[dx.id].height/2)/45);dx.view.anchor.set(1,1);dx.view.x = arrx*45;dx.view.y = arry*45;bg.addChild(dx.view);if(fillMap(arrx-1,arry-1,Barrier_data[dx.id].scopex,Barrier_data[dx.id].scopey,dx.id) == false){//如果当前区域已放置物体则取消放置bg.removeChild(dx.view);dx = null;console.log("no");return;}//成功放置console.log("yes");placeObject.push(dx);updateRoleCengIndex(placeObject);dx = null;
})

生成场景部分:生成场景方法与编辑场景类似,检查放置状态数组中的放置状态,当查找到有某物体序号时根据序号在当前位置生成物体

下面为生成地图的方法代码:

function addbarrier(obj,barrierObj){//添加物体var arr = [];for(var i = 0;i < barrierData.length;i++){arr.push([]);for(var k = 0;k < barrierData[i].length;k++){arr[i].push([]);arr[i][k] = null;}    }//利用 barrierData 数组数据添加物体对象for(var i = 0;i < barrierData.length;i++){for(var k = 0;k < barrierData[i].length;k++){if(arr[i][k]!=null || barrierData[i][k]=="")continue;var id = barrierData[i][k];fillMap(i,k,Barrier_data[id].scopex,Barrier_data[id].scopey,id,arr);var barrier = new obj("src1/"+Barrier_data[id].url,self.view);barrier.view.x = i*45+Barrier_data[id].width/2+Barrier_data[id].fakex;barrier.view.y = k*45+Barrier_data[id].height+Barrier_data[id].fakey;barrierObj.push(barrier);}    }return arr;}

二、角色碰撞检测

当角色移动时记录移动前的位置,移动后检查角色所在的位置属于哪个小方块的区域,并在数组中检查这个区域是否有物体存在,如果有物体存在则回到移动前的位置。

角色对象补充了碰撞方法:

function Role(parent){//主角对象var self = this;this.direction = "S";this.player = new Animation();this.player.init(action_data,this.direction);this.view = this.player.sprite;parent.addChild(this.view);this.view.anchor.set(0.5,1);this.moveState = false;this.initPos = function(x,y){//初始化角色位置self.view.x = x;self.view.y = y;}function update(){//人物动画if(self.moveState){self.player.action(self.direction);}else{self.player.stand(self.direction);}}function movingRange(){//移动范围不能超过背景if(self.view.x < self.view.width/2){//判断角色位于窗口左边界时self.view.x = self.view.width/2;//让角色位置无法越过窗口左边界}else if(self.view.x > (1980-self.view.width/2)){//判断角色位置位于窗口右边界时self.view.x = (1980-self.view.width/2);//让角色位置无法越过窗口右边界}if(self.view.y < 45){//判断角色位于窗口上边界时self.view.y = 45;//让角色位置无法越过窗口上边界}else if(self.view.y > 1980){//判断角色位置位于窗口下边界时self.view.y = 1980;//让角色位置无法越过窗口下边界}}function collide(barrierArr){//碰撞方法var y = Math.ceil(self.view.y/45)-1;var x = Math.ceil(self.view.x/45)-1;if(barrierArr[x][y] != null){return true;}x = Math.ceil((self.view.x-17)/45)-1;if(barrierArr[x][y] != null){return true;}x = Math.ceil((self.view.x+17)/45)-1;if(barrierArr[x][y] != null){return true;}}this.move = function(obj,collideArr){//角色移动方法update();var speed = obj.getSpeed();if(speed.x == 0 && speed.y == 0){self.moveState = false;if(self.direction == "a")self.direction = "A";if(self.direction == "d")self.direction = "D";if(self.direction == "w")self.direction = "W";if(self.direction == "s")self.direction = "S";}var pos = {x:self.view.x,y:self.view.y};self.view.x += speed.x;self.view.y += speed.y;movingRange();if(collide(collideArr)){self.view.x = pos.x;self.view.y = pos.y;}}
}

接下来准备做
1)进入室内,场景切换

游戏开发:Html5版宝可梦 Pokémon 游戏制作与设计思路分享(二)地图编辑器相关推荐

  1. HTML小游戏22 —— html5版疯狂光头强网页游戏(附完整源码)

  2. HTML小游戏21 —— html5版暴打皮卡丘游戏(附完整源码)

  3. html5游戏开发 网页版-捕鱼达人游戏源码下载

    html5游戏开发 网页版-捕鱼达人游戏源码下载 来玩一把! 转载于:https://www.cnblogs.com/jsfoot/p/3215371.html

  4. 5 年营收超 50 亿美元,「宝可梦」游戏是怎么做到的?

    本文转载自极客公园 仅用了一个 GPS 定位,就在游戏领域长出了一个新巨头 近日,时值<精灵宝可梦 Go>(Pokemon Go,以下简称<宝可梦 Go>)五周年之际,数据显示 ...

  5. Html5 Egret游戏开发 成语大挑战(六)游戏界面构建和设计

    Html5 Egret游戏开发 成语大挑战(六)游戏界面构建和设计 本篇将主要讲解游戏界面的构建和设计,会应用到egret.eui的自定义组件,可以很直观的构建一个游戏整体,这里我们仍然只需要使用Eg ...

  6. Html5 Egret游戏开发 成语大挑战(七)游戏逻辑和数据处理

    Html5 Egret游戏开发 成语大挑战(七)游戏逻辑和数据处理 本篇在前面的基础上,将进行逻辑的编码开发让游戏能够正式的玩起来,这里没有注重太多的体验细节,而是直接实现游戏的规则逻辑,将分成两个部 ...

  7. Unity3D游戏开发[扫描版pdf微云下载]

    Unity3D游戏开发[扫描版pdf下载] 下载地址 下载地址 微云下载地址:(https://share.weiyun.com/IFOsDjhg) https://share.weiyun.com/ ...

  8. 亚马逊重组游戏开发部门:数个未发布游戏被“扼杀”;台积电明年开始为苹果iPhone生产5nm处理器……...

    关注并标星星CSDN云计算 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周三次,打卡即read 更快.更全了解泛云圈精彩news g ...

  9. 硬件街机游戏开发,单片机游戏开发,CPLD/FPGA、ARM平台游戏开发群成立

    本超级QQ群成立,上限人数为500. 目标是发展中国游戏产业,提升硬件游戏开发技术交流.提供大的平台. 发展的方向是游戏动漫相结合,此群不是网络游戏开发,为单板街机游戏开发. 所属第三产业.以电脑板游 ...

最新文章

  1. Cissp-【第5章 身份与访问管理】-2021-3-14(601页-660页)
  2. YBTOJ洛谷P2839:最大中位数(主席树、二分答案)
  3. acquire方法_Python锁类| 带有示例的acquire()方法
  4. 05_SpringCloud整合声明式HTTP客户端-Feign
  5. B样条曲线介绍和实现(等值线平滑)
  6. 智能硬件(3)---各种“地”—— 各种“GND”
  7. 3-服务器端添加客户端事件
  8. 【转】Jenkins+Ant+Jmeter接口自动化集成测试实例
  9. 添加谷歌账户显示与服务器,解决添加google同步帐户出错竟然可以这般简单!
  10. vc6.0到vc 2008(vc 9.0)的变化
  11. AxureUX中后台管理信息系统通用原型方案 v2 (全新AxureRP8作品 )
  12. Android腾讯微博开放平台入门(四)发表一条文字微博
  13. 尼康d850相机参数测试软件,尼康D850 这可能是你唯一需要的单反相机
  14. 中级微观经济学笔记整理
  15. Mac终端远程连接历史记录怎么清除
  16. win10专业版和企业版的区别_win10家庭版和专业版区别
  17. 合肥盛荣乒乓球俱乐部学习感悟
  18. python人文社科研究_人文社科论文写作数据分析利器|SPSS+Stata+Endnote+Python
  19. wps云文档回收站在哪_获得自己的云并回收数据
  20. 2022-2028年全球与中国零售会计软件行业发展趋势及竞争策略研究

热门文章

  1. 人工智能的几个小故事
  2. java培训学习之Java桌面软件开发
  3. UnityShader案例篇-镜子1
  4. 阿里云服务器[Ubuntu 20.04]配置MySQL并实现远程连接
  5. 计算机维修暑假实践,计算机暑假实践报告
  6. JavaScript入门记录
  7. 【日常】word--自定义目录-一键生成目录
  8. Ubuntu22.04下安装OpenFOAM
  9. 大数据:网购成为主流生活方式
  10. 使用人工智能赚钱的方式,行业领域有哪些?