topical media & game development

talk show tell print

lib-flex-animation-code-02-com-foed-Vehicle.ax

lib-flex-animation-code-02-com-foed-Vehicle.ax (swf ) [ flash ] flex


  package com.foed
  {
          import flash.display.Sprite;
          
          
Base class for moving characters.

  
          public class @ax-lib-flex-animation-code-02-com-foed-Vehicle extends Sprite
          {
                  protected var _edgeBehavior:String = WRAP;
                  protected var _mass:Number = 1.0;
                  protected var _maxSpeed:Number = 10;
                  protected var _position:Vector2D;
                  protected var _velocity:Vector2D;
                  
                  // potential edge behaviors
                  public static const WRAP:String = "wrap";
                  public static const BOUNCE:String = "bounce";
                  
                  
Constructor.

  
                  public function @ax-lib-flex-animation-code-02-com-foed-Vehicle()
                  {
                          _position = new Vector2D();
                          _velocity = new Vector2D();
                          draw();
                  }
                  
                  
Default graphics for vehicle. Can be overridden in subclasses.

  
                  protected function draw():void
                  {
                          graphics.clear();
                          graphics.lineStyle(0);
                          graphics.moveTo(10, 0);
                          graphics.lineTo(-10, 5);
                          graphics.lineTo(-10, -5);
                          graphics.lineTo(10, 0);
                  }
                  
                  
Handles all basic motion. Should be called on each frame / timer interval.

  
                  public function update():void
                  {
                          // make sure velocity stays within max speed.
                          _velocity.truncate(_maxSpeed);
                          
                          // add velocity to position
                          _position = _position.add(_velocity);
                          
                          // handle any edge behavior
                          if(_edgeBehavior == WRAP)
                          {
                                  wrap();
                          }
                          else if(_edgeBehavior == BOUNCE)
                          {
                                  bounce();
                          }
                          
                          // update position of sprite
                          x = position.x;
                          y = position.y;
                          
                          // rotate heading to match velocity
                          rotation = _velocity.angle * 180 / Math.PI;
                  }
                  
                  
Causes character to bounce off edge if edge is hit.

  
                  private function bounce():void
                  {
                          if(stage != null)
                          {
                                  if(position.x > stage.stageWidth)
                                  {
                                          position.x = stage.stageWidth;
                                          velocity.x *= -1;
                                  }
                                  else if(position.x < 0)
                                  {
                                          position.x = 0;
                                          velocity.x *= -1;
                                  }
                                  
                                  if(position.y > stage.stageHeight)
                                  {
                                          position.y = stage.stageHeight;
                                          velocity.y *= -1;
                                  }
                                  else if(position.y < 0)
                                  {
                                          position.y = 0;
                                          velocity.y *= -1;
                                  }
                          }
                  }
                  
                  
Causes character to wrap around to opposite edge if edge is hit.

  
                  private function wrap():void
                  {
                          if(stage != null)
                          {
                                  if(position.x > stage.stageWidth) position.x = 0;
                                  if(position.x < 0) position.x = stage.stageWidth;
                                  if(position.y > stage.stageHeight) position.y = 0;
                                  if(position.y < 0) position.y = stage.stageHeight;
                          }
                  }
                  
                  
Sets / gets what will happen if character hits edge.

  
                  public function set edgeBehavior(value:String):void
                  {
                          _edgeBehavior = value;
                  }
                  public function get edgeBehavior():String
                  {
                          return _edgeBehavior;
                  }
                  
                  
Sets / gets mass of character.

  
                  public function set mass(value:Number):void
                  {
                          _mass = value;
                  }
                  public function get mass():Number
                  {
                          return _mass;
                  }
                  
                  
Sets / gets maximum speed of character.

  
                  public function set maxSpeed(value:Number):void
                  {
                          _maxSpeed = value;
                  }
                  public function get maxSpeed():Number
                  {
                          return _maxSpeed;
                  }
                  
                  
Sets / gets position of character as a Vector2D.

  
                  public function set position(value:Vector2D):void
                  {
                          _position = value;
                          x = _position.x;
                          y = _position.y;
                  }
                  public function get position():Vector2D
                  {
                          return _position;
                  }
                  
                  
Sets / gets velocity of character as a Vector2D.

  
                  public function set velocity(value:Vector2D):void
                  {
                          _velocity = value;
                  }
                  public function get velocity():Vector2D
                  {
                          return _velocity;
                  }
                  
                  
Sets x position of character. Overrides Sprite.x to set internal Vector2D position as well.

  
                  override public function set x(value:Number):void
                  {
                          super.x = value;
                          _position.x = x;
                  }
                  
                  
Sets y position of character. Overrides Sprite.y to set internal Vector2D position as well.

  
                  override public function set y(value:Number):void
                  {
                          super.y = value;
                          _position.y = y;
                  }
                  
          }
  }


(C) Æliens 18/6/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.