[转]http://www.cnblogs.com/BlueWoods/p/4684557.html

  这一节说说视窗,这个视窗,也就是游戏的视角。现在的网页游戏分为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
{<br>    // 检测时否改变屏幕视窗的坐标
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();//检测边界<br><br>    setMovableOffset(); // 屏幕视窗XY改变了,需要变化移动视窗的坐标
<em id="__mceDel">  moveMap();//加载地图
}
</em>
// 因为移动处于屏幕视窗的中央,屏幕视窗变化了,移动视窗也要重新计算其xy坐标<br>private function setMovableOffset() : void
{
_movableRect.x = _viewRect.x + (_viewRect.width - _movableRect.width) * 0.5;
_movableRect.y = _viewRect.y + (_viewRect.height - _movableRect.height) * 0.5;
}
//检测屏幕视窗的边界<br>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,根据人物移动坐标变化而变化的代码,地图层是根据屏幕的坐标去判断加载哪块地图的。

arpg网页游戏之地图(二)的更多相关文章

  1. arpg网页游戏之地图(一)

    [转]http://www.cnblogs.com/BlueWoods/p/4681572.html?from=timeline&isappinstalled=1 开发arpg网页游戏一项比较 ...

  2. arpg网页游戏之地图(三)

    地图分块加载类MapEngine,主要包含以下属性: g 地图层graphics,地图将画在上面 buffPixelRange 地图加载范围矩形 viewPort 屏幕视窗 currZoneArr 已 ...

  3. arpg网页游戏之地图(四)

    这一节主要是针对上一节的补充,关于地图的优化策略上一节中已经涉及了一些,这一节具体说下. 地图块加载队列:就拿1280*800的屏幕分辨率来讲,大约需要加载的地图块为30~35块之间,如果这个时候一下 ...

  4. arpg网页游戏特效播放(一)

    网页游戏中的特效,主要包括:场景特效,攻击特效和UI特效三种.场景特效是在地图层上播放的特效,攻击特效主要是技能触发的一些特效,UI特效是面板上的一些特效,还有一些在人物身上播放的特效,例如脚底光圈特 ...

  5. 网页游戏开发秘笈 PDF扫描版

    精选10种常见的游戏类型,透过典型实例,深入剖析游戏引擎及工具的选用技巧,详细讲解每款游戏的制作过程,为快速掌握网页游戏开发提供系统而实用的指南. 网页游戏开发秘笈 目录: 译者序  前 言  导 言 ...

  6. 从零开始手把手教你使用javascript+canvas开发一个塔防游戏01地图创建

    项目演示 项目演示地址: 体验一下 项目源码: 项目源码 代码结构 本节做完效果 游戏主页面 index.html <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  7. [Mugeda HTML5技术教程之14]案例分析:制作网页游戏

    本文档要分析的案例是一个爱消除的网页小游戏,从中可以体会一些Mugeda API的用法和使用Mugeda动画制作网页游戏的方法. (一)游戏规则: 1.开始游戏时,手机出现在最上面一行的任意一格: 2 ...

  8. Phaser3 场景Scene之间的传值 -- HTML JAVASCRIPT 网页游戏开发

      PHASERJS3 一.首先当然得有至少有二个场景sceneA.js,sceneB.js 二.从场景A传值到场景B二种方法 1)通过事件this.events.emit('event key',{ ...

  9. qq开放平台可以应用到网页游戏的api整理

    创建角色界面api整理 一.需求描述 1.  创建角色名称可以用qq空间昵称代替 2.  如果玩家是在新区玩的话,赠送老玩家支持礼包 3.  可以看到,好友xxx也在玩,而且到了多少等级,如果加为好友 ...

随机推荐

  1. IOS网络开发(一)

    1 简易的聊天工具 1.1 问题 Socket的英文原义是孔或者插座的意思,通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄,本案例使用第三方Socket编程框架AsyncSocket框架 ...

  2. Android 学习第2课,下载 eclipse 工具

    可以到http://www.ddooo.com/softdown/61745.htm 下载下来是32位与64位都有的 而且是汉化的,经测试成功,还可以,不错!

  3. 腾讯优测-优社区干货精选 |  那些年,我们在Android机型适配上遇到的坑之Camera拍照时快门咔嚓声

    文/腾讯优测研发工程师 吴宇焕 优测小优有话说: android机型适配的坑自然是不少,不想掉坑快来优测优社区~ 现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相时快门声音很响,想 ...

  4. spring mvc 请求转发和重定向

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  5. Nginx-ngx_lua模块原理和内置函数

    ngx_lua模块的原理: 1.每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM:2.将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问:3.每个 ...

  6. supervisor使用详解

    1.什么是supervisorsupervisor是用python写的一个进程管理工具,用来启动,重启,关闭进程. 2.supervisor的安装 pip install supervisor 3.s ...

  7. Android控件之SlidingDrawer(滑动式抽屉)详解与实例

    SlidingDrawer效果想必大家也见到过,它就是1.5模拟器上进入应用程序列表的效果.下面是截图 一.简介 SlidingDrawer隐藏屏外的内容,并允许用户通过handle以显示隐藏内容.它 ...

  8. Window环境下 Git 下载Android源码

    1.需要的工具 git.vpn代理 2. 设置git代理(Google source 无法下载,git设置代理) git config --global http.proxy "localh ...

  9. WCF JSON DATETIME JSON.NET (Newtonsoft.Json.dll)

    [DataMember] public DateTime? myTime { get; set; } var timeFormat = new JsonSerializerSettings() { D ...

  10. shiro 标签

    在使用Shiro标签库前,首先需要在JSP引入shiro标签: <%@ taglib prefix="shiro" uri="http://shiro.apache ...