这一节说说视窗,这个视窗,也就是游戏的视角。现在的网页游戏分为2D游戏,2.5D游戏和3D游戏,2D游戏基本是一些横板的,2.5D基本都是arpg的,可以说游戏画面投影的角度略有不同,3D网页游戏,现在也有不少,效果做的不错的,都是带微端的,不带微端同屏人数过多就会出现卡顿的情况。个人感觉网页还不太适合做3D的,一是效率问题,二是表现效果不如端游炫。端游开发周期较长,世界观比较宏大,玩家呢,要适应游戏世界,并在里面找到自己的定位,这样玩家的忠诚度比较高;而网页游戏的目的不恰恰相反,它主要是迎合玩家的口味,并利用玩家的心理诱导其充值,游戏周期一年左右,玩家玩一个月基本就没什么新东西了。

  说的有点跑题了。这个视窗主要是根据玩家的坐标来控制人物层和地图层移动的,它包含四个属性:人物坐标FocusPoint,最大视窗:MaxRect,移动视窗:moveRect,屏幕视窗viewRect

  • 人物坐标fp:你玩网页游戏的时候,你会发现玩家的移动范围。当他移动到地图边界的时候,他才会真正的移向边界;当他远离边界的时候,他基本保持在屏幕的中央。虽然人物位置是按照格子坐标表示的,但是人物移动的时候,还是按照像素移动。
  • 最大范围MaxRect:就是当前地图的宽和高
  • 移动范围moveRect:玩家在此范围内移动,不会改变地图层的坐标,在游戏中我设置的可移动范围是100*100。其实你可以想象下:在屏幕的最中央,有100*100的矩形中,玩家在此移动是不会推图的,有助于提高玩家的体验,提升效率。
  • 屏幕视窗ScreenRect:就是舞台的宽高

  算法代码如下:

public function setFocusPoint(p:Point) : void
{_orx = _viewRect.x;_ory = _viewRect.y; // 记录原始视窗坐标(记录的作用?)_focusPoint.x = p.x >> 0;_focusPoint.y = p.y >> 0;focusPointChanged(); //触发视角变化事件
}

private function focusPointChanged() : void
{    // 检测时否改变屏幕视窗的坐标if (_focusPoint.x < _movableRect.x){_viewRect.x = _focusPoint.x - _viewRect.width / 2 + _movableRect.width / 2;}if (_focusPoint.x > _movableRect.right){_viewRect.x = _focusPoint.x - _viewRect.width / 2 - _movableRect.width / 2;}if (_focusPoint.y < _movableRect.y){_viewRect.y = _focusPoint.y - _viewRect.height / 2 + _movableRect.height / 2;}if (_focusPoint.y > _movableRect.bottom){_viewRect.y = _focusPoint.y - _viewRect.height / 2 - _movableRect.height / 2;}
    checkViewRectOffset();//检测边界

    setMovableOffset(); // 屏幕视窗XY改变了,需要变化移动视窗的坐标
   moveMap();//加载地图
}

// 因为移动处于屏幕视窗的中央,屏幕视窗变化了,移动视窗也要重新计算其xy坐标private function setMovableOffset() : void
{_movableRect.x = _viewRect.x + (_viewRect.width - _movableRect.width) * 0.5;_movableRect.y = _viewRect.y + (_viewRect.height - _movableRect.height) * 0.5;
}

//检测屏幕视窗的边界private function checkViewRectOffset() : void
{if (_viewRect.x < 0){_viewRect.x = 0;}if (_viewRect.y < 0){_viewRect.y = 0;}if (_viewRect.x + _viewRect.width > _maxRect.width){_viewRect.x = _maxRect.width - _viewRect.width;}if (_viewRect.y + _viewRect.height > _maxRect.height){_viewRect.y = _maxRect.height - _viewRect.height;}
}

  这是游戏视窗Manager,根据人物移动坐标变化而变化的代码,地图层是根据屏幕的坐标去判断加载哪块地图的。

  转载请表明出处

转载于:https://www.cnblogs.com/BlueWoods/p/4684557.html

