·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3中键盘操作控制实例源代码

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

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

1.添加监听

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

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

  1. createCircle(this, 30, 300, 20, 0, false, new Circle()); 
  2. private function createCircle(container:DisplayObjectContainer,xpos:int,ypos:int,radius:int,rotation:Number,isStatic:Boolean,obj:MovieClip):void 
  3.    var shapeDef:b2CircleDef = new b2CircleDef(); 
  4.    isStatic?shapeDef.density = 0:shapeDef.density = 5
  5.    shapeDef.restitution = 0.1; 
  6.    shapeDef.friction = 0.4; 
  7.    shapeDef.radius = radius / _physcale; 
  8.    var bodyDef:b2BodyDef = new b2BodyDef(); 
  9.    bodyDef.angle = rotation
  10.    bodyDef.position.Set(xpos / _physcale, ypos / _physcale); 
  11.    bodyDef.userData = obj
  12.    var body:b2Body = _world.CreateBody(bodyDef); 
  13.    body.CreateShape(shapeDef); 
  14.    body.SetMassFromShapes(); 
  15.    obj.scaleX = radius*2 / obj.width; 
  16.    obj.scaleY = radius * 2 / obj.height; 
  17.    obj.name = "hero"
  18.    obj.body = body; 
  19.    container.addChild(obj); 

3.处理事件

  1. private function onKeyDownHandle(e:KeyboardEvent):void  
  2.      setBoolean(e.keyCode, true); 
  3.    
  4. private function onKeyUpHandle(e:KeyboardEvent):void  
  5.      setBoolean(e.keyCode,false); 
  6.  
  7. private function setBoolean(keyCode:int, flag:Boolean ):void  
  8.      switch(keyCode) 
  9.      { 
  10.         case 37: 
  11.            isLeft = flag
  12.            break; 
  13.         case 38: 
  14.            isUp = flag
  15.            break; 
  16.         case 39: 
  17.            isRight = flag
  18.            break; 
  19.      } 
  20.  
  21.  
  22. private function onFrame(e:Event):void  
  23.      moveBody(); 
  24.     
  25.      _world.Step(_timeStep, _iteration); 
  26.     
  27.      for (var bb:b2Body = _world.m_bodyList; bb; bbbb = bb.m_next ) 
  28.      { 
  29.         if (bb.m_userData is DisplayObject) 
  30.         { 
  31.             bbbb.m_userData.x = bb.GetPosition().x * _physcale; 
  32.             bbbb.m_userData.y = bb.GetPosition().y * _physcale; 
  33.             bbbb.m_userData.rotation = bb.GetAngle() * 180 / Math.PI; 
  34.         } 
  35.      } 
  36.  
  37. private function moveBody():void  
  38.      var child:MovieClip = this.getChildByName("hero") as MovieClip; 
  39.      var body:b2Body = child.body as b2Body; 
  40.     
  41.      if (isLeft) 
  42.      { 
  43.         body.WakeUp(); 
  44.         body.m_linearVelocity.x -0.5; 
  45.      } 
  46.      if (isRight) 
  47.      { 
  48.         body.WakeUp(); 
  49.         body.m_linearVelocity.x += 0.5; 
  50.      } 
  51.      if (isUp) 
  52.      { 
  53.         if (body.m_linearVelocity.y > -1) 
  54.         { 
  55.            body.WakeUp(); 
  56.            body.ApplyImpulse(new b2Vec2(0, -30), body.GetWorldCenter()); 
  57.         } 
  58.      } 
  59.  

 出处:http://ywxgod.cnblogs.com

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器