[转]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. 黑马程序员:Java编程_反射技术

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== Java类用于描述一类事物的共性,该类事物有什么属性,没有什么属性,至于这个属性 ...

  2. linux命令基础学习

    谨慎使用 rm -rf /* 命令 谨慎在SSH执行“rm -rf /*”,若不了解这个命令,可能导致整个Linux系统文件全部被删除. 这个删除命令只有 “root” 权限的帐号才可以执行,其它未取 ...

  3. (实用篇)jQuery+PHP+MySQL实现二级联动下拉菜单

    二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动.本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果. 先看下效果 大类:  前端技术 ...

  4. Flash Builder如何自定义工作目录

    熟悉了myeclipse可以自定义目录的设置,今天在使用flash builder 时,当导入一个工程到现有项目空间 选择根目录,点击浏览的时候出现的目录是C:\Users\Administrator ...

  5. mysql存储过程详解(入门)

    delimiter //    #修改结束符号为// create procedure pro_wyx() /*创建存储过程*/ begin declare i int ; #定义变量 set i=1 ...

  6. 如何让WordPress支持上传更多文件类型

    如何让WordPress支持上传更多文件类型   可以在functions.php中这样写: 1 2 3 4 5 6 7 8 9 add_filter('upload_mimes', 'wpdit_f ...

  7. 论文笔记之:Large Scale Distributed Semi-Supervised Learning Using Streaming Approximation

    Large Scale Distributed Semi-Supervised Learning Using Streaming Approximation Google  2016.10.06 官方 ...

  8. JdbcUtils 系列1

    1.开发前准备 创建java pro为dbutils_1,没有lib目录,建一个即可 /dbutils_1/lib/mysql-connector-java-5.0.8-bin.jar 数据库搭建c3 ...

  9. [转]Windows多进程编程

    转自:http://blog.csdn.net/bxhj3014/article/details/2082255 一.进程的概念       进程是是一个正在运行的程序的实例(飘---),是系统分配资 ...

  10. C# :GDI+技术生成复杂型彩色验证码(转载)

    该类是生成一个验证码的类,集合了网上大部分的C#关于GDI+的文章进行多次改进,现在已经形成了可在生产环节中使用的验证码. 该验证码加入了背景噪点,背景噪点曲线和直线,背景噪点文字以及扭曲,调暗,模糊 ...