- 浏览: 88349 次
- 性别:
- 来自: 龙城
最新评论
-
Fis:
阿呆jinsss 写道 楼主说的简单易懂,最适合我这些理解能力 ...
[原创]AS3.0的自定义事件 -
阿呆jinsss:
楼主说的简单易懂,最适合我这些理解能力差点的人,谢谢了~
[原创]AS3.0的自定义事件 -
Fis:
mengxiaolongcz 写道外层循环 i<arr. ...
去除数组中相同的元素 -
Fis:
mengxiaolongcz 写道外层循环 i<arr. ...
去除数组中相同的元素 -
mengxiaolongcz:
外层循环 i<arr.length-1
里层循环 var ...
去除数组中相同的元素
首发www.eb163.com
在EB163 Flash RPG Webgame Demo V1.06源码中,经过观察和分析,明白了地图移动公式的原理,仅是个人看法,或有偏颇,欢迎大家拍砖共同探讨,下面一起看看。先是代码:
人物类 HeptaFishCharacter.as 第180行
首先,公式重点在这个判断:
这里提出一个理解的办法,因为公式中用到了一系列的比较,包括移动速度、地图宽高、屏幕宽高等数字量的关系,所以就涉及到地图宽高、屏幕宽高的比较。只要把“人物的移动”看成是“地图的移动”就好了,即“人物在动=地图在动”。
因为人物动等同于地图动,所以可以把人物行走的问题(人物在屏幕中行走)等价看成是地图在屏幕中行走的问题。
下面是公式解释:
以上声明是为公式用到的量做初始化和赋值操作,依次是:
__xspeed、__yspeed:定义的水平速度、定义的垂直速度
__dx、__dy:水平方向矢量距离、垂直方向矢量距离
__newDistance:新的绝对距离
x += __xspeed/2:计算人物x坐标移动量
y += __yspeed/2:计算人物y坐标移动量
mapXSpeed、mapYSpeed:地图水平移动量(真实的水平移动量)、地图垂直移动量(真实的垂直移动量)
__scX、__scY:屏幕宽度、屏幕高度
然后到移动公式,这里面做了4个比较,4个条件都成立的时候就让地图往做反向运动,这里单纯的做了两个方向上的判断,减少了判断代码量和判断的复杂程度。以第一个条件语句为例(水平方向的判断),这4个条件可以理解为:
1、mapXSpeed < 0:地图水平移动量小于0,数值表示的是地图的位移量,负号用来为地图的反向运动做铺垫。
2、mapXSpeed > -(_mapScene.mapWidth - __scX):地图水平移动量大于地图宽度与屏幕宽度的差,意味着地图还能向左移动。括号外的负号相当于把界线平移到原点左边。
3、x >= __scX/2:人物x坐标大于等于屏幕宽度的一半,意味着人物在屏幕的右半屏,地图可以往左移动。
4、x <= _mapScene.mapWidth - __scX/2:人物x坐标小于等于地图宽度与屏幕宽度一半的差,意味着人物尚未移动到地图的左边缘,人物可以继续往左移动。
以上就是4个条件的意思,由于地图的移动范围是限定在原点以左,不会超过原点,和原点重合的时候就是移动到了地图的左边缘,满足以上条件时就是地图允许被移动的时候。第二个判断(垂直方向)同理。
条件成立后地图之所以要做反向运动,是因为地图的移动方向和人物相反,计算的偏移量是以人物的角度为参照的,故作反向运动。也正因为人物的移动和地图移动方向相反,所以就可以看到人物始终在地图中央了。
在EB163 Flash RPG Webgame Demo V1.06源码中,经过观察和分析,明白了地图移动公式的原理,仅是个人看法,或有偏颇,欢迎大家拍砖共同探讨,下面一起看看。先是代码:
人物类 HeptaFishCharacter.as 第180行
protected function onMove(evet:Event):void{ var __xspeed:Number = 10*Math.cos(_angle); var __yspeed:Number = 10*Math.sin(_angle); var __dx:Number = _aimx-x; var __dy:Number = _aimy-y; var __newDistance:Number = __dx*__dx+__dy*__dy; x += __xspeed/2; y += __yspeed/2; var mapXSpeed:Number = _mapScene.x - __xspeed/2; var mapYSpeed:Number = _mapScene.y - __yspeed/2; var __scX:Number = Capabilities.screenResolutionX; var __scY:Number = Capabilities.screenResolutionY; if(mapXSpeed < 0 && mapXSpeed > -(_mapScene.mapWidth - __scX) && x >= __scX/2 && x <= _mapScene.mapWidth - __scX/2){ _mapScene.x -= __xspeed/2; } if(mapYSpeed < 0 && mapYSpeed > -(_mapScene.mapHeight - __scY) && y >= __scY/2 && y <= _mapScene.mapHeight - __scY/2){ _mapScene.y -= __yspeed/2; } if(__yspeed>0){ _faceToScreen = true; }else if(__yspeed<0){ _faceToScreen = false; } if(__newDistance<_speed*_speed || _distance<__newDistance){ x = _aimx; y = _aimy; stopCharacter(); dispatch(WalkEvent,WalkEvent.WALK_END); }else{ _distance = __newDistance; dispatch(WalkEvent,WalkEvent.ON_WALK); } _mapScene.mapLayer.checkLoad(new Point(this.x, this.y)); }
首先,公式重点在这个判断:
if(mapXSpeed < 0 && mapXSpeed > -(_mapScene.mapWidth - __scX) && x >= __scX/2 && x <= _mapScene.mapWidth - __scX/2){ _mapScene.x -= __xspeed/2; }
这里提出一个理解的办法,因为公式中用到了一系列的比较,包括移动速度、地图宽高、屏幕宽高等数字量的关系,所以就涉及到地图宽高、屏幕宽高的比较。只要把“人物的移动”看成是“地图的移动”就好了,即“人物在动=地图在动”。
因为人物动等同于地图动,所以可以把人物行走的问题(人物在屏幕中行走)等价看成是地图在屏幕中行走的问题。
下面是公式解释:
var __xspeed:Number = 10*Math.cos(_angle); var __yspeed:Number = 10*Math.sin(_angle); var __dx:Number = _aimx-x; var __dy:Number = _aimy-y; var __newDistance:Number = __dx*__dx+__dy*__dy; x += __xspeed/2; y += __yspeed/2; var mapXSpeed:Number = _mapScene.x - __xspeed/2; var mapYSpeed:Number = _mapScene.y - __yspeed/2; var __scX:Number = Capabilities.screenResolutionX; var __scY:Number = Capabilities.screenResolutionY;
以上声明是为公式用到的量做初始化和赋值操作,依次是:
__xspeed、__yspeed:定义的水平速度、定义的垂直速度
__dx、__dy:水平方向矢量距离、垂直方向矢量距离
__newDistance:新的绝对距离
x += __xspeed/2:计算人物x坐标移动量
y += __yspeed/2:计算人物y坐标移动量
mapXSpeed、mapYSpeed:地图水平移动量(真实的水平移动量)、地图垂直移动量(真实的垂直移动量)
__scX、__scY:屏幕宽度、屏幕高度
if(mapXSpeed < 0 && mapXSpeed > -(_mapScene.mapWidth - __scX) && x >= __scX/2 && x <= _mapScene.mapWidth - __scX/2){ _mapScene.x -= __xspeed/2; }
然后到移动公式,这里面做了4个比较,4个条件都成立的时候就让地图往做反向运动,这里单纯的做了两个方向上的判断,减少了判断代码量和判断的复杂程度。以第一个条件语句为例(水平方向的判断),这4个条件可以理解为:
1、mapXSpeed < 0:地图水平移动量小于0,数值表示的是地图的位移量,负号用来为地图的反向运动做铺垫。
2、mapXSpeed > -(_mapScene.mapWidth - __scX):地图水平移动量大于地图宽度与屏幕宽度的差,意味着地图还能向左移动。括号外的负号相当于把界线平移到原点左边。
3、x >= __scX/2:人物x坐标大于等于屏幕宽度的一半,意味着人物在屏幕的右半屏,地图可以往左移动。
4、x <= _mapScene.mapWidth - __scX/2:人物x坐标小于等于地图宽度与屏幕宽度一半的差,意味着人物尚未移动到地图的左边缘,人物可以继续往左移动。
以上就是4个条件的意思,由于地图的移动范围是限定在原点以左,不会超过原点,和原点重合的时候就是移动到了地图的左边缘,满足以上条件时就是地图允许被移动的时候。第二个判断(垂直方向)同理。
条件成立后地图之所以要做反向运动,是因为地图的移动方向和人物相反,计算的偏移量是以人物的角度为参照的,故作反向运动。也正因为人物的移动和地图移动方向相反,所以就可以看到人物始终在地图中央了。
发表评论
-
LayaBox flash 转换项目心得
2015-08-28 13:50 4447一、熟悉从as3项目转到js的API和特性差异 1、Simpl ... -
Starling中AssetManager加载文件的流程整理
2015-06-16 20:15 1370Starling做移动开发,会用到大量的纹理和图片素材、X ... -
LayaBox flash 转换项目心得
2015-08-28 13:46 0一、熟悉从as3项目转到j ... -
air遍历目录里的文件
2015-02-12 15:52 982air开发移动应用时,用于遍历一个目录里的所有文件: var ... -
MovieClip 帧里面子对象为null 问题的解决
2014-10-11 17:19 836原因是进入其中一帧后,MovieClip对象不会立刻被创建出来 ... -
as3打包手机引用
2013-10-18 17:48 8001、新建手机项目 去掉其他平台选项 创建项目。 ... -
as3 ANE的打包小结
2013-10-18 15:15 2701工作关系要用到as3手游ANE的打包,之前因为用不到,也没 ... -
SWFLoader不响应Event.COMPLETE事件
2012-06-25 16:16 1231工作中遇到了一个问题,flex控件SWFLoader解决了 ... -
PHP中的生成XML文件的4种方法
2012-05-02 14:07 1075原文:http://www.oschina.net/code/ ... -
AS3 位运算
2012-04-17 13:04 922原文转至http://www.tangpei.net/2011 ... -
支持参数的事件处理函数
2012-04-11 14:44 3通常情况下,我们使用事件机制时,编写的事件处理函数只需要一 ... -
关于as3运动效果的总结
2012-03-22 18:18 1055看了《ActionScript3.0高级动画教程》一书,用 ... -
ActionScript3高级动画教程笔记
2012-03-14 17:09 8102012.3.14 基本三角函数的计算: 角的正弦值 = ... -
移除匿名函数定义的事件处理函数
2012-01-17 14:12 2791如果一个监听事件是匿名函数,那当要移除的时候就会有困扰,既 ... -
传参之事件代理
2012-01-17 14:04 732通常情况下,我们使用事件机制时,编写的事件处理函数只需要一 ... -
Flex Application初始化顺序
2012-01-14 17:54 1145preloader->systemManager-> ... -
换页显示代码
2011-12-20 15:55 941var maxPage:int = Math.ceil(t ... -
全数段取值显示
2011-12-16 22:19 769这个叫法是自己取的,工作中用到了,这里记录一下。 p ... -
as3开发社交游戏的一些总结
2011-07-13 17:57 1232加入社交游戏开发 ... -
抛物线运动公式总结
2011-05-24 20:53 8149竖直上抛运动: 初始化 t = 0; a = ...
相关推荐
《EB163 45度地图编辑器》是一款专为45度角游戏设计的专业地图编辑工具,它集成了源代码,使得用户不仅可以直接使用编辑器进行地图创作,还能根据自身需求对软件进行扩展和定制。这款编辑器的出现,极大地提升了游戏...
《EB163 MapEditor:开源游戏地图编辑器的创新与实践》 EB163 MapEditor是由eb163.com的研发团队精心打造的一款专为Flash游戏设计的45度视角地图编辑器。这款编辑器是在原有的HeptaFish MapEditor基础上进行升级...
"eb163.com上的地图编辑器"可能是一个在线工具,帮助开发者快速设计和布局游戏地图。这样的工具通常允许用户放置各种对象、地形和路径,然后导出为可以在游戏引擎中使用的格式。使用第三方地图编辑器可以显著提高...
压缩包内的" Eb163MapEditor_code_1_6_2.rar"很可能包含了地图编辑器的源代码,版本号1.6.2,开发者可以通过查看源码了解其工作原理,进行定制或改进。而"MapDemo.rar"可能是一个示例地图或演示项目,展示了编辑器的...
`Eb163RpgGameDemo_1_6.rar` 和 `EB163 Flash RPG Webgame Demo V1.06开源网页游戏发布,源代码下载.txt` 提供了基于AS3的RPG游戏的示例,这不仅可以展示AS3在游戏开发中的应用,还展示了如何将编辑器创建的地图实际...
在"EB.zip_ABAQUS_abaqus邓肯张eb_eb子程序_邓肯EB_邓肯张EB"这个压缩包中,包含了一个名为"EB.for"的FORTRAN源代码文件,这就是用于实现邓肯张模型的ABAQUS子程序。该子程序通常会包含以下几个核心部分: 1. 初始...
使用说明: 1、菜单中的“新增”按钮可以增加一个新的地图工程,地图选择本地图片,可以设置宽度和高度以及每...用EB163 MapEditor 45度开源游戏地图编辑器创建新地图 http://www.eb163.com/club/thread-14363-1-1.html
EB8000和EB PRO是威纶通推出的不同系列的产品,它们各自拥有独特的特性和功能。有时,用户可能需要将使用EB8000设计的程序转换到EB PRO系列上,以利用更高级的功能或者适应新的设备需求。以下是一份详细步骤,指导...
"cmp.rar_EB8000_EB8000触摸屏_eb8000proje_eb8000软件实例"这个压缩包文件,包含了一个基于EB8000 Project Manager开发的触摸屏应用示例,对于学习和掌握EB8000触摸屏的编程与应用具有重要的参考价值。 EB8000触摸...
首先,EB Propsim C8是一款功能强大的硬件平台,它可以模拟各种复杂的无线通信信道条件,包括室内、室外、移动环境以及多种多径传播效应。在2.3版本中,可能包含了一些更新和改进,如增强的处理能力、新增的信道模型...
【威纶通EB8000图库】是专为威纶通EB8000系列触摸屏设计的一套全面的图形资源集合。这个图库包含了大量的预设图形、符号和图片,旨在帮助用户在创建和编辑触摸屏界面时提供便利,提升工作效率。通过加载这些图库,...
《EB8000中文版教程》是一份专注于教授如何使用EB8000软件创建和设计人机界面(HMI)的专业教程。EB8000是一款强大的工控软件,广泛应用于工业自动化领域,它提供了直观的用户界面设计工具,帮助工程师们构建与设备...
在IT行业中,尤其是在工业自动化和人机交互领域,威伦屏(Weinview)的EB8000系列是一款广泛使用的触摸屏编程软件。这款软件提供了丰富的功能,帮助工程师们设计出直观、易于操作的界面,以实现设备监控和控制。"EB...
【威纶EB500使用手册】是一份详尽的指南,旨在帮助用户熟悉和有效操作威纶EB500系列触摸屏显示器。这个设备广泛应用于工业自动化领域,作为人机交互界面,允许用户直观地监控和控制各种工业设备。 在手册的00《目录...
标题中的"smartRF04EB驱动(含win7 64bit).zip"指的是一个针对smartRF04EB开发板的驱动程序包,这个包特别包含了适用于Windows 7 64位操作系统的驱动。smartRF04EB是德州仪器(TI)推出的一款无线射频(RF)开发工具,...
本文介绍了使用 EB tresos Studio 23.0.0(以下如有用到均简称为“EB” )和 MCAL 软件的获取、安装、安装后的 MCAL 文件所包含文件内容的介绍、 EB 工具新建配置工程的详细步骤、 EB 工具的校验 及配置代码的生成等...
在公式 F = (Sin / Nin) / (Sout / Nout) 中,Sin 和 Nin 分别代表输入信号功率和输入噪声功率,而 Sout 和 Nout 是输出的对应值。 在扩频通信系统中,例如CDMA或WCDMA,射频信号功率与Eb/No的关系可以通过噪声系数...
这份文档是一份指导手册,介绍了如何在EB_Tresos环境中将System desk中生成的ARXML文件导入并添加新的Task(可运行体)至 Autosar 配置中。Autosar (AUTomotive Open System ARchitecture) 是汽车行业的一个标准化...
文华公式指标公式源码文华财经指标压力支撑画线指标 文华公式指标是基于技术分析的指标,旨在帮助投资者和交易者进行股票市场分析和预测。该指标结合了多种技术指标,包括移动平均线、指数平滑移动平均线、相对强弱...