[原创]EB163 RPG MapDemo地图移动公式
首发www.eb163.com
在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;
if(mapXSpeed < 0 && mapXSpeed > -(_mapScene.mapWidth - __scX) && x >= __scX/2 && x <= _mapScene.mapWidth - __scX/2){ _mapScene.x -= __xspeed/2;}