firstProject

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;
            }
        }
    }

代码也就这么多,菜鸟刚接触,如果有不明白的地方可以留言问我,或者本鸟写错了- -!,欢迎指正!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值