【ActionScript3.0】投篮Flash
发布时间:2020-12-15 07:17:16 所属栏目:百科 来源:网络整理
导读:做得比较简陋。 代码: import flash.events.Event;import flash.events.MouseEvent;var dragging:Boolean = false;var onthebask:Boolean = false;var times:Number = 0;var g:Number = 9.8;//重力参数var zuni:Number = 0.998;//空气阻尼var txxs:Number =
做得比较简陋。 代码:
import flash.events.Event; import flash.events.MouseEvent; var dragging:Boolean = false; var onthebask:Boolean = false; var times:Number = 0; var g:Number = 9.8;//重力参数 var zuni:Number = 0.998;//空气阻尼 var txxs:Number = 0.5;//弹性系数 var speedx:Number = 0; var speedy:Number = 0; //当前时刻的坐标 var newx:Number = ball.x; var newy:Number = ball.y; var oldx:Number = newx; var oldy:Number = newy; //屏幕的尺寸 var stageWidth:Number = stage.stageWidth; var stageHeight:Number = stage.stageHeight; var radius:Number = ball.width / 2; var lkx:Number = lk.x; var lky:Number = lk.y; var lkwidth:Number = lk.width; var lkheight:Number = lk.height; var win:Number = 0; var lose:Number = 0; var b_lose:Number = 0; ball.addEventListener(MouseEvent.MOUSE_DOWN,dragBall); ball.addEventListener(MouseEvent.MOUSE_UP,dropBall); addEventListener(Event.ENTER_FRAME,repeat); ts.autoSize = "left"; function dragBall(evt:MouseEvent){ dragging = true; evt.target.startDrag(); } function dropBall(evt:MouseEvent){ dragging = false; evt.target.stopDrag(); } function repeat(e:Event){ if(onthebask){ //trace(times); --times; if(times<=0){ onthebask = false; } } //trace((ball.x > )); if(dragging){ newx = ball.x; newy = ball.y; speedx = newx - oldx; speedy = newy - oldy; oldx = newx; oldy = newy; } else{ oldx = ball.x; oldy = ball.y; speedy = (speedy + g * 1) * zuni; speedx = speedx * zuni; newx = ball.x + speedx * 1; newy = ball.y + speedy * 1; if(isonthebasketry(oldx,oldy,newx,newy)){ //trace(oldx + " " + oldy + " " +newx + " " + newy); speedx = 0; onthebask = true; times = 10; //++win; //speedy = (speedy + g * 1) * zuni; } if( onthebask && (ball.x > lkx - lkwidth/3) && ball.x < (lkx + lkwidth/5) && (ball.y > lky - lkheight/2 + 10) && (ball.y < lky + lkheight/2)){ ++win; // trace(times); onthebask = false; times = 0; } if( touchthebasket(oldx,newy)){ //trace("打框"); ++b_lose; speedy = - speedy * txxs; speedx = - speedx * txxs; } if(isontherightbasketry(oldx,newy)){ //trace("1"); //trace("打框"); ++lose; speedy = - speedy * txxs; speedx = - speedx * txxs; } if(newx < radius || newx > stageWidth - radius){ speedx = -speedx * txxs; } else{ ball.x = newx; } if(newy < radius || newy > stageHeight - radius){ speedy = -speedy * txxs; } else{ ball.y = newy; } } ts.text = "进框:" + win + "n打框:" + lose +"n打篮筐左上:" + b_lose +"n重力加速度:" + g + "n空气阻尼:"+zuni +"n弹性系数:" + txxs + "nonthebasket:" + onthebask + "ntimes:"+times; } function isonthebasketry(oldx:Number,oldy:Number,newx:Number,newy:Number):Boolean{ if( !( (lky - lkheight/2) > oldy && (lky - lkheight/2) < newy ) )return false; if(newx == oldx && newy >= lky-lkheight/2 && oldy <= lky-lkheight/2){ return ((newx > lkx - lkwidth/3)) && (newx < (lkx + lkwidth/5)); } var k:Number = (newy - oldy) / (newx - oldx); var b:Number = newy - k * newx; var ax:Number = (lky - lkheight / 2 - b)/k; //trace(ax + " " + (lkx + lkwidth/5)); return (ax> lkx - lkwidth/3) && ax < (lkx + lkwidth/5); } function isontherightbasketry(oldx:Number,newy:Number):Boolean{ if( !( (lky - lkheight/2) > oldy && (lky - lkheight/2) < newy ) )return false; if(newx == oldx && newy >= lky-lkheight/2 && oldy <= lky-lkheight/2){ return ( newx >= (lkx - lkwidth/2) && (newx <= (lkx - lkwidth/3))) || newx >= (lkx + lkwidth/5); } var k:Number = (newy - oldy) / (newx - oldx); var b:Number = newy - k * newx; var ax:Number = (lky - lkheight / 2 - b)/k; //trace(ax + " " + oldx + " " + oldy + " " + newx + " " +newy); //trace("y = " + k +"x + "+b + " " +ax); //trace(ax+ " " + (lkx + lkwidth/5)); return ( ax >= (lkx - lkwidth/2) && (ax <= (lkx - lkwidth/3))) || ( ax >= (lkx + lkwidth/5)); } function touchthebasket(oldx:Number,newy:Number):Boolean{ var lkb_x:Number = lkx - lkwidth / 2; var lkb_y:Number = lky - lkheight / 2; var len:Number = radius; if(!((oldx >= lkb_x - len && newx <=lkb_x +len) || (newx >= lkb_x - len && oldx <=lkb_x +len))&& ((oldy >= lkb_y - len && newy <=lkb_y +len) || (newy >= lkb_y - len && oldy <=lkb_y +len)) )return false; if(oldx == newx){ return false; } var k:Number = (newy - oldy) / (newx - oldx); var b:Number = newy - k * newx; var ax1:Number = (lkb_y-len - b)/k; var ax2:Number = (lkb_y+len - b)/k; if( ax1 > ax2){ var temp:Number = ax1; ax1 = ax2; ax2 = temp; } return ax1 >= lkb_x - len && ax2 <= lkb_x + len; } 本案例下载地址:http://download.csdn.net/detail/u013580497/9300993 看看就好,不必较真。(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |