본문 바로가기

OM

캐릭터 이동



MoveSample.as======================================================================================

package
{
 import flash.display.*;
 import flash.events.*;
 import flash.ui.Keyboard;
 
 public class MoveSample extends Sprite
 {
  private var speedX:Number = 3;
  private var speedY:Number = 4;
  private var jumpPower:Number = 8;
  private var g:Number = 0.5;
 
  private var left:Boolean = false;
  private var right:Boolean = false;
  private var space:Boolean = false;
 
  private var isOnGround:Boolean;
 
  private var totalGround:int = 12;
 
  public function MoveSample()
  {
   circle.speedX = 0;
   circle.speedY = 0;
   
   stage.addEventListener(KeyboardEvent.KEY_DOWN, keydownHandler);
   stage.addEventListener(KeyboardEvent.KEY_UP, keyupHandler);
   this.addEventListener(Event.ENTER_FRAME, enterframeHandler);
  }
 
  private function keydownHandler(e:KeyboardEvent):void
  {
   switch(e.keyCode)
   {
    case Keyboard.LEFT :
     left = true;
     break;
    case Keyboard.RIGHT :
     right = true;
     break;
    case Keyboard.SPACE :
     space = true;
     break;
   }
  }
 
  private function keyupHandler(e:KeyboardEvent):void
  {
   switch(e.keyCode)
   {
    case Keyboard.LEFT :
     left = false;
     break;
    case Keyboard.RIGHT :
     right = false;
     break;
    case Keyboard.SPACE :
     space = false;
     break;
   }
  }
 
  private function enterframeHandler(e:Event):void
  {   
   var ground:Object = getGround();
   
   if(ground == null)
   {
    isOnGround = false;
    circleFly();
   }
   else{
    isOnGround = true;
    circle.y = ground.y;
    circle.speedY = 0;
   }
   
   if(left)
   {
    circleRun("left");
   }
   
   if(right)
   {
    circleRun("right");
   }
   
   if(space)
   {
    circleJump();
   }
   
   if(circle.x < 0)
   {
    circle.x += speedX;
   }
   else if(circle.x > 550){
    circle.x -= speedX;
   }
  }
 
  private function circleRun(dir:String):void
  {
   if(dir=="left")
   {
    circle.speedX = -speedX;
   }
   else{
    circle.speedX = speedX;
   }
   
   if(!isOnGround)
   {
    circle.speedX *= 0.7;
   }
   
   circle.x += circle.speedX;
  }
 
  private function circleJump():void
  {
   if(isOnGround)
   {
    circle.speedY = -jumpPower;
    circle.y += circle.speedY;
   }
  }
 
  private function circleFly():void
  {
   circle.speedY += g;
   circle.y += circle.speedY;
  }
 
  private function getGround():Object
  {
   for(var i:int=0; i<totalGround; i++)
   {
    var ground:Object = this["g"+i];
    var groundX:Number   = ground.x;
    var groundY:Number   = ground.y;
    var groundWid:Number = ground.width;
    var groundHei:Number = ground.height;
   
    var circleX:Number = circle.x;
    var circleY:Number = circle.y;
   
    if(circleX>groundX && circleX<(groundX+groundWid))
    {
     if(circleY>=groundY && circleY<(groundY+groundHei))
     {
      return ground;
     }
    }
   }
   
   return null;
  }
 }
}

=====================================================================================================

'OM' 카테고리의 다른 글

마우스를 따라 다니는 원  (0) 2008.06.03
에어 배포 (badge.swf)  (0) 2008.06.03
에어 디스크립터 파일  (0) 2008.06.03
외부에서 load된 swf가 MouseEvent를 가릴때  (4) 2008.05.18
Yahoo WebAPI를 이용한 날씨 위젯 2  (0) 2008.05.11
Yahoo WebAPI를 이용한 날씨 위젯 1  (1) 2008.05.10
Flash Javascript 연동 (ExternalInterface)  (0) 2008.05.07
애니메이션  (0) 2008.05.07
생명게임  (0) 2008.05.05