游戏开发:Html5版宝可梦 Pokémon 游戏制作与设计思路分享(二)地图编辑器
经过不懈的努力,终于迎来了更新,还会继续更新后续内容。
可能会加一些魔改的功能和玩法……^ ^ 大家可以一起讨论有趣思路
更新已完成的功能:
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 游戏制作与设计思路分享(二)地图编辑器相关推荐
- HTML小游戏22 —— html5版疯狂光头强网页游戏(附完整源码)
- HTML小游戏21 —— html5版暴打皮卡丘游戏(附完整源码)
- html5游戏开发 网页版-捕鱼达人游戏源码下载
html5游戏开发 网页版-捕鱼达人游戏源码下载 来玩一把! 转载于:https://www.cnblogs.com/jsfoot/p/3215371.html
- 5 年营收超 50 亿美元,「宝可梦」游戏是怎么做到的?
本文转载自极客公园 仅用了一个 GPS 定位,就在游戏领域长出了一个新巨头 近日,时值<精灵宝可梦 Go>(Pokemon Go,以下简称<宝可梦 Go>)五周年之际,数据显示 ...
- Html5 Egret游戏开发 成语大挑战(六)游戏界面构建和设计
Html5 Egret游戏开发 成语大挑战(六)游戏界面构建和设计 本篇将主要讲解游戏界面的构建和设计,会应用到egret.eui的自定义组件,可以很直观的构建一个游戏整体,这里我们仍然只需要使用Eg ...
- Html5 Egret游戏开发 成语大挑战(七)游戏逻辑和数据处理
Html5 Egret游戏开发 成语大挑战(七)游戏逻辑和数据处理 本篇在前面的基础上,将进行逻辑的编码开发让游戏能够正式的玩起来,这里没有注重太多的体验细节,而是直接实现游戏的规则逻辑,将分成两个部 ...
- Unity3D游戏开发[扫描版pdf微云下载]
Unity3D游戏开发[扫描版pdf下载] 下载地址 下载地址 微云下载地址:(https://share.weiyun.com/IFOsDjhg) https://share.weiyun.com/ ...
- 亚马逊重组游戏开发部门:数个未发布游戏被“扼杀”;台积电明年开始为苹果iPhone生产5nm处理器……...
关注并标星星CSDN云计算 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周三次,打卡即read 更快.更全了解泛云圈精彩news g ...
- 硬件街机游戏开发,单片机游戏开发,CPLD/FPGA、ARM平台游戏开发群成立
本超级QQ群成立,上限人数为500. 目标是发展中国游戏产业,提升硬件游戏开发技术交流.提供大的平台. 发展的方向是游戏动漫相结合,此群不是网络游戏开发,为单板街机游戏开发. 所属第三产业.以电脑板游 ...
最新文章
- Cissp-【第5章 身份与访问管理】-2021-3-14(601页-660页)
- YBTOJ洛谷P2839:最大中位数(主席树、二分答案)
- acquire方法_Python锁类| 带有示例的acquire()方法
- 05_SpringCloud整合声明式HTTP客户端-Feign
- B样条曲线介绍和实现(等值线平滑)
- 智能硬件(3)---各种“地”—— 各种“GND”
- 3-服务器端添加客户端事件
- 【转】Jenkins+Ant+Jmeter接口自动化集成测试实例
- 添加谷歌账户显示与服务器,解决添加google同步帐户出错竟然可以这般简单!
- vc6.0到vc 2008(vc 9.0)的变化
- AxureUX中后台管理信息系统通用原型方案 v2 (全新AxureRP8作品 )
- Android腾讯微博开放平台入门(四)发表一条文字微博
- 尼康d850相机参数测试软件,尼康D850 这可能是你唯一需要的单反相机
- 中级微观经济学笔记整理
- Mac终端远程连接历史记录怎么清除
- win10专业版和企业版的区别_win10家庭版和专业版区别
- 合肥盛荣乒乓球俱乐部学习感悟
- python人文社科研究_人文社科论文写作数据分析利器|SPSS+Stata+Endnote+Python
- wps云文档回收站在哪_获得自己的云并回收数据
- 2022-2028年全球与中国零售会计软件行业发展趋势及竞争策略研究