·您当前的位置:首页 > 技术教程 > 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. { 
  4.    var shapeDef:b2CircleDef = new b2CircleDef(); 
  5.    isStatic?shapeDef.density = 0:shapeDef.density = 5; 
  6.    shapeDef.restitution = 0.1; 
  7.    shapeDef.friction = 0.4; 
  8.    shapeDef.radius = radius / _physcale; 
  9.    var bodyDef:b2BodyDef = new b2BodyDef(); 
  10.    bodyDef.angle = rotation; 
  11.    bodyDef.position.Set(xpos / _physcale, ypos / _physcale); 
  12.    bodyDef.userData = obj; 
  13.    var body:b2Body = _world.CreateBody(bodyDef); 
  14.    body.CreateShape(shapeDef); 
  15.    body.SetMassFromShapes(); 
  16.    obj.scaleX = radius*2 / obj.width; 
  17.    obj.scaleY = radius * 2 / obj.height; 
  18.    obj.name = "hero"; 
  19.    obj.body = body; 
  20.    container.addChild(obj); 
  21. } 

3.处理事件

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

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

热门文章推荐

请稍候...

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

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