碰撞演示:
詳細(xì)代碼:
/*
原創(chuàng)flash教程盡在自娛自樂 www.MyGameMyLove.com
smallerbird 2010-7-22 mygamemylove@qq.com
源碼下載地址:http://www.mygamemylove.com/index.php?t=1&id=338
小球碰撞檢測的原理:
就是以小球?yàn)閳A形。以一定的角度旋轉(zhuǎn)半徑獲得其端點(diǎn)的若干坐標(biāo)(就是圓形線上的一些點(diǎn),這里是用4度為單位旋轉(zhuǎn)的。這樣每次會(huì)檢測90次,4*90=360),然后分別用hitTest(x,y,true)
進(jìn)行碰撞檢測,如果碰撞了,就速度方向取反。
*/
//////////////////////////////////////////畫線//////////////////////////////////////////
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);
//畫線的參數(shù)
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;
//設(shè)置線色
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;
//鼠標(biāo)畫線
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);
//////////////////////////////////////////小球運(yùn)動(dòng)//////////////////////////////////////////
//碰撞目標(biāo)
var mcHit:Sprite=spPad;
//是否開始運(yùn)動(dòng)
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)
//速度的一些參數(shù)
var vx:Number=0;
var vy:Number=0;
var va:Number=1;
var vg:Number=0.4;
var vspeed:Number=0.5;
//碰撞檢測用的旋轉(zhuǎn)度數(shù)
var rSpeed:Number=4;
var numChkCount:Number=360/rSpeed;
/*
原創(chuàng)flash教程盡在自娛自樂 www.MyGameMyLove.com
smallerbird 2010-7-22 mygamemylove@qq.com
源碼下載地址:http://www.mygamemylove.com/index.php?t=1&id=338
*/
//小球的循環(huán)
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;
}
}
//運(yùn)動(dòng)
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);
原創(chuàng)flash教程盡在自娛自樂 www.MyGameMyLove.com
smallerbird 2010-7-22 mygamemylove@qq.com
源碼下載地址:http://www.mygamemylove.com/index.php?t=1&id=338
小球碰撞檢測的原理:
就是以小球?yàn)閳A形。以一定的角度旋轉(zhuǎn)半徑獲得其端點(diǎn)的若干坐標(biāo)(就是圓形線上的一些點(diǎn),這里是用4度為單位旋轉(zhuǎn)的。這樣每次會(huì)檢測90次,4*90=360),然后分別用hitTest(x,y,true)
進(jìn)行碰撞檢測,如果碰撞了,就速度方向取反。
*/
//////////////////////////////////////////畫線//////////////////////////////////////////
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);
//畫線的參數(shù)
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;
//設(shè)置線色
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;
//鼠標(biāo)畫線
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);
//////////////////////////////////////////小球運(yùn)動(dòng)//////////////////////////////////////////
//碰撞目標(biāo)
var mcHit:Sprite=spPad;
//是否開始運(yùn)動(dòng)
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)
//速度的一些參數(shù)
var vx:Number=0;
var vy:Number=0;
var va:Number=1;
var vg:Number=0.4;
var vspeed:Number=0.5;
//碰撞檢測用的旋轉(zhuǎn)度數(shù)
var rSpeed:Number=4;
var numChkCount:Number=360/rSpeed;
/*
原創(chuàng)flash教程盡在自娛自樂 www.MyGameMyLove.com
smallerbird 2010-7-22 mygamemylove@qq.com
源碼下載地址:http://www.mygamemylove.com/index.php?t=1&id=338
*/
//小球的循環(huán)
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;
}
}
//運(yùn)動(dòng)
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);