flash之路(一)—-关于人物移动问题
前提条件:
1.先用flash CS6 设计出一个地图,即屏幕背景,我定义为 map
2.再设计一个人物,注意:这个人物移动的时候有四个方向,即上下左右,我定义为:role_left,role_right,role_up,role_down
功能:
1.先加载地图
2.初始化人物时,会有一个人物的朝向,我定义为role_down
3.实现人物的上下左右移动
4.当人物距离边框一定距离的时候,人物继续向该边框移动的话,边框会跟屏幕一起移动
难点:PS:我才接触flash三天,可能会觉得是难点,如果是大神,请略过。。。。。。
1.加载人物,以及人物于地图的层次关系,因为在后面的移动过程中与这个有关系
2.如何判定人物与边框的距离,以及人物与边框之间的“事件”的处理
解决过程
1.加载地图 map
//定义加载对象路径
private const FILE_PATH:String = "/res01.swf";
private const CLASS_NAME1:String = "role_down"; //向下
private const CLASS_NAME2:String = "role_left";// 向左
private const CLASS_NAME3:String = "role_up";//向上
private const CLASS_NAME4:String = "role_right";//向右
private const CLASS_NAME5:String = "map";//地图
//定义请求
private var urlRequest:URLRequest= new URLRequest(FILE_PATH);
//定义容器
private var loader:Loader;
private var role_down:MovieClip;
private var role_left:MovieClip;
private var role_up:MovieClip;
private var role_right:MovieClip;
public function FirstProject()
{
loader=new Loader();
role=new Sprite();
//加载
loader.load(urlRequest);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
}
private function onComplete(event:Event):void
{
var loadedSWF:Object = event.target;
var domain:ApplicationDomain =
loadedSWF.applicationDomain as ApplicationDomain;
//加载地图
var RoleClass:Class = domain.getDefinition(CLASS_NAME5) as Class;
var map:Sprite=(new RoleClass()) as Sprite;
map.x=0,map.y=0;
role.addChild(map);
//加载人物
addChild(role);
//初始化方向---向下
var RoleClass1:Class = domain.getDefinition(CLASS_NAME1) as Class;
role_down=(new RoleClass1()) as MovieClip;
role_down.x=w,role_down.y=h;
role.addChild(role_down);
var RoleClass2:Class = domain.getDefinition(CLASS_NAME2) as Class;
role_left=(new RoleClass2()) as MovieClip;
role.addChild(role_left);
var RoleClass3:Class = domain.getDefinition(CLASS_NAME3) as Class;
role_up=(new RoleClass3()) as MovieClip;
role.addChild(role_up);
var RoleClass4:Class = domain.getDefinition(CLASS_NAME4) as Class;
role_right=(new RoleClass4()) as MovieClip;
role.addChild(role_right);
trace("共有:"+role.numChildren);
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKDown);
以上就基本是我加载的代码了,会发现我定义了一个role,这个role就是用来实现控制人物移动时,更改人物移动的方向了,而且难点2也幸亏有了这个role
那么接下来就是对边框进行逻辑判断了,看代码你就明白了,很简单的一个逻辑
private function onKDown(ee:KeyboardEvent):void
{
if(ee.keyCode==38){
//向上 role_up
//加载
role_up.visible=true;
role_left.visible=false;
role_down.visible=false;
role_right.visible=false;
//是否到边框进行判断
if(i>stage.stageHeight-325){
//没到边框
i=i-10;
role_up.x=role_down.x,role_up.y=role_down.y;
role_down.y=role_down.y-10;
}else{
//到边框
role.x=role.x,role.y=role.y+10;
role_up.x=role_down.x,role_up.y=role_down.y;
role_down.y=role_down.y-10;
trace("上到了....role.y="+role.y+" role_down.y="+role_down.y+" stage.stageHeight="+stage.stageHeight);
}
}else if(ee.keyCode==40){
//向下 role_down
//加载
role_down.visible=true;
role_left.visible=false;
role_up.visible=false;
role_right.visible=false;
//是否到边框进行判断
if(i<=stage.stageHeight-50){
//没到边框
i=i+10;
role_down.x=role_down.x,role_down.y=role_down.y+10;
trace("i的值:"+i);
}else{
//到边框
role.x=role.x,role.y=role.y-10;
role_down.x=role_down.x,role_down.y=role_down.y+10;
trace("下到了....role.y="+role.y+" role_down.y="+role_down.y+" stage.stageHeight="+stage.stageHeight);
}
}else if(ee.keyCode==37){
//向左 role_left
//加载
role_down.visible=false;
role_left.visible=true;
role_up.visible=false;
role_right.visible=false;
//是否到边框
if(j<=stage.stageWidth-50){
j=j+10;
role_left.x=role_down.x,role_left.y=role_down.y;
role_down.x=role_down.x-10;
}else{
//到边框
role.y=role.y,role.x=role.x+10;
role_left.x=role_down.x,role_left.y=role_down.y;
role_down.x=role_down.x-10;
}
}else if(ee.keyCode==39){
//向右 role_right
//加载
role_down.visible=false;
role_left.visible=false;
role_up.visible=false;
role_right.visible=true;
//是否到边框
if(j>50){
j=j-10;
role_right.x=role_down.x,role_right.y=role_down.y;
role_down.x=role_down.x+10;
}else{
//到边框
role.y=role.y,role.x=role.x-10;
role_right.x=role_down.x,role_right.y=role_down.y;
role_down.x=role_down.x+10;
}
}
}
代码也就这么多,菜鸟刚接触,如果有不明白的地方可以留言问我,或者本鸟写错了- -!,欢迎指正!