+ -
当前位置:首页 → 问答吧 → 求高手来帮忙看下迷宫划线穿透的问题

求高手来帮忙看下迷宫划线穿透的问题

时间:2011-07-19

来源:互联网

写的迷宫类,附件的src\Games\migong\Migong_B.as  但是遇到一个问题,如果我在迷宫内划线太快的话就会发生穿透迷宫的现象,这个问题一直没有想到好的解决办法,求高手帮助。
源文件和截图
未命名.jpg (151.53 KB)
2011-7-19 09:23
复制内容到剪贴板
代码:
package Games.migong{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.Graphics;
import flash.geom.Point;
import flash.events.*;
import flash.text.TextField;
import flash.utils.*;
import flash.ui.Mouse;
public class Migong_B extends MovieClip {
  private var startobj:MovieClip;
  private var endobj:MovieClip;
  private var pathobj:MovieClip;
  private var nodeobj:MovieClip;
  private var pencil:MovieClip;
  private var stageo:Object;
  private var isdraw:Boolean;
  private var ishit:Boolean;
  private var rootArr:Array;
  private var sprite:Sprite;
  private var hh:Graphics;
  public var linesize:Number;
  public var linecolor:Number;
  public var drawlevel:Number;
  private var timer:Timer;
  private var iscross:Boolean;
  //构造函数参数(起始点 , 终点  , 路径 , 节点  ,画笔)
  public function Migong_B( A:MovieClip , B:MovieClip , C:MovieClip , D:MovieClip , E:MovieClip , stageobj:Object ) {
   startobj=A;
   endobj=B;
   pathobj=C;
   nodeobj=D;
   pencil=E;
   stageo=stageobj;
   isdraw=false;
   ishit=false;
   iscross=false;
   rootArr=[];
   sprite = new Sprite();
   hh=sprite.graphics;
   endobj.mouseEnabled=false;
   startobj.mouseEnabled=false;
   sprite.mouseEnabled=false;
   stageo.addChild( sprite );
   stageo.addChild( pencil);
   stageo.addChild( nodeobj);
   nodeobj.visible=false;
   linesize=3.5;
   linecolor=0xff0000;
   drawlevel=0.5;
   timer=new Timer(20);
   timer.addEventListener( "timer" , loop );
  }
  //开始游戏
  public function startGame() {
   stageo.addEventListener( MouseEvent.MOUSE_MOVE, onmove );
   pathobj.addEventListener( MouseEvent.MOUSE_OVER  , mood );
   pathobj.addEventListener( MouseEvent.MOUSE_OUT   , mood );
   ishit=true;
  }
  //停止游戏
  public function stopGame() {
   timer.removeEventListener( "timer" , loop );
   Mouse.show();
   stageo.pencil.visible=false;
   stageo.removeEventListener( MouseEvent.MOUSE_MOVE, onmove );
   pathobj.removeEventListener( MouseEvent.MOUSE_OVER  , mood );
   pathobj.removeEventListener( MouseEvent.MOUSE_OUT   , mood );
   ishit=false;
  }
  //
  private function onmove(e) {
   pencil.x=stageo.mouseX;
   pencil.y=stageo.mouseY;
   pencil.mouseEnabled=false;
   e.updateAfterEvent();
   Mouse.hide();
  }
  //
  private function mood( e ) {
   switch ( e.type ) {
    case MouseEvent.MOUSE_OVER :
     timer.start();
     break;
    case MouseEvent.MOUSE_OUT :
     timer.stop();
     iscross=true;
     break;
   }
  }
  //
  private function loop( e ) {
   if (isdraw==false) {
    if (chackHit(startobj,new Point(stageo.mouseX,stageo.mouseY),30)) {
     isdraw=true;
     rootArr=[stageo.mouseX,stageo.mouseY];
     hh.lineStyle( linesize , linecolor );
     hh.moveTo( stageo.mouseX , stageo.mouseY );
    }
   } else {
    if (iscross) {
     if (chackHit(new Point(rootArr[0],rootArr[1]),new Point(stageo.mouseX,stageo.mouseY),5)) {
      rootArr=[stageo.mouseX,stageo.mouseY];
      hh.lineTo( stageo.mouseX , stageo.mouseY );
      chackPoint();
      iscross=false;
     }
    } else {
     rootArr=[stageo.mouseX,stageo.mouseY];
     hh.lineTo( stageo.mouseX , stageo.mouseY );
     chackPoint();
    }
   }
  }
  //检查是否为终点
  private function chackPoint() {
   if (rootArr.length>0) {
    if (chackHit(endobj,new Point(rootArr[0],rootArr[1]),25)) {
     stopGame();
     dispatcher("gameWin");
    }
   }
  }
  //检测碰撞
  private function chackHit( A , B , val:uint = 0 ):Boolean {
   var xl=A.x-B.x;
   var yl=A.y-B.y;
   var zl=Math.sqrt(xl*xl+yl*yl);
   if (zl<=val) {
    return true;
   } else {
    return false;
   }
  }
  
  //发送事件
  private function dispatcher( type:String ) {
   this.dispatchEvent( new Event( type ));
  }
}
}

作者: shaw11   发布时间: 2011-07-19

www.flashigot.com看看吧,希望对你有用

作者: flashigot   发布时间: 2011-07-19