技术中心

这里象征着我们的态度和能力

Flash AS3应用:小球与自定义不规则物体的碰撞下落
作者:smallerbird    来源:闪吧    发布时间:2010-08-11      浏览次数:8285
分享到:

碰撞演示:


详细代码:

/*

原创flash教程尽在自娱自乐 www.MyGameMyLove.com

smallerbird 2010-7-22 mygamemylove@qq.com

源码下载地址:http://www.mygamemylove.com/index.php?t=1&id=338



小球碰撞检测的原理:

就是以小球为圆形。以一定的角度旋转半径获得其端点的若干坐标(就是圆形线上的一些点,这里是用4度为单位旋转的。这样每次会检测90次,4*90=360),然后分别用hitTest(x,y,true)

进行碰撞检测,如果碰撞了,就速度方向取反。



*/

//////////////////////////////////////////画线//////////////////////////////////////////

import flash.filters.BlurFilter;

import fl.events.ColorPickerEvent;

//

var _root:MovieClip=this;

//画线滤镜

var arrFilter:Array=new Array();

var levelBevel = new flash.filters.BevelFilter(2, 45, 16777215, 100, 6710886, 100, 7, 7);

arrFilter.push(levelBevel);

var levelGlow = new flash.filters.GlowFilter(0, 100, 5, 5, 150);

arrFilter.push(levelGlow);

var dropB = new flash.filters.DropShadowFilter(1, 45, 0, 100, 0, 0);

//画线的参数

var lineSize:Number=20;

var px:Number,py:Number;

px=py=0;

//画板

var spPad:Sprite=new Sprite();

spPad.x=spPad.y=0;

spPad.filters=arrFilter;

var GBrush:Graphics=spPad.graphics;

//设置线色

function setGBrush(numC:Number):void {

//trace("setGBrush")

GBrush.lineStyle(lineSize,numC,1);

}

setGBrush(0xff0000);

_root.addChild(spPad);

//拾色器

function colorChange(e:Event):void {

var cp:ColorPicker = e.target as ColorPicker;

setGBrush(cp.selectedColor);

}

myColor.addEventListener(ColorPickerEvent.CHANGE, colorChange);

myColor.selectedColor=0xff0000;

//鼠标画线

var isDown:Boolean=false;

function mouse_down(e:MouseEvent):void {

isDown=true;

}

function mouse_up(e:MouseEvent):void {

isDown=false;

px=py=0;

}

function mouse_move(e:MouseEvent):void {

if (isDown) {

//trace("move")

var x0:Number=_root.mouseX;

var y0:Number=_root.mouseY;

if (px!=0&&py!=0) {

GBrush.moveTo(px,py);

} else {

GBrush.moveTo(x0,y0);

}

GBrush.lineTo(x0,y0);

px=x0;

py=y0;

}

}

stage.addEventListener(MouseEvent.MOUSE_DOWN,mouse_down);

stage.addEventListener(MouseEvent.MOUSE_UP,mouse_up);

stage.addEventListener(MouseEvent.MOUSE_MOVE,mouse_move);



//////////////////////////////////////////小球运动//////////////////////////////////////////

//碰撞目标

var mcHit:Sprite=spPad;

//是否开始运动

var isGo:Boolean=false;

//小球

var spC:Sprite=new Sprite();

var spCG:Graphics=spC.graphics;

var r:Number=10;

spCG.lineStyle(1);

spCG.beginFill(0xff0000);

spCG.drawCircle(0,0,r);

spCG.endFill();

//初使位置

var iniX:Number=160

var iniY:Number=160

spC.x=iniX;

spC.y=iniY;

//Math.PI/180

var oneHuDu:Number=0.017453;//

//trace(Math.PI/180)

//速度的一些参数

var vx:Number=0;

var vy:Number=0;

var va:Number=1;

var vg:Number=0.4;

var vspeed:Number=0.5;

//碰撞检测用的旋转度数

var rSpeed:Number=4;

var numChkCount:Number=360/rSpeed;

/*

原创flash教程尽在自娱自乐 www.MyGameMyLove.com

smallerbird 2010-7-22 mygamemylove@qq.com

源码下载地址:http://www.mygamemylove.com/index.php?t=1&id=338

*/

//小球的循环

function spC_enterFrame(e:Event):Boolean {

if (!isGo) {

return false;

}

var mcMe:Sprite=e.target as Sprite;

var xTem:Number,yTem:Number;

//碰撞检测

for (var i:Number=1; i<=numChkCount; i++) { 

xTem=r*Math.cos(rSpeed*i*oneHuDu);

yTem=r*Math.sin(rSpeed*i*oneHuDu);

if (mcHit.hitTestPoint(mcMe.x+xTem,mcMe.y+yTem,true)) {

//速度去反

vx=-xTem*vspeed;

vy=-yTem*vspeed;

//reak;

}

}

//运动

vx*=va;

vy*=va;

vy+=vg;

mcMe.x+=vx;

mcMe.y+=vy;

//

if(mcMe.y>400){

mcMe.x=iniX;

mcMe.y=iniY;

isGo=false

vx=vy=0

btnPlay.label="Play";

}

//

return true;

}

spC.addEventListener(Event.ENTER_FRAME,spC_enterFrame);

this.addChild(spC);

//控制按钮

//

function fun_PlayBall(e:MouseEvent):void {

var btnName:String=(e.target as Button).name;

if (btnName=="btnPlay") {

isGo=!isGo;

if (isGo) {

btnPlay.label="stop";

} else {

btnPlay.label="Play";

}

} else if (btnName=="btnBallLeft") {

if (!isGo){

spC.x-=5

}



} else if (btnName=="btnBallRight") {

if (!isGo){

spC.x+=5

}

}

}

btnPlay.addEventListener(MouseEvent.CLICK,fun_PlayBall);

//

btnBallLeft.addEventListener(MouseEvent.CLICK,fun_PlayBall);

btnBallRight.addEventListener(MouseEvent.CLICK,fun_PlayBall);
4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号 增值电信业务经营许可证号:滇B2-20110045
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730