WEB开发网
开发学院图形图像Flash Word Play contest prototype, four days to make... 阅读

Word Play contest prototype, four days to make something decent out of it

 2009-10-18 00:00:00 来源:WEB开发网   
核心提示:Letters are falling (very quickly in this example), click on them to make a word, click on a previously clicked letter to submit a word and make letters disappe

Letters are falling (very quickly in this example), click on them to make a word, click on a previously clicked letter to submit a word and make letters disappear, or click outside to reset the word.

If a letter falls outside the stage, then it’s game over.

package {
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 import flash.events.Event;
 import flash.utils.Timer;
 import flash.events.TimerEvent;
 import Box2D.Dynamics.*;
 import Box2D.Collision.*;
 import Box2D.Collision.Shapes.*;
 import Box2D.Common.Math.*;
 public class HelloWorld extends Sprite {
  public var words:embedded_text = new embedded_text();
  public var m_world:b2World;
  public var m_iterations:int=10;
  public var m_timeStep:Number=1.0/30.0;
  public var body:b2Body;
  public var bodyDef:b2BodyDef;
  public var boxDef:b2PolygonDef;
  public var word:String="";
  public var letters:String="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  public var words_array:Array = new Array();
  public var remove:Boolean=false;
  public var release_letters:Boolean=false;
  public var game_over:Boolean=false;
  public function HelloWorld() {
   words_array=words.toString().split(",");
   var worldAABB:b2AABB = new b2AABB();
   worldAABB.lowerBound.Set(-100.0, -100.0);
   worldAABB.upperBound.Set(100.0, 100.0);
   var gravity:b2Vec2=new b2Vec2(0.0,10.0);
   var doSleep:Boolean=true;
   m_world=new b2World(worldAABB,gravity,doSleep);
   add_walls();
   var time_count:Timer=new Timer(1000);
   time_count.start();
   time_count.addEventListener(TimerEvent.TIMER, on_time);
   addEventListener(Event.ENTER_FRAME, Update, false, 0, true);
   stage.addEventListener(MouseEvent.MOUSE_DOWN, on_mouse_down);
  }
  public function add_walls() {
   bodyDef = new b2BodyDef();
   bodyDef.position.Set(10.5, 15.75);
   boxDef = new b2PolygonDef();
   boxDef.SetAsBox(10.5, 0.25);
   boxDef.friction=0.3;
   boxDef.density=0;
   body=m_world.CreateBody(bodyDef);
   body.CreateShape(boxDef);
   body.SetMassFromShapes();
   bodyDef = new b2BodyDef();
   bodyDef.position.Set(0.25, 12);
   boxDef = new b2PolygonDef();
   boxDef.SetAsBox(0.25, 4);
   boxDef.friction=0.3;
   boxDef.density=0;
   body=m_world.CreateBody(bodyDef);
   body.CreateShape(boxDef);
   body.SetMassFromShapes();
   bodyDef = new b2BodyDef();
   bodyDef.position.Set(20.75, 12);
   boxDef = new b2PolygonDef();
   boxDef.SetAsBox(0.25, 4);
   boxDef.friction=0.3;
   boxDef.density=0;
   body=m_world.CreateBody(bodyDef);
   body.CreateShape(boxDef);
   body.SetMassFromShapes();
   var the_walls:walls=new walls();
   addChild(the_walls);
  }
  public function on_time(event:TimerEvent) {
   if (! game_over) {
    var lett=letters.charAt(Math.floor(Math.random()*26));
    bodyDef = new b2BodyDef();
    bodyDef.position.x=Math.random()*19+1;
    bodyDef.position.y=-2;
    boxDef = new b2PolygonDef();
    boxDef.SetAsBox(0.75,0.75);
    boxDef.density=1.0;
    boxDef.friction=0.5;
    boxDef.restitution=0.2;
    bodyDef.userData = new letter();
    bodyDef.userData.lettertext.text=lett;
    bodyDef.userData.width=1.5*30;
    bodyDef.userData.height=1.5*30;
    body=m_world.CreateBody(bodyDef);
    body.CreateShape(boxDef);
    body.SetMassFromShapes();
    addChild(bodyDef.userData);
    bodyDef.userData.x=bodyDef.position.x*30;
    bodyDef.userData.y=bodyDef.position.y*30;
   }
  }
  public function on_mouse_down(evt:MouseEvent):void {
   remove=false;
   if (! game_over) {
    var body:b2Body=GetBodyAtMouse();
    var position:int;
    if (body) {
     if (body.m_userData.alpha==1) {
      body.m_userData.alpha=0.5;
      word+=body.m_userData.lettertext.text.toLowerCase();
     } else {
      position=words_array.indexOf(word);
      if (position>-1) {
       word="";
       remove=true;
      }
     }
    } else {
     word="";
     release_letters=true;
    }
   }
  }
  public function GetBodyAtMouse(includeStatic:Boolean=false):b2Body {
   var real_x_mouse = (stage.mouseX)/30;
   var real_y_mouse = (stage.mouseY)/30;
   var mousePVec:b2Vec2 = new b2Vec2();
   mousePVec.Set(real_x_mouse, real_y_mouse);
   var aabb:b2AABB = new b2AABB();
   aabb.lowerBound.Set(real_x_mouse - 0.001, real_y_mouse - 0.001);
   aabb.upperBound.Set(real_x_mouse + 0.001, real_y_mouse + 0.001);
   var k_maxCount:int=10;
   var shapes:Array = new Array();
   var count:int=m_world.Query(aabb,shapes,k_maxCount);
   var body:b2Body=null;
   for (var i:int = 0; i <count; ++i) {
    if (shapes[i].m_body.IsStatic()==false||includeStatic) {
     var tShape:b2Shape=shapes[i] as b2Shape;
     var inside:Boolean=tShape.TestPoint(tShape.m_body.GetXForm(),mousePVec);
     if (inside) {
      body=tShape.m_body;
      break;
     }
    }
   }
   return body;
  }
  public function Update(e:Event):void {
   m_world.Step(m_timeStep, m_iterations);
   for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
    if (bb.m_userData is Sprite) {
     bb.m_userData.x=bb.GetPosition().x*30;
     bb.m_userData.y=bb.GetPosition().y*30;
     if (bb.m_userData.y>500) {
      game_over=true;
     }
     bb.m_userData.rotation = bb.GetAngle() * (180/Math.PI);
     if (remove&&bb.m_userData.alpha==0.5) {
      removeChild(bb.m_userData);
      bb.m_userData=null;
      m_world.DestroyBody(bb);
     }
     if (release_letters&&bb.m_userData.alpha==0.5) {
      bb.m_userData.alpha=1;
     }
    }
   }
   release_letters=false;
  }
 }
}

1 2  下一页

Tags:Word Play contest

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接