|

- 帖子
- 168
- 积分
- 65
- 技术分
- 27
- 来自
- 东莞松山湖
- 在线时间
- 37 小时
- 注册时间
- 2006-5-24
|
1#
发表于 2010-7-30 21:20
| 只看该作者
小球与自定义不规则物体的碰撞下落as3
- /*
- 原创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);
复制代码 |
|