arpg网页游戏之地图(二)
[转]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网页游戏之地图(二)的更多相关文章
- arpg网页游戏之地图(一)
[转]http://www.cnblogs.com/BlueWoods/p/4681572.html?from=timeline&isappinstalled=1 开发arpg网页游戏一项比较 ...
- arpg网页游戏之地图(三)
地图分块加载类MapEngine,主要包含以下属性: g 地图层graphics,地图将画在上面 buffPixelRange 地图加载范围矩形 viewPort 屏幕视窗 currZoneArr 已 ...
- arpg网页游戏之地图(四)
这一节主要是针对上一节的补充,关于地图的优化策略上一节中已经涉及了一些,这一节具体说下. 地图块加载队列:就拿1280*800的屏幕分辨率来讲,大约需要加载的地图块为30~35块之间,如果这个时候一下 ...
- arpg网页游戏特效播放(一)
网页游戏中的特效,主要包括:场景特效,攻击特效和UI特效三种.场景特效是在地图层上播放的特效,攻击特效主要是技能触发的一些特效,UI特效是面板上的一些特效,还有一些在人物身上播放的特效,例如脚底光圈特 ...
- 网页游戏开发秘笈 PDF扫描版
精选10种常见的游戏类型,透过典型实例,深入剖析游戏引擎及工具的选用技巧,详细讲解每款游戏的制作过程,为快速掌握网页游戏开发提供系统而实用的指南. 网页游戏开发秘笈 目录: 译者序 前 言 导 言 ...
- 从零开始手把手教你使用javascript+canvas开发一个塔防游戏01地图创建
项目演示 项目演示地址: 体验一下 项目源码: 项目源码 代码结构 本节做完效果 游戏主页面 index.html <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- [Mugeda HTML5技术教程之14]案例分析:制作网页游戏
本文档要分析的案例是一个爱消除的网页小游戏,从中可以体会一些Mugeda API的用法和使用Mugeda动画制作网页游戏的方法. (一)游戏规则: 1.开始游戏时,手机出现在最上面一行的任意一格: 2 ...
- Phaser3 场景Scene之间的传值 -- HTML JAVASCRIPT 网页游戏开发
PHASERJS3 一.首先当然得有至少有二个场景sceneA.js,sceneB.js 二.从场景A传值到场景B二种方法 1)通过事件this.events.emit('event key',{ ...
- qq开放平台可以应用到网页游戏的api整理
创建角色界面api整理 一.需求描述 1. 创建角色名称可以用qq空间昵称代替 2. 如果玩家是在新区玩的话,赠送老玩家支持礼包 3. 可以看到,好友xxx也在玩,而且到了多少等级,如果加为好友 ...
随机推荐
- JavaScript原型学习笔记
1 理解JavaScript原型 什么是原型? 原型是一个对象,其他对象可以通过它实现属性继承. 任何一个对象都可以成为原型么? 是 哪些对象有原型 所有的对象在默认的情况下都有一个原型,因为原型本身 ...
- Android HandlerThread 的使用及其Demo
今天我们一起来学习下一个Android中比较简单的类HandlerThread,虽然它的初始化有点小麻烦. 介绍 首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现 ...
- 相同vlan之间的相互访问
- MySQL数据单个数据太大,导入不进去
mysql导入数据,navicat报错: MySQL server has gone away Table Restored: act_ge_bytearray Rolling back... Fin ...
- [读书笔记]OSGI-灵活的类加载器架构
以下内容来自周志明的<深入理解Java虚拟机>. 学习JEE规范,去看JBoss源码:学习类加载器,就去看OSGI源码. OSGI,即Open Service Gateway Initia ...
- js实现cookie记住密码
近来做记住密码时,用js的实现方式做了一下. login.jsp页面代码 <%@ page language="java" import="java.util.*& ...
- (转) Graph-powered Machine Learning at Google
Graph-powered Machine Learning at Google Thursday, October 06, 2016 Posted by Sujith Ravi, S ...
- gradle 命令
gradle -v gradle clean gralde build gradle assembleDebug gradle assembleRelease gradle clean --refre ...
- ora-01445:无法从不带保留关键字的表的连接视图中选择ROWID或采样
系统要创建一个物化试图,用到很多张表,执行的时候报错: ora-01445:无法从不带保留关键字的表的连接视图中选择ROWID或采样 网上搜了下,有多种原因和解决方法,最终我选择先尝试一下修改 ...
- CentOS7 桌面的安装
对于linux桌面的安装,我们还是要先安装yum 1:查询桌面组件是否安装成功 yum grouplist #查询桌面组件 #由于我这里安装了,所以桌面菜单显示在已安装 2:选取我们要安装的组件 yu ...