求高手来帮忙看下迷宫划线穿透的问题
时间:2011-07-19
来源:互联网
写的迷宫类,附件的src\Games\migong\Migong_B.as 但是遇到一个问题,如果我在迷宫内划线太快的话就会发生穿透迷宫的现象,这个问题一直没有想到好的解决办法,求高手帮助。
源文件和截图
源文件和截图
复制内容到剪贴板
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 ));
}
}
}
代码:
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28