arpg网页游戏之地图(二)相关推荐

  1. 网页游戏开发入门教程二(游戏模式+系统)

    2019独角兽企业重金招聘Python工程师标准>>> 一.游戏模式 目前webgame游戏模式大体上可以分为以下四类: 1.玩家拥有一个城市,不断的升级城市内建筑,建筑可以自动获得 ...

  2. 想要做网页游戏怎么办 ?PixiJs 篇(二)

    序 继上一次的想要做网页游戏怎么办 ?PixiJs 篇(一)后,这次继续更新一下这次的文章 之前有说关于pixi是什么以及基本的使用方法,这一次是关于我们创建出来的精灵对象运动状态的说明 就是如何让你 ...

  3. 网页游戏怎么修改数据_一周网页游戏数据报告(7.14-7.20)

    一.运营平台开服排行 点评:纵观本周网页游戏排行榜,众平台排名变化不大.本周一线平台共开服3996组,入驻新游戏43款,其中12款游戏目前仍处于测试阶段:9377<群雄争霸>,此款三国题材 ...

  4. 网页游戏怎么修改数据_一周网页游戏开服数据总结(9.1-9.7)

    一.运营平台开服排行 点评:纵观本周网页游戏数据排行榜,各上榜平台的开服数据大体趋势有所上升且平台间的排名变化不大.本周一线平台共开服4035组,入驻新游27款:开服总数一定程度上有所增加而入驻新游的 ...

  5. Silverlight MMORPG网页游戏开发课程(Game Lesson):目录

    [感谢 银光中国 提供本课程所有源码资源分流] 一次全新的开始,一次全新的构建与诠释.渴望在时空长廊中寻觅传说中光的起源,我决定用这部课程编写一首血脉喷张之进行曲.一年前,我一个人在战斗,前行,引导我 ...

  6. 一款基于Webgl实现的3D类网页游戏

    摘要:本文主要介绍运用webgl的第三方框架three.js实现的一款简单的3D类网页游戏.主要内容包括介绍three.js,如何运用three.js摆放相机,设置相机角度,相机视觉角度转移,场景中物 ...

  7. 网页游戏开发入门教程

    Posted by Gamelook on 2009.09.06 一.简单的程序框架.webgame程序构成: 三大部分. 第一是数据流程.第二是程序.第三是美术. 其中,数据流程包括了功能.也只有在 ...

  8. 网页游戏的攻击与防御

    网页游戏的安全问题,在刚入职接触的时候,写过两篇比较浅显的文章<网页外挂防御有感>和<网页游戏常见外挂原理及防御>.算算时间,距离现在也有一年多了,虽然页游安全总体上并没有显著 ...

  9. 我的网页游戏开发计划[7.03更新]

    谨以此博记录我的游戏开发路程,进度将不定期在此文中更新. 想要开发一个网页游戏,下面是我的计划: 1.客户端计划用flash语言,所以需要先学习AS3和Flex. 目前AS3已经大致学完,对Flex也 ...

最新文章

  1. P3806 【模板】点分治1
  2. dubbo多网卡时,服务提供者的错误IP注册到注册中心导致消费端连接不上
  3. 2021 年百度之星·程序设计大赛 - 初赛二 1001 签到(找规律,快速幂)
  4. 数学笔记--线性代数
  5. Codeforces #440.Div.2
  6. 微软北大联合提出换脸AI和脸部伪造检测器,演绎现实版「矛与盾」?
  7. 手把手教你研发属于自己的智能无人机
  8. Meaningless Sequence Gym - 102832D
  9. javascript优先级注意点
  10. php.ini开启命名空间,Zend Framework教程之模型Model基本规则和使用方法
  11. if __name__ == __main__:什么意思_秒懂Python编程中的if __name__ == 'main' 的作用和原理...
  12. 关于c3样式在浏览器上的兼容问题
  13. 特斯拉:未授权第三方对外开展特斯拉充电站有关投资或集资项目
  14. 超清晰 ,一文理解:深拷贝与浅拷贝(js)
  15. Python之路【第十五篇】:Web框架
  16. Kubectl merge kubeconfig.yml 文件
  17. arcgis取反+掩膜提取
  18. 计算机无法打印图片,电脑中打印机可以打印文档却无法打印图片如何解决
  19. HpSocket HttpEasyClient 二次封装
  20. linux 截屏_如何在Linux上创建截屏视频

热门文章

  1. JAVA中List与Array之间互换
  2. 浅析MySQL中exists,in ,=的使用
  3. java基础概念整理(三)
  4. centos7设置输入密码三次错误锁定账号
  5. 《自顶向下网络设计(第3版)》——2.7 适应性
  6. JStorm如何保证消息不丢失
  7. ServiceStack 项目实例 010 ServiceStack.Northwind - 2
  8. 明明白白你的Linux服务器——网络篇(2)
  9. Golang sync.Pool 简介与用法
  10. 实验5 —— 编写、调试具有多个段的程序