• 简单的键盘控制


    通过键盘控制物体的移动,改变物体的线速度即可以改变它的运动状态。通过监听舞台的MouseEvent.MOUSE_DOWN和MouseEvent.MOUSE_UP事件来移动物体。当mouseDown时,设置一个Boolean值记下按下的方向键,在Event.ENTER_FRAME事件中根据设置的Boolean值来移动物体,具体如下:

    1.添加监听

    addEventListener(Event.ENTER_FRAME, onFrame);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownHandle);
    stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUpHandle);

    2.创建物体,创建时设置一个名称,因为现实对象为MovieClip,所以可以动态增加其属性。

    createCircle(this, 30, 300, 20, 0, false, new Circle());
    private function createCircle(container:DisplayObjectContainer,xpos:int,ypos:int,radius:int,rotation:Number,isStatic:Boolean,obj:MovieClip):void
    {
       var shapeDef:b2CircleDef = new b2CircleDef();
       isStatic?shapeDef.density = 0:shapeDef.density = 5;
       shapeDef.restitution = 0.1;
       shapeDef.friction = 0.4;
       shapeDef.radius = radius / _physcale;
       var bodyDef:b2BodyDef = new b2BodyDef();
       bodyDef.angle = rotation;
       bodyDef.position.Set(xpos / _physcale, ypos / _physcale);
       bodyDef.userData = obj;
       var body:b2Body = _world.CreateBody(bodyDef);
       body.CreateShape(shapeDef);
       body.SetMassFromShapes();
       obj.scaleX = radius*2 / obj.width;
       obj.scaleY = radius * 2 / obj.height;
       obj.name = "hero";
       obj.body = body;
       container.addChild(obj);
    }

    3.处理事件

    private function onKeyDownHandle(e:KeyboardEvent):void 
    {
         setBoolean(e.keyCode, true);
    }
      
    private function onKeyUpHandle(e:KeyboardEvent):void 
    {
         setBoolean(e.keyCode,false);
    }

    private function setBoolean(keyCode:int, flag:Boolean ):void 
    {
         switch(keyCode)
         {
            case 37:
               isLeft = flag;
               break;
            case 38:
               isUp = flag;
               break;
            case 39:
               isRight = flag;
               break;
         }

    }

    private function onFrame(e:Event):void 
    {
         moveBody();
       
         _world.Step(_timeStep, _iteration);
       
         for (var bb:b2Body = _world.m_bodyList; bb; bb = bb.m_next )
         {
            if (bb.m_userData is DisplayObject)
            {
                bb.m_userData.x = bb.GetPosition().x * _physcale;
                bb.m_userData.y = bb.GetPosition().y * _physcale;
                bb.m_userData.rotation = bb.GetAngle() * 180 / Math.PI;
            }
         }
    }

    private function moveBody():void 
    {
         var child:MovieClip = this.getChildByName("hero") as MovieClip;
         var body:b2Body = child.body as b2Body;
       
         if (isLeft)
         {
            body.WakeUp();
            body.m_linearVelocity.x -= 0.5;
         }
         if (isRight)
         {
            body.WakeUp();
            body.m_linearVelocity.x += 0.5;
         }
         if (isUp)
         {
            if (body.m_linearVelocity.y > -1)
            {
               body.WakeUp();
               body.ApplyImpulse(new b2Vec2(0, -30), body.GetWorldCenter());
            }
         }

    }

  • 相关阅读:
    团队冲刺第一天
    leetcode整理
    eclipse 中JSP环境搭建
    java期末小结
    桌面宠物online------------------面对对象程序综合设计2020年
    java
    4.3 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (20分)
    选择
    算法---分支限定0/1背包--蚁群算法
    博客园特效
  • 原文地址:https://www.cnblogs.com/ywxgod/p/1699991.html
Copyright © 2020-2023  润新知