游戏中的地图一般会需要随角色进行滚动,整理一个工具方便生活喽.
参数很容易懂,1: 背景的可视对象,2: 角色...
package {
import flash.display.*;
import flash.geom.Point;
public class Scroll {
// Constants:
// Public Properties:
// Private Properties:
// Initialization:
public function Scroll() { }
// Public Methods:
// Protected Methods:
/**
滚动背景
*/
public static function scrollWithHero(bg:DisplayObject,playerDo2d:DisplayObject,edgeDistanceX:Number = 200,edgeDistanceY:Number = 200):void{
//限定下x,y边界
if(edgeDistanceX > bg.stage.stageWidth/2){
edgeDistanceX = bg.stage.stageWidth/2;
}
if(edgeDistanceY > bg.stage.stageHeight/2){
edgeDistanceY = bg.stage.stageHeight/2;
}
//hero.mc在舞台上的坐标
var stagePositionX:Number = bg.x + playerDo2d.x;
var stagePositionY:Number = bg.y + playerDo2d.y;
var rightEdge:Number = bg.stage.stageWidth - edgeDistanceX;
var leftEdge:Number = edgeDistanceX;
var topEdge:Number = edgeDistanceY;
var bottomEdge:Number = bg.stage.stageHeight - edgeDistanceY;
if(stagePositionX > rightEdge){
bg.x -= stagePositionX-rightEdge; //背景向左移动,角色的点与右边界点的差
if(bg.x < bg.stage.stageWidth - bg.width) //将背景下限制在舞台的右侧
bg.x = bg.stage.stageWidth - bg.width;
}
if(stagePositionX < leftEdge){
bg.x += (leftEdge-stagePositionX); //背景向右移动,左边界与角色的点的差
if(bg.x >0) //将背景的左下角限制在舞台的左侧
bg.x = 0;
}
//y方向
/**
下移,角色的y坐标大于下侧的值
背景向上移动,角色在舞台的点与下侧的差
将背景限制在舞台的下侧
*/
if(stagePositionY > bottomEdge){
bg.y -= stagePositionY - bottomEdge;
if(bg.y < -(bg.height - bg.stage.stageHeight)){
bg.y = -(bg.height - bg.stage.stageHeight);
}
}else if(stagePositionY < topEdge){
/*
上移,角色的y值小于上侧的值
背景下移,上侧与角色在舞台上的点的差
将背景限制舞台的上侧
*/
bg.y += topEdge - stagePositionY;
if(bg.y >0){
bg.y = 0;
}
}
}
}
}
参数很容易懂,1: 背景的可视对象,2: 角色...